在面向对象的世界中,万事万物皆对象。Java语言中,静态的成员,
类是对象,类是Java.lang.class的实例对象
三种表示方式
//1.实例在告诉我们任何一个类都有一个隐含的静态成员变量class
Class c1 = new Foo();
//2.已知该类的对象通过getClass方法
Class c2 = Foo.getClass();
//官方 c1,c2表示了Foo类的类类型(Class Type)
//万事万物皆对象,类也是对象,是Class的对象 这个对象我们称为类类型
// 个人理解类类型意思是 类的类型
//c1 or c2 都是Foo的类类型 但一个类只可能是Class类的一个实例对象
System.out.print(c1==c2)
//3.通过类名字实例化
Class c3 = Class.forName("com.xc.Foo");//填全称 会有异常
//通常可以通过类类型创建该类的实例对象
Foo f1 = (Foo)c1.newInstance //需要做强制类型转换 需要有无参构造方法 会有异常
通过Class.forName("类的全称")
编译时,加载的类是静态加载类。 Foo foo = new Foo(); 创建对象是静态加载类,编译时就要加载所有要用到的类,如果其中 1 个类有问题,就无法通过编译。解决该问题,可以使用动态加载类。
class office
{
pubic static void main(String[] args){
if("wrod".equals(args[0])){
Word word = new Word();
word.start();
}
if("Excel".equals(args[0])){
Excel excel = new Excel();
excel.start();
}
}
}
class word
{
public void start(){
System.out.print("word..start..");
}
}
运行时,加载的类是动态加载类 Class.forName("com.reflect.Foo"); 编译时不检查用到的类是否存在,运行时再检查。
class officeBetter
{
pubic static void main(String[] args){
try{
//动态加载
Class c = Class.forNname(args[0]);
office o = (office)c.newInstance();
}catch(Expction e){
e.printStackTrace();
}
}
}
interface office
{
void start();
}
class word implements office
{
public void start(){
System.out.print("word..start..");
}
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。