以下是我看李兴华老师写的java开发实战经典的笔记:
希望会对你有所帮助。
一个核心:一切的的操作都将使用Object 完成,类,数组的引用都可以使用Object进行接收。
什么是反射?简单的说,就是通过对象找到类。那么,我们如何找到类呢,Object类中定义的getClass() 方法可以通过对象来找到所对应的类,它的返回值的类型是一个Class类,实际上此类就是Java反射的源头。Class表示一个类的本身,通过Class可以完整的获得一个类的完整结构。因为在Class类中本身没有定义任何的构造方法,所以如果要使用则首先实例化对象,那么如何实例化对象呢?1,通过Class.forName(String name) 2,类.class 3,对象.getClass()。其中Class.forName(String name) 是我们常用的一种方式。
那么如果想要通过Class类本身实例化其他类的对象,则可以使用newInstance()方法,但是必须保证被实例化的类中存在在一个无参的构造方法(这点一定记住)。
核心代码如下:
c1 = Class.forName("com.runqian.class.Person");
Person p = null;
per = (Person)c1.newInstance();
但是假如一个类中没有无参的构造方法,那么我们应该如何解决上面的问题呢?
(1)在Class中定义的getConstructors()可以取得本类中的全部构造方法,返回的是Constructor对象的数组。
(2)向构造方法中传递一个对象数组进去,里面包含了构造方法中所需的各个参数
(3)之后通过Consturctor实例化对象。
核心代码如下:
c1 = Class.forName("com.runqian.class.Person");
Person per = null;
Consturctor[] con = c1.getConstructors();
per = (Person)con[0].newInstance("许海飞",24);//此时Person类只有一个Person(String name,int age)的构造方法。
第一个参数的类型为String,第二参数的类型为Integer(在使用时可以自动拆箱)。