Java 反射机制学习(一)
2015-11-03 10:38
330 查看
定义:在运行过程状态中,对于任意一个类,都能够知道这个类所有属性和方法;任意的一个类,可以调用它的方法;
应用: Spring 框架 IOC(控制反转);Hibernate 关联映射;白盒测试
反射API:java.lang: Class<T>:表示一个正在运行的java应用程序的类和接口 ,是Reflection的起源
应用: Spring 框架 IOC(控制反转);Hibernate 关联映射;白盒测试
反射API:java.lang: Class<T>:表示一个正在运行的java应用程序的类和接口 ,是Reflection的起源
package TestPacageX; public class ReflectTest { public static void main(String[] args){ Class<?> c1=null; Class<?> c2=null; Class<?> c3=null; Class<?> c4=null; //方式一:使用对象的getClass() Person p=new Person("test",100); c1=p.getClass(); System.out.println(c1.getName()); //方式二: static method Class.forName() 最常使用 try{ c2=Class.forName("TestPacageX.Person"); }catch(Exception e){ e.printStackTrace(); } // 方式三:使用。class语法 c3=Person.class; //方式四:如果是机JAVA封装类,使用Type语法 c4 = Integer.TYPE; System.out.println(c2.getName()); System.out.println(c3.getName()); System.out.println(c4.getName()); } } class Person{ private String name; private int age; public Person(){ } public Person(String name, int age){ this.name=name; this.age=age; System.out.println(name); System.out.println(age); } public Person(String name){ this.name=name; System.out.println(name); } public Person(int age){ this.age=age; System.out.println(age); } }
<pre name="code" class="html">test 100 TestPacageX.Person TestPacageX.Person TestPacageX.Person int
package TestPacageX; import java.lang.reflect.Constructor; public class ReflectTest { public static void main(String[] args){ // 获得所有的公有的构造方法 try{ Class<?> c =Class.forName("TestPacageX.Person"); System.out.println("指定参数类型所有的公有的构造方法"); Constructor[] constructors1=c.getConstructors(); for(int i=0;i<constructors1.length;i++) System.out.println(constructors1[i].toGenericString()); //获得特定参数类型的公有构造方法 System.out.println("指定参数类型的公有的构造方法"); try{ Constructor constructors2=c.getConstructor(new Class[]{String.class,int.class}); System.out.println(constructors2.toGenericString()); }catch(Exception e){ e.printStackTrace(); } //获得特定参数类型的构造方法 System.out.println("指定参数类型的构造方法"); try{ Constructor constructors3=c.getDeclaredConstructor(new Class[]{String.class,int.class}); System.out.println(constructors3.toGenericString()); }catch(Exception e){ e.printStackTrace(); } // 获得所有的构造方法 System.out.println("获得所有的构造方法"); Constructor[] constructors4=c.getDeclaredConstructors(); for(int i=0;i<constructors4.length;i++) System.out.println(constructors4[i].toGenericString()); }catch(ClassNotFoundException e){ e.printStackTrace(); } } } class Person{ private String name; private int age; public Person(){ } public Person(String name, int age){ this.name=name; this.age=age; System.out.println(name); System.out.println(age); } private Person(String name){ this.name=name; System.out.println(name); } public Person(int age){ this.age=age; System.out.println(age); } }
指定参数类型所有的公有的构造方法 public TestPacageX.Person(int) public TestPacageX.Person(java.lang.String,int) public TestPacageX.Person() 指定参数类型的公有的构造方法 public TestPacageX.Person(java.lang.String,int) 指定参数类型的构造方法 public TestPacageX.Person(java.lang.String,int) 获得所有的构造方法 public TestPacageX.Person(int) private TestPacageX.Person(java.lang.String) public TestPacageX.Person(java.lang.String,int) public TestPacageX.Person()
相关文章推荐
- spring配置文件
- spring的事务配置
- Java忽略转义字符,原格式输出
- Spring-注解的方式配置AOP-案例
- spring事务管理
- 从”JAVA“而终 6:java数组
- java 项目 学习 资源
- java 实现消费者模型
- JAVA--String和int互相转化
- Leetcode:Subsets 求数组的所有子集
- spring防止不同版本jar包引入
- java+mysql+springmvc get请求乱码
- Spring之SpringMVC的Controller(源码)分析
- java并发编程中CountDownLatch和CyclicBarrier的使用
- 关于Eclipse Attach Source找不到源码的解决方法
- java的static块执行时机
- java CopyOnWriteArrayList的使用
- Java注解之Retention、Documented、Inherited介绍
- 继承VS组合
- java socket编程