第12章Java高级编程.ppt
《第12章Java高级编程.ppt》由会员分享,可在线阅读,更多相关《第12章Java高级编程.ppt(45页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Java第第1212章章 JavaJava高级编程高级编程 JavaAnnotationAnnotation 2JavaJava反射机制反射机制反射机制反射机制 3 1JavaJava代理代理代理代理 3 3本章内容提要本章内容提要 Java12.1.1 Java12.1.1 Java12.1.1 Java12.1.1 Java反射机制简介反射机制简介反射机制简介反射机制简介 反射(反射(反射(反射(ReflectionReflectionReflectionReflection)机制是一种程序设计语言功能,可)机制是一种程序设计语言功能,可)机制是一种程序设计语言功能,可)机制是一种程序设计
2、语言功能,可以实现在程序解释、运行时动态加载类,实例化对象,并可以实现在程序解释、运行时动态加载类,实例化对象,并可以实现在程序解释、运行时动态加载类,实例化对象,并可以实现在程序解释、运行时动态加载类,实例化对象,并可查看类中成员变量和方法的信息、定义对象并操作对象使用查看类中成员变量和方法的信息、定义对象并操作对象使用查看类中成员变量和方法的信息、定义对象并操作对象使用查看类中成员变量和方法的信息、定义对象并操作对象使用成员变量和调用方法。成员变量和调用方法。成员变量和调用方法。成员变量和调用方法。JavaJavaJavaJava反射机制是通过反射机制是通过反射机制是通过反射机制是通过Cl
3、assClassClassClass类中相关类中相关类中相关类中相关方法的使用实现的,其中,方法的使用实现的,其中,方法的使用实现的,其中,方法的使用实现的,其中,ClassClassClassClass类中的类方法:类中的类方法:类中的类方法:类中的类方法:public static Class forName(String className)public static Class forName(String className)public static Class forName(String className)public static Class forName(String
4、className)throws ClassNotFountExceptionthrows ClassNotFountExceptionthrows ClassNotFountExceptionthrows ClassNotFountException 可以通过参数加载一个类,创建一个可以通过参数加载一个类,创建一个可以通过参数加载一个类,创建一个可以通过参数加载一个类,创建一个ClassClassClassClass对象,之后该对象,之后该对象,之后该对象,之后该ClassClassClassClass对象调用方法:对象调用方法:对象调用方法:对象调用方法:public T newInsta
5、nce()public T newInstance()public T newInstance()public T newInstance()即可获取一个被加载的类的对象方式。即可获取一个被加载的类的对象方式。即可获取一个被加载的类的对象方式。即可获取一个被加载的类的对象方式。12.1 Java12.1 Java反射机制反射机制 Java例例例例12-12-1 1import java.util.Scanner;import java.util.Scanner;abstract class SonyProductabstract class SonyProductString type;Str
6、ing type;double price;double price;abstract void printInfo();abstract void printInfo();class SonyCamera extends SonyProductclass SonyCamera extends SonyProductvoid printInfo()void printInfo()System.out.println(The SonyCamera:type-System.out.println(The SonyCamera:type-+type+,price-+price+!);+type+,p
7、rice-+price+!);12.1 Java12.1 Java反射机制反射机制 Javaclass SonyTV extends SonyProductclass SonyTV extends SonyProductvoid printInfo()void printInfo()System.out.println(The SonyTV:type-System.out.println(The SonyTV:type-+type+,price-+price+!);+type+,price-+price+!);public class Example12_1public class Examp
8、le12_1public static void main(String args)public static void main(String args)Scanner scan=new Scanner(System.in);Scanner scan=new Scanner(System.in);System.out.println(Please input product:);System.out.println(Please input product:);String className=scan.next();String className=scan.next();System.o
9、ut.println(Please input type of product:);System.out.println(Please input type of product:);12.1 Java12.1 Java反射机制反射机制 Java String type=scan.next();String type=scan.next();System.out.println(Please input price of product:);System.out.println(Please input price of product:);double price=scan.nextDoub
10、le();double price=scan.nextDouble();try Class c=Class.forName(className);try Class c=Class.forName(className);SonyProduct sonyProduct=SonyProduct sonyProduct=(SonyProduct)c.newInstance();(SonyProduct)c.newInstance();sonyProduct.type=type;sonyProduct.type=type;sonyProduct.price=price;sonyProduct.pric
11、e=price;sonyProduct.printInfo();sonyProduct.printInfo();catch(ClassNotFoundException e)catch(ClassNotFoundException e)System.out.println(e);System.out.println(e);catch(InstantiationException e)catch(InstantiationException e)System.out.println(e);System.out.println(e);catch(IllegalAccessException e)c
12、atch(IllegalAccessException e)System.out.println(e);System.out.println(e);12.1 Java12.1 Java反射机制反射机制 Java12.1.2 12.1.2 12.1.2 12.1.2 类加载器类加载器类加载器类加载器 利用反射机制创建对象与直接通过构造方利用反射机制创建对象与直接通过构造方利用反射机制创建对象与直接通过构造方利用反射机制创建对象与直接通过构造方法创建对象是法创建对象是法创建对象是法创建对象是JavaJavaJavaJava中定义对象的两种方式,但其中定义对象的两种方式,但其中定义对象的两种方式,但
13、其中定义对象的两种方式,但其本质上都是通过类加载器来完成的。类加载器用本质上都是通过类加载器来完成的。类加载器用本质上都是通过类加载器来完成的。类加载器用本质上都是通过类加载器来完成的。类加载器用于加载于加载于加载于加载JavaJavaJavaJava字节码文件,它的执行过程反映了字节码文件,它的执行过程反映了字节码文件,它的执行过程反映了字节码文件,它的执行过程反映了JavaJavaJavaJava程序运行时引入的类库及字节码文件的加载程序运行时引入的类库及字节码文件的加载程序运行时引入的类库及字节码文件的加载程序运行时引入的类库及字节码文件的加载过程。过程。过程。过程。12.1 Java1
14、2.1 Java反射机制反射机制 Java例例例例12-12-2 2 class Studentclass Student String name;String name;String nation;String nation;public void printInfo()public void printInfo()System.out.println(I am+name+,I am System.out.println(I am+name+,I am+nation+!);+nation+!);12.1 Java12.1 Java反射机制反射机制 Javapublic class Examp
15、le12_2public class Example12_2 public static void main(String args)public static void main(String args)Student stu=new Student();Student stu=new Student();stu.name=LiMing;stu.name=LiMing;stu.nation=Chinese;stu.nation=Chinese;stu.printInfo();stu.printInfo();12.1 Java12.1 Java反射机制反射机制 Java 对象对象stustu的
16、创建过程就是通过类加载器完成的。具体的顺的创建过程就是通过类加载器完成的。具体的顺序是:序是:(1 1)在)在JavaJava解释、运行命令执行时,启动解释、运行命令执行时,启动JavaJava虚拟机(寻找虚拟机(寻找并执行并执行JavaJava安装目录下安装目录下JREJRE文件夹中的文件夹中的jvm.dlljvm.dll文件)。文件)。(2 2)生成引导程序加载器()生成引导程序加载器(BootStrap LoaderBootStrap Loader),它用来加),它用来加载载 Java Java 的核心库。的核心库。(3 3)引导程序加载器加载扩展加载器()引导程序加载器加载扩展加载器(
17、Extended LoaderExtended Loader),),并设定引导程序加载器为扩展加载器的父类。扩展加载器用来并设定引导程序加载器为扩展加载器的父类。扩展加载器用来加载加载 Java Java 的扩展库。的扩展库。(4 4)引导程序加载器加载系统加载器()引导程序加载器加载系统加载器(System LoaderSystem Loader),),并设定扩展加载器为系统加载器的父类。系统加载器用来加载并设定扩展加载器为系统加载器的父类。系统加载器用来加载自定义类。自定义类。13.2 13.2 套接字通信套接字通信 Java(5 5)系统加载器开始加载指定的类,其中,每个类加载器会先)系
18、统加载器开始加载指定的类,其中,每个类加载器会先将加载任务交给其父类,系统加载器搜索环境变量将加载任务交给其父类,系统加载器搜索环境变量classPathclassPath和和当前程序运行目录下的类(联想一下当前程序运行目录下的类(联想一下classPathclassPath环境变量值的设环境变量值的设置)。置)。(6 6)扩展加载器搜索)扩展加载器搜索JavaJava安装目录下安装目录下JREJRE文件夹中文件夹中libextclasseslibextclasses目录下的目录下的.class.class文件或文件或libextlibext目录下的目录下的.jar.jar文件。文件。(7 7
19、)引导程序加载器会搜索)引导程序加载器会搜索JavaJava安装目录下安装目录下JREJRE文件夹中文件夹中classesclasses目录下的目录下的.class.class文件,或文件,或liblib目录下的目录下的.jar.jar文件。此时,文件。此时,若没有找到要加载的类,就会抛出若没有找到要加载的类,就会抛出NoClassDefoundExceptionNoClassDefoundException异异常。常。12.1 Java12.1 Java反射机制反射机制 Java12.1.3 12.1.3 利用反射机制使用成员变量和方法利用反射机制使用成员变量和方法 使用使用ClassCla
20、ss类可以实现类可以实现JavaJava反射机制动态加载一反射机制动态加载一个类,同时,个类,同时,ClassClass类中还提供了一些方法,用以获类中还提供了一些方法,用以获取被加载类中定义的成员变量和方法。通过这些的方取被加载类中定义的成员变量和方法。通过这些的方法,不仅可以进一步获取被加载类中成员变量和方法法,不仅可以进一步获取被加载类中成员变量和方法的相关信息,甚至进行类中成员变量的使用和方法的的相关信息,甚至进行类中成员变量的使用和方法的调用。调用。12.1 Java12.1 Java反射机制反射机制 Java例例12-12-3 3 import java.util.Scanner;
21、import java.lang.reflect.*;class TestDemoint a;void test(String s,double b)System.out.println(a);System.out.println(b);System.out.println(s);class Example12_3public static void main(String args)12.1 Java12.1 Java反射机制反射机制 Java Scanner scan=new Scanner(System.in);String className=scan.next();try Class
22、 c=Class.forName(className);Object object=c.newInstance();Method method=c.getDeclaredMethod(test,new ClassString.class,Double.TYPE);method.invoke(object,new ObjectLiMing,20);Field field=c.getDeclaredField(a);field.setInt(object,88);method.invoke(object,new ObjectLisa,90);catch(Exception e)System.out
23、.println(e);12.1 Java12.1 Java反射机制反射机制 Java 在在JavaJava反射机制中,反射机制中,ClassClass类的应用就是反射的类的应用就是反射的核心。利用核心。利用ClassClass类可以完成类可以完成JavaJava反射机制的各项功反射机制的各项功能能定义任意一个类的对象、获取任意一个类所具定义任意一个类的对象、获取任意一个类所具有的成员变量和方法、使用任意一个类的成员变量、有的成员变量和方法、使用任意一个类的成员变量、调用任意一个对象的方法,即动态定义对象并对其进调用任意一个对象的方法,即动态定义对象并对其进行操作,体现了程序的灵活性。在实际应
24、用中使用行操作,体现了程序的灵活性。在实际应用中使用JavaJava反射与使用反射与使用ClassClass类两者是一致的。类两者是一致的。12.1 Java12.1 Java反射机制反射机制 Java12.2 Annotation 12.2 Annotation 12.2.1 Annotation12.2.1 Annotation12.2.1 Annotation12.2.1 Annotation简介简介简介简介 从从从从JDK1.5JDK1.5JDK1.5JDK1.5开始,开始,开始,开始,JavaJavaJavaJava引入了名为引入了名为引入了名为引入了名为AnnotaionAnnot
25、aionAnnotaionAnnotaion的特性,的特性,的特性,的特性,用以增强用以增强用以增强用以增强JavaJavaJavaJava程序的功能。程序的功能。程序的功能。程序的功能。AnnotationAnnotationAnnotationAnnotation中文释义为注解、中文释义为注解、中文释义为注解、中文释义为注解、注释。在应用时,可以置于包定义、类声明、成员变量定注释。在应用时,可以置于包定义、类声明、成员变量定注释。在应用时,可以置于包定义、类声明、成员变量定注释。在应用时,可以置于包定义、类声明、成员变量定义、方法声明、局部变量定义等内容之上,基本格式有四义、方法声明、局部
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 12 Java 高级 编程
限制150内