您的位置:首页 > 编程语言 > Java开发

java反射详解

2016-06-30 14:38 543 查看
本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解。

下面开始正文。

【案例1】通过一个对象获得完整的包名和类名

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package
Reflect;


/**

*通过一个对象获得完整的包名和类名

**/

class
Demo{

//othercodes...

}


class
hello{

public
static
void

main(String[]args){

Demodemo=
new
Demo();

System.out.println(demo.getClass().getName());

}

}


【运行结果】:Reflect.Demo

添加一句:所有类的对象其实都是Class的实例。

【案例2】实例化Class类对象

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package
Reflect;

class
Demo{

//othercodes...

}


class
hello{

public
static
void

main(String[]args){

Class<?>demo1=
null
;

Class<?>demo2=
null
;

Class<?>demo3=
null
;

try
{

//一般尽量采用这种形式

demo1=Class.forName(
"Reflect.Demo"
);

}
catch
(Exceptione){

e.printStackTrace();

}

demo2=
new
Demo().getClass();

demo3=Demo.
class
;


System.out.println(
"类名称"
+demo1.getName());

System.out.println(
"类名称"
+demo2.getName());

System.out.println(
"类名称"
+demo3.getName());


}

}


【运行结果】:

类名称Reflect.Demo
类名称Reflect.Demo
类名称Reflect.Demo

我的理解是:所谓反射,就是根据一个已经实例化了的对象来还原类的完整信息

至少对我而言,我认为它带给我的好处是,让我从下往上的又了解了一遍面向对象

x_x在此又痛恨一边那些厚部头们,把我的脑细胞搞死一片

Class类

如果要完成反射,那么必须了解Class类

实例1:通过对象取得包名和类名

?
编译结果如下,注意包的编译方式即可

此处的getClass()方法是默认继承自Object类的



在java中,Object类是所有类的父类,同样,所有类的实例化对象也都是Class类的实例

因此,这样一来就会牵扯到向上转型和向下转型的概念
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: