Class类与java反射
来源:互联网 发布:安卓编写软件 编辑:程序博客网 时间:2024/04/28 08:06
Class类与java反射
概念
JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。
特点
优点:能够使我们的代码更加灵活,更加容易实现面向对象
缺点:会降低程序的性能,而且复杂度更高。(反射是需要解析字 节码,将内存中的对象进行解析)
publicstaticvoid main(String[] args) throws ClassNotFoundException{ //Object.getClass();只对引用类型有用 Class<?extends Date> d=new Date().getClass();//获得Class对象/*Object dd=new Date(); Class<?extends Object> d=dd.getClass();*/ System.out.println(d.getName()); //输出对象名称 //.class如果类型可用但是没有对象则可以在类型后面加上“.class”来获得(这也是原始类型获得对象最简单的方式) Class<Boolean>b=boolean.class; System.out.println(b.getName()); //Class.forName();如果知道类的全名,则可以用静态方法Class.forName()来获得Class对象。它不能用在原始类型上,但是可以用在原始类型数组上。可能抛出ClassNotFoundException异常 Class<?>s=Class.forName("java.lang.String");//获得Class对象 System.out.println(s.getName()); //包装类的TYPE域:每个原始类型和void都有包装类。利用TYPE域就可以获得Class对象 Class<Double>dd=Double.TYPE; System.out.println(dd.getName()); }输出:java.util.Datebooleanjava.lang.Stringdouble
获得Class对象(四种方法,见代码及注释)
获得Class类对象后,就可以使用该类中提供的方法获取关于类的各种信息,例如构造方法、成员变量、成员方法、内部类等
获得修饰符
通过java.lang.reflect.Modifiter类可以解析出getModifiters()方法的返回值所表示的修饰符信息
静态方法
说明
itPublic(Int mod)
查看是否被public修饰,如果是则返回true,否则返回false
itProtected(int mod)
isPrivate(int mod)
isStatic(int mod)
isFinal(int mod)
是指定的修饰符修饰则返回true,否则返回false
toString(int mod)
以字符串的方式返回所有的修饰符
访问构造方法,方法,成员变量(公共指的是public修饰的…)
案例:声明一个Employee类,然后利用java的反射机制访问Employee类的constructor、method、field
publicclass Employee { publicStringname; privateintage; privatecharsex; public Employee(){ }; privateEmployee(Stringname,int age){ this.name=name; this.age=age; } publicvoid method1(){ System.out.println("公共成员方法一"); } publicvoid method2(){ System.out.println("公共成员方法二"); } privateintmethod3(int i){ System.out.println("私有方法三"); return i; }} publicclass Tests { publicstaticvoid main(String[]args)throws NoSuchMethodException, SecurityException,NoSuchFieldException{ Class<Employee>e=Employee.class; //访问构造方法 Constructor<Employee>c=e.getDeclaredConstructor(String.class,int.class);//返回类中指定构造方法中的一个 System.out.println(Modifier.toString(c.getModifiers())); Constructor<Employee>c1=e.getConstructor((Class<Employee>[])null);//返回类中公共构造方法中的一个(这里返回的是为空的构造方法) System.out.println(Modifier.toString(c1.getModifiers())+"\n"); //访问成员变量 Fieldf1=e.getDeclaredField("age");//返回类中指定成员变量的一个Field对象 System.out.println(Modifier.toString(f1.getModifiers())); Fieldf=e.getField("name");//返回类中指定公共成员变量的一个Field对象 System.out.println(Modifier.toString(f.getModifiers())+"\n"); //访问成员方法 Method[]m=e.getDeclaredMethods();//返回类中所有成员方法的一组Method对象 for(Method m1:m){ System.out.print(m1.getName()+" "); } Methodm2=e.getMethod("method1");//根据公共方法名称获得Method对象 System.out.println("\n"+m2.getName()); Methodm3=e.getDeclaredMethod("method3",int.class);//根据成员方法名称和参数找方法 System.out.println(m3.getName()); }}
阅读全文
0 0
- Class类与JAVA反射
- Class类与java反射
- JAVA之Class类与反射总结
- Java Class类与反射机制
- Java_14 Class类与Java反射
- 反射1——Class类与Java反射
- 反射与Class类
- Class类与反射
- Class与java反射机制
- Java 反射类--Class
- java反射:class类
- JAVA反射机制原理中的字节码与类Class
- java学习脚印:Class类与反射机制
- Java中Class类与反射机制的用法总结
- Java中Class类与反射机制的用法总结
- java 反射机制与Class类 学习个人总结
- Class类,反射与注解
- JAVA反射和CLASS类
- HDU 2059 龟兔赛跑(DP)
- Java设计模式_(行为型)_模版方法模式
- 将tensorflow训练好的模型部署成sercice服务,并做预测
- Linux(centos6.5)安装oracle10G_64位
- 《android日常bug系列》java.lang.SecurityException: Permission Denial:
- Class类与java反射
- Poj 1190 生日蛋糕
- 记录 android 单列模式的使用
- Bitmap 的高效加载
- 解决Failed to load D:\Android-Studio\sdk\build-tools\26.0.1\lib\dx.jar
- To Do List
- Andoird判断某个APK是否已经安装
- js中计算中文长度方法
- 用shape画一个元