反射reflect
Class实例Class实例取出属性、方法和父类反射调用方法
创建一个类Animal,创建一个实体类Person继承Animal
class Animal {
String dd
;
}
package day12
.reflect
;
public class Person extends Animal {
String name
;
String age
;
public Person() {
super();
}
public Person(String name
, String age
) {
super();
this.name
= name
;
this.age
= age
;
}
public String
getName() {
return name
;
}
public void setName(String name
) {
this.name
= name
;
}
public String
getAge() {
return age
;
}
public void setAge(String age
) {
this.age
= age
;
}
public void hello() {
System
.out
.println("你好");
}
public void hi(String name
) {
System
.out
.println(name
+",你好");
}
}
Class实例
package day12
.reflect
;
import java
.util
.ArrayList
;
public class Test {
public static void main(String
[] args
) {
Person p
= new Person();
Class
c3 = p
.getClass();
System
.out
.println(c3
);
Class
c4 = Person
.class;
System
.out
.println(c4
);
try {
Class
c = Class
.forName("day12.reflect.Person");
Class
c1 = Class
.forName("java.util.ArrayList");
Class
c2 = Class
.forName("java.lang.String");
System
.out
.println(c
);
System
.out
.println(c1
);
System
.out
.println(c2
);
} catch (ClassNotFoundException e
) {
e
.printStackTrace();
}
}
}
Class实例取出属性、方法和父类
package day12
.reflect
;
import java
.lang
.reflect
.Field
;
import java
.lang
.reflect
.Method
;
import java
.util
.ArrayList
;
import java
.util
.HashMap
;
import javax
.swing
.JFrame
;
public class Test2 {
public static void main(String
[] args
) {
Class
c = Person
.class;
Field sx
[] = c
.getDeclaredFields();
for (Field f
: sx
) {
System
.out
.println(f
);
}
Method sz
[] = c
.getDeclaredMethods();
Method sz2
[] = c
.getMethods();
for (Method m
: sz
) {
System
.out
.println("方法:"+m
);
}
Class
p=c
.getSuperclass();
System
.out
.println("父类:"+p
);
Class
c2=JFrame
.class;
while(true) {
c2
=c2
.getSuperclass();
System
.out
.println(c2
);
if(c2
==null
) {
break;
}
}
}
}
反射调用方法
package day12
.reflect
;
import java
.lang
.reflect
.Method
;
public class Test3 {
public static void main(String
[] args
) {
Person a
=new Person();
a
.hello();
a
.hi("Aimee");
Class
c=Person
.class;
try {
Object obj
=c
.newInstance();
Method m
=c
.getDeclaredMethod("hello");
m
.invoke(obj
);
Method m
=c
.getDeclaredMethod("hi", String
.class);
m
.invoke(obj
, "Aimee");
} catch (Exception e
) {
e
.printStackTrace();
}
}
}
转载请注明原文地址:https://blackberry.8miu.com/read-46718.html