} catch (Exception e) {
e.printStackTrace();
}
person.setName("itmyhome");
person.setAge(23);
System.out.println(person);
}
}
反射机制的深入----取得类的结构
在实际开发中,以上的程序就是反射应用最多的地方,当然,反射机制所提供的功能远不止如此,还可以通过反射得到一个类的完整结构,那么这就要使用到java.lang.reflect包中的以下几个类:
Constructor:表示类中的构造方法
Field:表示类中的属性
Method:表示类中的方法
这三个类都是AccessibleObject类中的子类
[java]
package com.itmyhome;
interface IPerson{
public static final String NAME = "itmyhome";
public String toSay();
public String toEat(String name,int age);
}
class Person implements IPerson{
private String name;
private int age;
public Person(){ //无参构造
}
public Person(String name,int age){
this.name = name;
this.age = age;
}
@Override
public String toSay() {
return "hello!";
}
@Override
public String toEat(String name, int age) {
return "name: "+name+",age: "+age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
package com.itmyhome;
interface IPerson{
public static final String NAME = "itmyhome";
public String toSay();
public String toEat(String name,int age);
}
class Person implements IPerson{
private String name;
private int age;
public Person(){ //无参构造
}
public Person(String name,int age){
this.name = name;
this.age = age;
}
@Override
public String toSay() {
return "hello!";
}
@Override
public String toEat(String name, int age) {
return "name: "+name+",age: "+age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
取得类所实现的全部接口
要想取得一个类所实现的全部接口,则必须使用Class类中的getInterfaces()方法,此方法定义如下:
[java]
public Class[] getInterfaces()
public Class[] getInterfaces()
此方法返回一个Class类的对象数组,之后就可以直接利用Class类中的getName()方法输出即可。
因为一个类可以同时实现多个接口,所以在此处就以一个数组的形式返回实现的全部接口。
[java]
public class T {
public static void main(String[] args) throws Exception{
Class< > cl = Class.forName("com.itmyhome.Person"); //实例化对象
Class< > c[] = cl.getInterfaces(); //以数组形式返回实现的全部接口
for (int i = 0; i < c.length; i++) {
System.out.println(c[i].getName()); //输出接口名称
}
}
}
public class T {
public static void main(String[] args) throws Exception{
Class< > cl = Class.forName("com.itmyhome.Person"); //实例化对象
Class< > c[] = cl.getInterfaces(); //以数组形式返回实现的全部接口
for (int i = 0; i < c.length; i++) {
System.out.println(c[i].getName()); //输出接口名称
}
}
}
取得类所继承的父类
一个类可以实现多个接口,但是只能继承一个父类,所以如果要想取得一个类的父类,可以直接使用Class类中的getSuperClass()方法。此方法定义如下:
[java]
public Class< super T> getSuperClass()
public Class< super T> getSuperClass()
此方法返回的是Class实例,和之前的得到接口一样,可以通过getName()方法取得名次。
一个类只继承一个父类,如果一个类中没有明确的指明继承哪个类,则肯定继承的是Object类。
[java]
public class T {
public static void main(String[] args) throws Exception{
Class< > cl = Class.forName("com.itmyhome.Person"); //实例化对象
Class< > c = cl.getSuperclass(); //取得继承父类
System.out.println(c.getName());
}
}
public class T {
public static void main(String[] args) throws Exception{
Class< > cl = Class.forName("com.itmyhome.Person"); /