迅闻网
让更多人看到你

java反射三种方法(java中反射的实际用法)

  java反射三种方法

1.经过new目标完成反射机制
2.经过途径完成反射机制
3.经过类名完成反射机制
例子:
建立一个学生类:
publicclassStudent{
privateintid;
Stringname;
protectedbooleansex;
publicfloatscore;
}
获取反射机制
publicclassGet{
//获取反射机制三种方法
publicstaticvoidmain(String[]args)throwsClassNotFoundException{
//方法一(经过建立目标)
Studentstu=newStudent();
Classclassobj1=stu.getClass();
System.out.println(classobj1.getName());
//方法二(地点经过途径-相对途径)
Classclassobj2=Class.forName(“fanshe.Student”);
System.out.println(classobj2.getName());
//方法三(经过类名)
Classclassobj3=Student.class;
System.out.println(classobj3.getName());
}
}

Java

java中反射的实际用法

反射的概念是由Smith在1982年首次提出的,首要是指程序可以拜访、检测和修正它本身状况或行为的一种才能。
JAVA反射机制是在运行状况中,关于恣意一个类,都可以知道这个类的一切特点和办法;关于恣意一个目标,都可以调用它的恣意一个办法;这种动态获取的信息以及动态调用目标的办法的功用称为Java语言的反射机制。
简略的来说,反射机制指的是程序在运行时可以获取自身的信息。在java中,只需给定类的名字,那么就可以经过反射机制来取得类的一切信息。包含其拜访润饰符、父类、实现的接口、特点和办法的一切信息,并可在运行时创立目标、修正特点(包含私有的)、调用办法(包含私有的)。
2反射机制
Java反射机制首要供给了以下功用
在运行时判别恣意一个目标所属的类
在运行时结构恣意一个类的目标
在运行时判别恣意一个类所具有的成员变量和办法
在运行时调用恣意一个目标的办法
3Class目标
class目标是Reflection故事来源。要想操纵类中的特点和办法,都必须从获取Class目标开始
类是程序的一部分,每个类都有一个Class目标。换言之,每逢编写而且编译了一个新类,就会发生与之对应的一个Class目标。
Class类没有公共结构办法。Class目标是在加载类时由Java虚拟机以及经过调用类加载器中的办法自动结构的,因而不能显式地声明一个Class目标。
4java.lang.reflect
java.lang.reflect包下:
Field类:代表类的成员变量(成员变量也称为类的特点)。
Method类:代表类的办法。
Constructor类:代表类的结构办法。
Array类:供给了动态创立数组,以及拜访数组的元素的静态办法。
代码展示
packagecom.oracle.test;publicclassEmployee{staticStringname;privatestaticintage;publicEmployee(){
System.out.println(“无参数结构办法”);
}publicEmployee(Stringname,intage){super();this.name=name;this.age=age;
}publicStringtoString(){return”hello,mynameis”+name+”,”+age+”yearsold”;
}privatevoidwork(Stringname,intage){this.name=name;this.age=age;
System.out.println(“working…”+name+”年纪为”+age);
}
}
使用反射技能,得到上面实体类的特点办法以及结构办法,并对该类中的办法进行调用
packagecom.oracle.test;importjava.lang.reflect.Constructor;importjava.lang.reflect.Field;importjava.lang.reflect.InvocationTargetException;importjava.lang.reflect.Method;importjava.util.Arrays;/***反射的测试
*@authorjacks.li
**/
publicclassTestReflact{publicstaticvoidmain(String[]args)throwsClassNotFoundException,NoSuchMethodException,SecurityException,IllegalAccessException,IllegalArgumentException,InvocationTargetException,InstantiationException{
Class>clazz=Class.forName(“com.oracle.test.Employee”);//获取结构办法
Constructor>conStr=clazz.getConstructor(String.class,int.class);//根据取得的结构办法取得实例
Employeeemployee=(Employee)conStr.newInstance(“jacks.li”,18);
System.out.println(conStr);//获取声明的特点
Field[]declaredFields=clazz.getDeclaredFields();for(Fieldfield:declaredFields){
System.out.println(“特点的称号”+field.getName()+”特点的润饰”+field.getModifiers()+”获取特点类型”
+field.getType());
}//取得声明的办法
/*Method[]declaredMethods=clazz.getDeclaredMethods();
for(Methodmethod:declaredMethods){
System.out.println(“取得办法称号”+method.getName());
System.out.println(“取得办法回来类型”+method.getReturnType());
System.out.println(“取得办法润饰”+method.getModifiers());//0代表默许权限、1代表public、2代表private(static,final也都是润饰)
System.out.println(“取得办法的参数”+Arrays.toString(method.getParameters()));
}*/
//办法的调用
MethodworkMethod=clazz.getDeclaredMethod(“work”,String.class,int.class);
workMethod.setAccessible(true);
workMethod.invoke(employee,”jacks.li”,19);
}
}

未经允许不得转载:迅闻网 » java反射三种方法(java中反射的实际用法)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!

 

迅闻网-让更多人看到你

登录/注册返回首页