开发工具:
文件大小: 784kb
下载次数: 0
上传时间: 2019-07-02
详细说明:简单的来说,反射机制指的是程序在运行时能够获取自身的信息。在java中,只要给定类的名字,那么就可以通过反射机制来获得类的所有信息。类名称 Reflect Demo
类名称Ref| ect demo
案例3】通过Cass实例化其他类的对象
通过无参构造实例化对象
ackee
Reflect
class
Persont
string
getName()I
10
11
12
public
14
void
setName(str
16
ng name)i
17
this
name
name;
20
public
22
int getAge(
24
retu
En agei
void
etAge(int
30
ac)(
this
32
ace
age
33
34
e○ verrid
public
37
string
38
oString()
retu
40
["+this namc
42
s age
private
47
String name
pRivate
int age;
class hello t
public
static void
main(string
I args)i
demo=null;
demo-Class f
crName("Refl
ect.Person")
t cat
ch
(Exception
e.printstack
Trace()
Pers
or per=null
七
per
(Person)demc
reistance
();
catch
(Instantiate
exCeption
//ToD○
Auto
gererated
catch block
e.printstack
Trace(i
catch
(IllegalAccc
EXCeption
// TODO
Auto-
gererated
dLcI K⊥oK
e.printstack
Trace()
setName("Rol
1en");
per.
staGe(20)i
Syst
emout. print
lr(per)i
【运行结果】
[Rollen 20]
但是注意下,当我们把 Person中的默认的无参构造函数取消的吋候,比如自己定义只定义个有参数的
构造函数之后,会出现错误:
比如我定义了一个构造函数
public
Person(Strin
g name,int
age)(
this
agc=agci
this
name name i
然后继续运行上面的程序,会出现:
ava.langInstantiationEXception: Reflect Person
at java. lang Class. newInstanceo(class.java: 340)
at java. lang Class newInstance(class.java: 308)
at Reflect. hello. main(hello.java: 39)
Exception in thread main"java. lang. Null PointerException
at Reflect. hello. main (hello.java: 4Z)
所以大家以后再编写使用 Class实例化其他类的对象的时候,一定要自己定义无参的构造函数
【案例】通过C|a5s调用其他类中的构造函数(也可以通过这种方式通过C|ass创建其他类的对象)
package
Reflect
234567891
主 mport
va langre
flect, Constr
actor
class
Person f
public
Person()i
111
public
Person(Strin
g rame)i
this
fame -name i
public
Person(int
age)
25
this
age=agc
27
public
Person(strin
30
g name, int
31
acc
32
this
age=agei
this
Camenae i
36
37
public
stri
getName()(
Le七u
n name
43
public
int getAge(
re七1
rn agei
48
d overrid
50
public
52
String
tostring()
54
etU
55
Tn II
56
+this name
n+this age+
61
private
String name
ivate
int age
class hello
p
ub⊥1c
static void
main(String l
Clas
dcmo=null;
try
demo=Class f
orName("Refl
cct Person")
tcat
ch
(Except
e.printstack
Trace (i
Pcrs
Cn
perl=null;
Pers
CI
per2-=null;
Pers
cn
per3=null
Pers
per4-n
11
//取
得全部的构造
函数
Cons
tructor>
gctConstruct
ors(i
try i
r1
Dayc⌒n)Ane
CI+OI1/1Iu
[C. newInsta
nce();
perz
(Person)cons
[1].new Insta
nce("Rollen
);
per3-
(Person)cons
[2]. nevInsta
nce(20)
per4=
(Person)cons
[3. newInsta
nce("Rollen
20);
tcat
ch(Exception
e){
c.printstack
Trace()
Syst
emout.print
ir (pcrl)i
Syst
emout.print
In(per2)
Syst
cm. out. print
lr(per3
Syst
emout.print
lr(per4)i
运行结果】
[null 0]
[Rollen 0]
[null 20]
[Rollen 20]
〔案例】
返回一个类实现的接口:
package
Reflecti
234567
interface
Chinaf
public
static final
String
name=
en
0123
public
static int
public
void
sachima()i
890
void
sayHello(str
Io name
int age)i
22
class person
主 implements
26
Chinaf
public
Pcrson()I
2233
890
pu⊥c
32
Person(strin
g sex)f
34
this
35
sex-seXi
6
37
public
string
39
getSex()i
40
retU
rn sex
public
void
45
setSex(Strin
g sex)t
47
this
48
S∈x=Sex;
doverrid
public
void
sacHima()(
Syst
emout.print
ln("hello
china)i
doverrid
public
oid
sayHcllo(str
lIc name
nt age)i
vst
emout. print
lr(name
+age)
private
String sexi
class hello(
blic
static void
main (String
j args)i
Clas
demo=null
try
dcmo = class, f
cnAme("Refl
ect.Person")
tcat
ch
(Exception
){
e.printstack
Trace()i
//保
存所有的接口
las
ntes [=dem
actintcrfac
s();
f
(int
intes length
i++){
System.out.p
tintin("实现
的接囗
n+intes [],g
etName()
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.