java .class与getclass_java 类名.class、object.getClass()和Class.forName()的区别 精析

1.介绍

getClass()介绍

java是面向对象语言,即万物皆对象,所有的对象都直接或间接继承自Object类;

Object类中有getClass()方法,通过这个方法就可以获得一个实例对象在内存中的实际类型。

类名.class介绍

通过对类名的引用取得在内存中该类型的实际类型。

Class.forName("包名xx.类名xx")介绍

通过"包名+类名"的方式同样可以取得在内存中该类型的实际类型。

2.区别

第一,类的加载方式不同

Class.forName()属于动态加载类,在代码运行时加载指定类;

Class.class属于静态加载类,在代码编译时加载指定类;

object.getClass()取决于对象的产生方式:

既可以是静态加载类(通过new创建的对象),也可以是动态加载类(通过Class.forName(xx.xx)创建的对象,对象可能不存在)。

Class.forName("bbb").newInstance().getClass();

第二,Class对象的创建方式不同

Class.forName()

运行阶段:JVM使用类装载器, 将类装入内存中,并对类进行初始化(静态代码块、非静态代码块、构造函数调用及静态变量);

最后返回Class的对象。

类名.class

编译阶段:JVM使用类装载器, 将类装入内存中,并对类进行初始化操作;

最后返回Class的对象。

实例对象.getClass()

当调用getClass()方法时,该对象的类已经被加载到内存中并且完成了初始化操作;

直接返回Class的对象,没有其它操作。

第三,对象与类的关系不同

通过类创建对象:

Class.forName(xxx.xx.xx)和Class.class返回的是一个类,调用newInstance()后才创建一个对象;

// 获取类

Class c = String.class;

// 通过类创建对象

String s = c.newInstance();

通过对象获取类:

object.getClass();

// 获取类

Class c = String.class;

// 通过类创建对象

String s = c.newInstance();

// 通过对象获取类

Class extends String> c2 = s.getClass();

3.测试

公用代码

/**

* class类加载

* @explain

* @author Marydon

* @creationTime 2018年10月19日上午9:26:29

* @version 1.0

* @since

* @email marydon20170307@163.com

*/

public class ClassLoader2 {

/**

* 构造函数

* @explain 在类每次被实例化时执行

*/

public ClassLoader2() {

System.out.println("--------调用构造函数--------");

}

/**

* 静态的参数初始化

* @explain 在类初次被加载到内存中时执行

*/

static {

System.out.println("--------执行静态代码块--------");

}

/**

* 非静态的参数初始化

* @explain 在类每次被实例化时执行

*/

{

System.out.println("--------执行非静态代码块--------");

}

}   注意:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值