所有的类都是在对其第一次使用时,动态加载到JVM中。当程序创建第一个对类的静态成员的引用时,就会加载这个类。这个证明构造器也是类的静态方法,即使在构造器之前并没有使用static关键字。因此,使用new操作符创建类的新对象也会被当作对类的静态成员的引用。简而言之,就是当对一个类的静态成员持有引用时,这个类就会被加载到JVM。
注:使用newInstance()来创建的类,必须带有默认的构造器(无参构造方法)。
为了在使用泛化的Class引用时放松限制,加入了通配符,它是java泛型中的一部分。通配符就是”?“,表示”任何事物“。
Class<?> intClass = int.class;intClass = double.class;//普通的类引用可以被重新赋值为指向任何其他的Class对象为了创建一个Class引用,它被限定为某种类型,或该类型的任何子类型,你需要将通配符与extends关键字相结合,创建一个范围。
Class<? extends Number> bounded = int.class;bounded = double.class;bounded = Number.class;当你将泛型语法用于Class对象时,newInstance()将返回该对象的确切类型。
Class<SmallDemo> smallDemoClass = SmallDemo.class;SmallDemo smallDemo = smallDemoClass.newInstance();Class<? super SmallDemo> demo = smallDemoClass.getSuperClass();Object obj = demo.newInstance();进行向下转型前,如果没有其他信息可以告诉你这个对象是什么类型,那么使用instanceof是非常重要的,否则会得到一个ClassCastException异常。
if(x instanceof Dog) ((Dog)x).bark();新闻热点
疑难解答