黑马程序员技术交流社区
标题:
Java中Class对象详解
[打印本页]
作者:
刘丁
时间:
2012-2-14 17:44
标题:
Java中Class对象详解
本帖最后由 刘丁 于 2012-2-14 20:14 编辑
看到反射对Class这个类有点不解。。 求详解、
作者:
吴超
时间:
2012-2-14 17:47
获得Class对象的方法
u如果一个类的实例已经得到,你可以使用
【Class c = 对象名.getClass(); 】
例: TextField t = new TextField();
Class c = t.getClass();
Class s = c.getSuperclass();
u如果你在编译期知道类的名字,你可以使用如下的方法
Class c = java.awt.Button.class;
或者
Class c = Integer.TYPE;
u如果类名在编译期不知道, 但是在运行期可以获得, 你可以使用下面的方法
Class c = Class.forName(strg);
作者:
成果
时间:
2012-2-14 18:06
一、反射Class 基本分析
反射的基石: Class 字节码
//得到这个类的字节码的实例对象3种
类名.class 如,System.class;
对象.class 如p1.getClass();
Class.for("java.lang.String"); //返回字节码
有9个预定义的Class实例对象
8个基本类型对应的,加1个void
基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象
。 Class cls1 = void.class;
[java] view plaincopyprint?
package ZHANG.Reflect;
public class TestReflect {
public static void main(String[] args) throws Exception {
String str1 = "abc";
Class cls1 = str1.getClass();
Class cls2 = String.class;
Class cls3 = Class.forName("java.lang.String");
System.out.println(cls1 == cls2);
System.out.println(cls2 == cls3);
System.out.println(cls1.isPrimitive());//是否是一个基本类型的字节码 //flase
System.out.println(int.class.isPrimitive()); //true
System.out.println(int.class == Integer.class); //false
System.out.println(int.class == Integer.TYPE); //基本类型可以写成这样 true
System.out.println(int[].class.isPrimitive()); //false
System.out.println(int[].class.isArray()); //数组的Class实例对象 true
}
}
package ZHANG.Reflect;
public class TestReflect {
public static void main(String[] args) throws Exception {
String str1 = "abc";
Class cls1 = str1.getClass();
Class cls2 = String.class;
Class cls3 = Class.forName("java.lang.String");
System.out.println(cls1 == cls2);
System.out.println(cls2 == cls3);
System.out.println(cls1.isPrimitive());//是否是一个基本类型的字节码 //flase
System.out.println(int.class.isPrimitive()); //true
System.out.println(int.class == Integer.class); //false
System.out.println(int.class == Integer.TYPE); //基本类型可以写成这样 true
System.out.println(int[].class.isPrimitive()); //false
System.out.println(int[].class.isArray()); //数组的Class实例对象 true
}
}
作者:
侯丽星
时间:
2012-2-14 19:33
Java程序中的各个Java类属于同一类事物,描述这类事物的Java类名就是Class(即:字节码)。
Class类描述了类的名字、类的访问属性、类所属的包名,字段名称列表,方法名称列表等。
字节码:即类被编译后,产生的.class文件被加载到内存后的内容。
一个类被类加载器加载到内存中,占用一片存储空间,这个空间里面的内容就是类的字节码,不同的类的字节码是不同的,所以他们在内存中的内容也是不同的。这一个个的空间可分别用一个个的对象来表示,这些对象显然具有相同的类型,这个类型就是Class类。
得到每个Class对应的实例对象的方法有3种:
1. 类名.class,例如:Date.class
2. 对象.getClass(),例如:New Date().getClass()
3. Class.forName("类名"),例如:Class.forName("java.util.Date")
作者:
李杨
时间:
2012-2-14 22:56
本帖最后由 李杨 于 2012-2-14 22:57 编辑
就是说你加载class文件到内存中成为可用的字节码文件时,就得到了你家在的类的字节码,拿到字节码当然了里面的所有方法,还有字段都有可以使用.即便private也可以使用或者修改.不过需要注意的是.private修饰的你需要用声明方法或者用声明字段的相应的反射方法来获取.
即getDeclaredMethod和getDeclaredField,当然了要记得显示的拿到private.
即accessible需要设置可访问性.true和false。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2