浅谈java.lang.Class与反射

    学习java语言经常会说一切皆对象(基本数据类型除外)

    那么我们写的类是对象吗?如果是对象,它是谁的对象?我们知道类是对对象的抽象,对象是类的实例(具象)。那么有没有一个类是所有其它类的高度抽象呢?答案是有,它就是java.lang.Class类(extends Object类)

初步了解一下java.lang.Class类:

其构造方法声明为private,因此只能由java虚拟机调用并构建实例化对象,无法如普通类一样使用new关键字创建对象。

但是仍然有三种方式得到Class对象

每当编写并编译了一个新类,就会产生一个Class对象,保存在同名的.class文件中

如何才能获取一个新编写类的Class对象

假设编写了一个普通的音乐类Music

public class Music{

public Music(){ }

Music mc=new M usic();//实例化一个对象

}

则可以通过以下几种方式:

(1)、直接调用Class类的静态成员class(每一个类都有该static成员)(同样适用于接口、数组及基本数据类型)

Class c1=Music.class;

(2)、通过Music类的对象调用Class类的动态方法getClass()

Class c2=mc.getClass();

(3)、通过调用Class类的静态方法forName()

Class c3=Class.forName("Music");//需要类的全名,包括包名

一般将C1,c2,c3称为某个普通类的类类型

反射:

new 关键字对象实例化,属于静态加载,在编译时就进行类型检查,如果找不到相关类就无法通过编译。

另有一种实例化对象的方法属于动态加载,在运行时进行类型检查。该方法就是通过某个类的类类型(Class对象)实例化该类的对象:

Music mc1=(Music)c1.newInstance();

先总结到这,理解的还不透彻;今后深入理解了,再改进吧。这是一个初步的不成熟的理解。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值