关闭

java反射机制总结(一)

标签: javaclassstringobjectconstructorinteger
180人阅读 评论(0) 收藏 举报
分类:

以下是我看李兴华老师写的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(在使用时可以自动拆箱)。

 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:6993次
    • 积分:92
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:2篇
    • 译文:0篇
    • 评论:1条
    文章分类
    文章存档
    最新评论