Java之反射机制【入门版(1)】

来源:互联网 发布:三网通彩信软件 编辑:程序博客网 时间:2024/05/21 10:38

java 反射
java.lang.Class
面向对象的原理一般认为万物万事皆对象
a.类名.class
b.如果对象存在可以直接对象.getClass
c.Class.forName("类的全称");



例子:


public class CoreDemo1 {
public static void main(String[] args) {
A a1 = new A();
/*
* 表示A类的类类型---》A类本身也是一个对象
* 分析一下:(老师个人理解的)也可以认为是字节码
* */
Class c1 = A.class;//任何一个类都有一个静态成员变量Class
Class c2 = a1.getClass();
//c1,c2都代表一个对象,这个对象代表一个类
//一个雷就是class类的一个对象
//我们把这个对象称为类的类类型,也称为类的字节码
//不管是c1,c2 都代表A类的类类型
System.out.println(c1 == c2);
Class c3 = null;
try {
c3= Class.forName("corelesson.A");
/*
* 通过类类型直接获取类对象
* 通过c1,c2,c3 直接获取A类的对象
* */
//会调用无参数的构造方法来产生对象
A aa = (A)c1.newInstance();
aa.test();
test1("hello");
test1(new A());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


System.out.println(c2 == c3);
System.out.println("---------------------------");
Class cc1 = String.class;
Class cc2 = "hello".getClass();
try {
Class cc3 = Class.forName("java.lang.String");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void test1(Object obj){
Class c = obj.getClass();
System.out.println(c.getName());
System.out.println(obj.getClass().getName());
}
}
class A{
public void test(){


}
}

0 0