-
有观点把void也归为基本数据类型
void.class
查看全部 -
double.class不等于Double.class
查看全部 -
功能性的类尽量用动态加载
查看全部 -
动态加载,用哪个加载哪个
查看全部 -
编译时刻加载类为静态加载类
运行时刻加载类为动态加载类
查看全部 -
可以通过一个类的类类型创建该类的对象实例。
前提是该类具有无参的构造方法
查看全部 -
获得类类型的3种方法
查看全部 -
一个类只可能是Class类的一个实例对象
class Cat{}
Cat.class == new Cat().getClass() 成立
查看全部 -
一个类的类类型 (class type)是一个对象,Class类的对象
查看全部 -
类是java.lang.Class类的实例对象
任何类都是Class类的实例对象
查看全部 -
java中静态成员和普通数据类型不是面向对象的
查看全部 -
Class类
面向对象编程,一切皆对象。
静态成员,基本数据类型不是面向对象的
写的每一个类都是java.lang.Class的实例对象
Class对象只有java的虚拟机可以创建其实例化对象,其构造器是私有的
任何一个类都是Class类的实例对象,这个实例对象有三种表示方式
举例:
Foo foo1=new Foo();
Foo是Class类的实例对象,称之为Foo类的类类型;可用以下三种表示法:
1. Class c1=Foo.class(任何一个类都有一个静态成员变量class)
2.已知一个类的对象
Class c2=foo1.getClass();
c1,c2表示了Foo类的类类型(class type)
一个类只有一个类类型,只是表达方式不同
3. Class c3=null;
try{
c3=Class.forName("Foo");
}catch(ClassNotFoundException e){
e.printStackTrace();
}
可以通过类的类类型创建该类的对象实例,通过c1orc2orc3创建Foo的对象
Foo foo=(Foo)c1.newInstance();需要无参数的构造方法
动态加载类
区分编译/运行
编译时加载类称静态加载类,运行时加载类是动态加载类
new创建对象 是静态加载类,在编译时刻就需要加载所有可能使用到的类
通过动态加载类解决静态加载存在的问题
class OfficeBetter
{
public static void main(String[] args)
{
try
{Class c=Class.forName(args[0]);//动态加载类,在运行时加载。
//通过类类型创建对象
OfficeAble oa=(OfficeAble)c.newInstance();
//interface OfficeAble
{
public void start();
}
oa.start();
}
catch(Exception e)
{
e.printStackTrace();
}
查看全部 -
一个类只可能是Class类的一个实例对象
查看全部 -
编译时刻加载类是静态加载类,运行时刻加载类是动态加载类 new 创建对象是静态加载类,在编译时刻就需要加载所有的可能使用到的类通过Class a=Class.forName(arg[0]);此时为动态加载,因为编译时不知道使用哪个类,因此编译没有加载任何类,通过编译。运行时,根据 Java OfficeBetter Word (Word为arg[0],也是类类型),去确定a是哪个类。这就是动态加载。如果word不存在,此时运行会报错。这就是为何有时候会出现编译通过,运行报错的原因。 动态加载一个好处,就是可以随时增加需要编译的类。例如没有excel类,只有word类,也可以运行,需要excel类时再由程序员写此类(为了能统一控制,word类、excel类需要继承同一个父类或者继承同一个接口)。
查看全部 -
万事万物皆为对象,类也是对象,任何一个类都是Class类的对象。 Class c1就声明了一个Class类的实例对象,但是不能通过new关键字来创建,而是有一下三种方法创建。 1、Class c1 = Foo.class;//任何一个类都有一个隐含的静态成员变量class,如果Foo已经存在,可以用这种方法来创建Foo的类类型(class type),即Foo类的类类型就是Class类的一个实例对象。 2、Class c2 = foo.getClass();//如果Foo类的对象foo已经存在,可以通过这种方法来创建Foo类的类类型。 并且,c1==c2是true的,因为任何一个类只有一个类类型。 3、Class c3 = null; c3 = Class.forName("com.imooc.reflect.Foo");//通过Foo的全称来创建 可知,c2==c3也是true的。 而且,可以用类类型来创建Foo的实例对象,如下 Foo foo1 = (Foo)c1.newInstance();//前提是Foo有无参的构造方法
查看全部
举报