Java Class对象 、类对象 、 有关反射的概念
2016-12-23 16:15
267 查看
一、Class对象概念:
java核心技术卷一中的描述:在程序运行期间,java运行时系统始终为所有的对象维护一个被称为运行时的类型标识,这个标识信息跟踪着每个对象所属的类,虚拟机利用运行时类型信息选择相应的方法执行,保存这些信息的类被称为Class类(Class student, student为一个Class类型的对象)。Class类封装一个对象和接口运行时的状态,当装载类时,Class类型的对象自动创建。
每个类都有一个Class对象,每当编译一个新类就产生一个Class对象。
Class引用总是指向某个Class对象。Class引用表示的就是它所指向的对象的确切类型,而该对象便是Class类的一个对象。
java中把生成Class对象和实例对象弄混了,更何况生成Class对象和生成 instance都有多种方式。所以只有弄清其中的原理,才可以深入理解。首先要生成Class对象,然后再生成Instance。那Class对象的生 成方式有哪些呢,以及其中是如何秘密生成的呢?
Class对象的生成方式如下:
1.Class.forName("类名字符串") (注意:类名字符串必须是全称,包名+类名)
2.类名.class
3.实例对象.getClass()
public class TestClass {
public static void main(String[] args)
{
Class testClass ; //testClass 为一个Class对象;(大写Class,不是小写class,class TestClass为声明一个类)
testClass = TestClass.class; //得到Class对象 -->即TestClass
System.out.println(testClass .newInstance()); //得到实例对象-->即TestClass@15a6029
TestClass tc = new TestClass(); //这个是Class对象TestClass 的实例化
System.out.println(tc); //得到实例对象-->即TestClass@13e58d4
System.out.println(new TestClass()); //得到实例对象-->即TestClass@13e58d4
System.out.println(tc.getClass()); //得到Class对象 -->即TestClass
System.out.println(TestClass.class); //得到Class对象 -->即TestClass
Class testClass2 = Class.forName("com.wqc.test.TestClass"); //得到Class对象 -->即TestClass
}
}
1)、Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的,因此不能显式地声明一个Class对象。
2)、虚拟机为每种类型管理一个独一无二的Class对象。也就是说,每个类(型)都有一个Class对象。运行程序时,Java虚拟机(JVM)首先检查是否所要加载的类对应的Class对象是否已经加载。如果没有加载,JVM就会根据类名查找.class文件,并将其Class对象载入。
3)、基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也都对应一个 Class 对象。
4)、每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。
5)、一般某个类的Class对象被载入内存,它就用来创建这个类的所有对象。
参考文档:http://blog.sina.com.cn/s/blog_76ecd078010178pe.html
http://www.cnblogs.com/jizhuan/p/5090298.html
java核心技术卷一中的描述:在程序运行期间,java运行时系统始终为所有的对象维护一个被称为运行时的类型标识,这个标识信息跟踪着每个对象所属的类,虚拟机利用运行时类型信息选择相应的方法执行,保存这些信息的类被称为Class类(Class student, student为一个Class类型的对象)。Class类封装一个对象和接口运行时的状态,当装载类时,Class类型的对象自动创建。
每个类都有一个Class对象,每当编译一个新类就产生一个Class对象。
Class引用总是指向某个Class对象。Class引用表示的就是它所指向的对象的确切类型,而该对象便是Class类的一个对象。
java中把生成Class对象和实例对象弄混了,更何况生成Class对象和生成 instance都有多种方式。所以只有弄清其中的原理,才可以深入理解。首先要生成Class对象,然后再生成Instance。那Class对象的生 成方式有哪些呢,以及其中是如何秘密生成的呢?
Class对象的生成方式如下:
1.Class.forName("类名字符串") (注意:类名字符串必须是全称,包名+类名)
2.类名.class
3.实例对象.getClass()
public class TestClass {
public static void main(String[] args)
{
Class testClass ; //testClass 为一个Class对象;(大写Class,不是小写class,class TestClass为声明一个类)
testClass = TestClass.class; //得到Class对象 -->即TestClass
System.out.println(testClass .newInstance()); //得到实例对象-->即TestClass@15a6029
TestClass tc = new TestClass(); //这个是Class对象TestClass 的实例化
System.out.println(tc); //得到实例对象-->即TestClass@13e58d4
System.out.println(new TestClass()); //得到实例对象-->即TestClass@13e58d4
System.out.println(tc.getClass()); //得到Class对象 -->即TestClass
System.out.println(TestClass.class); //得到Class对象 -->即TestClass
Class testClass2 = Class.forName("com.wqc.test.TestClass"); //得到Class对象 -->即TestClass
}
}
1)、Class 没有公共构造方法。Class 对象是在加载类时由 Java 虚拟机以及通过调用类加载器中的 defineClass 方法自动构造的,因此不能显式地声明一个Class对象。
2)、虚拟机为每种类型管理一个独一无二的Class对象。也就是说,每个类(型)都有一个Class对象。运行程序时,Java虚拟机(JVM)首先检查是否所要加载的类对应的Class对象是否已经加载。如果没有加载,JVM就会根据类名查找.class文件,并将其Class对象载入。
3)、基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也都对应一个 Class 对象。
4)、每个数组属于被映射为 Class 对象的一个类,所有具有相同元素类型和维数的数组都共享该 Class 对象。
5)、一般某个类的Class对象被载入内存,它就用来创建这个类的所有对象。
参考文档:http://blog.sina.com.cn/s/blog_76ecd078010178pe.html
http://www.cnblogs.com/jizhuan/p/5090298.html
相关文章推荐
- 利用Java的反射机制解析一个Class对象的详细内容(工具方法留用)
- Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别
- java反射之获取Class对象
- Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别
- Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别
- 【译】2. Java反射——Class对象
- Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别
- 反射机制_介绍_Class对象获取_动态操作_构造器_方法_属性JAVA211-212
- Java反射基础(一)--Class对象获取
- java 反射之获取class对象的三种方式
- java反射(1) 之class.forName(""), 类名.class, 对象.getClass()区别
- Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别
- [Java 15 反射机制 ] Class.forName 得到 Class 对象
- 反射概念:获取class文件对象的三种方式
- java反射之——获取Class对象的方法
- Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别
- 【java高级特性之反射】创建Class对象的三种方法
- Java中反射机制和Class.forName、实例对象.class(属性)、实例对象getClass()的区别
- Java 反射 Class对象
- JAVA反射(一)获取Class对象的三种方式及其区别