-
动态加载类,在运行时刻加载
Class c = Class.forName(args[0]);
通过类类型,创建该类对象
OfficeAble oa = (officeAble)c.newInstance(); //officeAble为一个接口,里面有start方法
oa.start;
查看全部 -
Class.forName("类的全称")
不仅表示了类的类类型,还代表了动态加载类。
编译时加载类是静态加载类,运行时加载类是动态加载类。
查看全部 -
我们完全可以通过类的类类型创建该类的对象实例,即通过c1 or c2 or c3 创建Foo的实例
Foo foo = (Foo)c1.newInstance();
查看全部 -
Foo foo1 = new Foo();
任何一个类都是Class的实例对象,这个实例对象有三种表示方式
第一种表示方式:实际在告诉我们任何一个类都有一个隐含的静态成员变量class
class c1 = Foo.class; //在知道类名时使用
第二种表示方式:已经知道该类的对象通过getClass方式
Class c2 = foo1.getClass; //在知道对象时使用
在官网c1、c2表示了Foo类的类类型(class type)
万事万物皆对象,类也是对象,是Class类的实例对象,
这个对象我们成为该类的类类型。
第三种表达方式:
Class c3 = null;
try{
c3 = Class.forName("com.imooc.reflect.Foo");
}catch(ClassNotFoundException e){
e.printfStackTrace();
}
注意:c1=c2=c3 一个类只可能是Class类的一个实例对象.
查看全部 -
Class aClass = Class.forName("完整的类名");
//调用类类型进行实例化时,类中必须有无参的构造函数
aClass.newInstace();
查看全部 -
静态类似一次性?
动态则可回收?
(暂时还不知道该如何理解,等以后理解更深了再回头看看这个问题,如果有大佬看到这个笔记也可以私聊告诉我一声,麻烦了。
查看全部 -
任何一个类都是Class的实例对象,有三种方法表示这个实例对象
class属性(隐含的静态成员变量class),如Class c1 = Foo.class
getClass()方法,如Class c2 = foo1.getClass()
Class.forName()方法,会抛出异常
查看全部 -
编译时刻加载类是静态加载类.
运行时刻加载类是动态加载类.
查看全部 -
类 也是一个对象.
这个对象我们把它称之为"类类型"
查看全部 -
每个对象所属的类就是java.lang.Class的实例
查看全部 -
泛型,编译阶段有效
查看全部 -
返回值类型的类类型
返回值类型
查看全部 -
我们创建的每一个类(如a),都是Class的实例变量,通过new方式创建类对象
a的实例变量,套了两层
查看全部 -
new 创建对象是静态加载类:
编译时需将其中所有的类加载进来,如共有100个类,其中出现1个类有问题,其他99个类均不能正常加载。例如:
/*如需求去掉Excel类功能,但保留Word功能,代码中Word在前,则此时Word功能也无法执行*/
if("Word".equals(arg[0])){
Word w = new Word();
}
if("Excel".equals(args.[0])){
Excel e = new Excel();
}
2.动态加载:用哪个就加载哪个,不用不加载
Class OfficeBetter{
publice void static main(String[] args){
//动态加载类,在运行时刻加载
Class c = Class.forName(args[0]);
//通过返回类类型,创建该类对象
类名 待建类名 = (类名) c.newInstance();
待建类名.start();
}
}
【注意】
//下面一行可用Interface编写标准,防不同类做强制转换时报错
*********类名 待建类名 = (类名) c.newInstance();*************
//例如:
OfficeAble oa = (OfficeAble) c.newInstance();
//新建一个接口文件:
interface OfficeAble{
public void start();
}
//让接口在待强制转换类型的类中生效
class Word implements OfficeAble{
public static void start(){
System.out.println("This is Word");
}
}
//不被转换类型的类不生效OfficeAble接口
class Excel{
publice static start(){
System.Out.println("This is Excel");
}
}
//则 OfficeAble oa = (OfficeAble) c.newInstance(); 就会自动创建Word类的对象,而不创建Excel类的对象
查看全部 -
1.创建一个类:
知道类名:直接.class
Class Name1 = Name.class
知道类的对象:使用getClass()方法
Name name = new Name();
Class name1 = name.getClass();
全称创建类:
Class name = null;
name = Class.forName("com.packagename.classname.classname_toCreate");
类的对象创建:N类类型的对象创建N类的对象
//需要有无参的构造方法
Name name = new Name();
Name na =(Name) name.newInstance();
查看全部
举报