什么是class对象
类是程序的一部分,每个类都有一个class对象。换言之,每当编写并且编译了一个新类,就会产生一个class对象(更恰当的说,是被保存在一个同名的class文件中)。为了生成这个类的对象,运行这个程序的Java虚拟机(jvm)将使用被称为“类加载器”的子系统。
实际上在Java中每个类都有且只有一个Class对象。
获得class对象的三种方法:
1、调用Object类的getClass()方法来得到Class对象,这也是最常见的产生Class对象的方法。比如:
MyObject x;
Class c1 = x.getClass();
.Object.getClass(); Object中自带的方法,getclass(),返回一个class对象。
2、使用Class类的中静态forName()方法获得与字符串相应的Class对象。比如:
Class c2=Class.forName(“MyObject”),MyObject必须是接口或者类的名字。
class.forname()
Class c=Class.forName("类的全限定名")
传入string类型参数,要求jvm查找并加载指定的类,返回的是一个class对象的引用。
3、获取Class类型对象的第三个方法很easy。假设T是一个Java类型。那么T.class就代表了匹配的类对象。
Class cl1 = Manager.class;
Class cl2 = int.class;
Class cl3 = Double[].class;
注意:Class对象实际上描写叙述的仅仅是类型。而这类型未必是类或者接口。
比如上面的int.class是一个Class类型的对象。
因为历史原因。数组类型的getName方法会返回奇怪的名字。
class的作用和方法
getname():以string类型返回class对象表示的实体(类,接口,数组,基本类型,void等)名称
newInstance():创建一个实例,只能调用默认构造器。注意这个的返回值是一个object类型的对象
getsuperclass():返回class表示的实体超类的名称
getSimpleName()。不办含包名的类名。
isInterfence:告诉你这个class对象是否表示某个接口。
Class.forName()用法
主要功能
Class.forName(xxx.xx.xx)返回的是一个类。
Class.forName(xxx.xx.xx)的作用是要求JVM查找并加载指定的类,也就是说JVM会执行该类的静态代码段。
什么时候用Class.forName()?
先来个热身,给你一个字符串变量,它代表一个类的包名和类名,你怎么实例化它?你第一想到的肯定是new,但是注意一点:
A a = (A)Class.forName(“pacage.A”).newInstance();
这和你 A a = new A(); 是一样的效果。
现在言归正传。
动态加载和创建Class 对象,比如想根据用户输入的字符串来创建对象时需要用到:
String str = “用户输入的字符串” ;
Class t = Class.forName(str);
t.newInstance();
在初始化一个类,生成一个实例的时候,newInstance()方法和new关键字除了一个是方法,一个是关键字外,最主要有什么区别?
它们的区别在于创建对象的方式不一样,前者是使用类加载机制,后者是创建一个新类。