您的位置:首页 > 编程语言 > Java开发

java反射机制学习(一)--Class类

2014-11-25 21:51 183 查看
java是面向对象的语言,在java的世界里,万物都是对象,类也不意外。类也是对象,java中的所有类都是java.lang.Class类的实例对象

而要表示这个实例对象,即类的类类型,有三种方法:

1.用某个类的class属性(说明每个类都是有一个隐含的属性class的),假设有一个类Foo

例如:Class c1=Foo.class    这样就可以得到Foo的类类型,也就是Foo相对于Class的一个实例对象

2.利用某个对象的getClass()方法,如果知道foo是Foo的一个对象的话,那么
Foo foo=new Foo();
Class c2=foo.getClass();

3.用Class.forName(“具体类名”),这是一种动态加载类的方法。

先解释一下何为动态加载类:

首先我们平时创建一个对象的时候,都是用new来创建的,这是一种静态加载类的方法

静态加载类是指编译时刻就把需要用到的类全部加载了,如果某一个对象加载不成功的话,编译将不能通过

动态加载类是指运行时刻加载类,即使某个对象为空的,在编译的时候也不会报错。

最后附上三种方法的代码:

package com.quan.inflect;

public class Test1 {
/*在面向对象里面,万物皆对象
* 所有的类都是对象,是Java.lang.Class的实例对象
* 要表示Class的对象(即某个类的类类型(class Type)),有三种方法
* */
public static void main(String[] args){
//第一种表示方法 -->说明每个类都有一个隐含的静态成员class
Class c1=Foo.class;
System.out.println(c1);
//第二种表示方法,如果知道foo是Foo的一个对象
Foo foo=new Foo();
Class c2=foo.getClass();
//不管该类有多少个对象,一个类只能是Class类的一个实例对象
System.out.println(c1 == c2);
//第三种表示方法,动态加载类
Class c3=null;
try {
c3=Class.forName("com.quan.inflect.Foo");
//可以通过类类型创建该类的对象
try {
Foo foo1=(Foo)c3.newInstance();
foo1.start();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class Foo{
void start(){
System.out.println("start()运行");
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: