您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
【第15章:Java反射机制】_反射应用——取得类的结构
发布时间:2021-01-06 18:18:32编辑:雪饮阅读()
获取一个对象实例所实现的所有接口
package org.kasumi;
import java.lang.reflect.Constructor ;
interface China{
public static final String NATIONAL = "中国";
public static final String AUTHOR = "snowDrink";
public void sayChina();
public String sayHello(String name,int age);
}
interface Japan{
public static final String NATIONAL = "日本";
public static final String AUTHOR = "kasumi";
public void sayJapan();
}
class Person implements China,Japan{
private String name ;
private int age ;
public Person(){}
public Person(String name){this.name = name;}
public Person(String name,int age){this(name);this.age = age;}
public void sayChina(){
System.out.println("作者:" + China.AUTHOR + ",国籍:" + China.NATIONAL) ;
}
public String sayHello(String name,int age){
return name + ",你好!我今年:" + age + "岁了!" ;
}
public void sayJapan(){
System.out.println("作者:" + Japan.AUTHOR + ",国籍:" + Japan.NATIONAL) ;
}
public void setName(String name){this.name = name;}
public void setAge(int age){this.age = age ;}
public String getName(){return this.name;}
public int getAge(){return this.age;}
};
public class Hello{
public static void main(String args[]){
try{
Class<?> c1 = Class.forName("org.kasumi.Person");
Class<?> c[] = c1.getInterfaces();
for(int i=0;i<c.length;i++){
System.out.println("实现的接口名称:" + c[i].getName());
}
}catch(ClassNotFoundException e){
e.printStackTrace() ;
}
}
};
获取一个对象所属类的所有构造方法
package org.kasumi;
import java.lang.reflect.Constructor ;
interface China{
public static final String NATIONAL = "中国";
public static final String AUTHOR = "snowDrink";
public void sayChina();
public String sayHello(String name,int age);
}
interface Japan{
public static final String NATIONAL = "日本";
public static final String AUTHOR = "kasumi";
public void sayJapan();
}
class Person implements China,Japan{
private String name ;
private int age ;
public Person(){}
public Person(String name){this.name = name;}
public Person(String name,int age){this(name);this.age = age;}
public void sayChina(){
System.out.println("作者:" + China.AUTHOR + ",国籍:" + China.NATIONAL) ;
}
public String sayHello(String name,int age){
return name + ",你好!我今年:" + age + "岁了!" ;
}
public void sayJapan(){
System.out.println("作者:" + Japan.AUTHOR + ",国籍:" + Japan.NATIONAL) ;
}
public void setName(String name){this.name = name;}
public void setAge(int age){this.age = age ;}
public String getName(){return this.name;}
public int getAge(){return this.age;}
};
public class Hello{
public static void main(String args[]){
try{
Class<?> c1 = Class.forName("org.kasumi.Person");
Constructor<?> con[] = c1.getConstructors() ;
for(int i=0;i<con.length;i++){
System.out.println("构造方法:" + con[i]) ;
}
}catch(ClassNotFoundException e){
e.printStackTrace() ;
}
}
};
D:\>javac -d . Hello.java
D:\>java org.kasumi.Hello
构造方法:public org.kasumi.Person()
构造方法:public org.kasumi.Person(java.lang.String)
构造方法:public org.kasumi.Person(java.lang.String,int)
获取一个对象实例所属类的父类
package org.kasumi;
import java.lang.reflect.Constructor ;
interface China{
public static final String NATIONAL = "中国";
public static final String AUTHOR = "snowDrink";
public void sayChina();
public String sayHello(String name,int age);
}
interface Japan{
public static final String NATIONAL = "日本";
public static final String AUTHOR = "kasumi";
public void sayJapan();
}
class Monkey{}
class Person extends Monkey implements China,Japan{
private String name ;
private int age ;
public Person(){}
public Person(String name){this.name = name;}
public Person(String name,int age){this(name);this.age = age;}
public void sayChina(){
System.out.println("作者:" + China.AUTHOR + ",国籍:" + China.NATIONAL) ;
}
public String sayHello(String name,int age){
return name + ",你好!我今年:" + age + "岁了!" ;
}
public void sayJapan(){
System.out.println("作者:" + Japan.AUTHOR + ",国籍:" + Japan.NATIONAL) ;
}
public void setName(String name){this.name = name;}
public void setAge(int age){this.age = age ;}
public String getName(){return this.name;}
public int getAge(){return this.age;}
};
public class Hello{
public static void main(String args[]){
try{
Class<?> c1 = Class.forName("org.kasumi.Person");
Class<?> c2 = c1.getSuperclass();
System.out.println("父类名称:" + c2.getName()) ;
}catch(ClassNotFoundException e){
e.printStackTrace() ;
}
}
};
D:\>javac -d . Hello.java
D:\>java org.kasumi.Hello
父类名称:org.kasumi.Monkey
根据一个对象实例获取其所属类中每个方法(构造)的所有参数类型、修饰符、方法名称
package org.kasumi;
import java.lang.reflect.Constructor ;
interface China{
public static final String NATIONAL = "中国";
public static final String AUTHOR = "snowDrink";
public void sayChina();
public String sayHello(String name,int age);
}
interface Japan{
public static final String NATIONAL = "日本";
public static final String AUTHOR = "kasumi";
public void sayJapan();
}
class Monkey{}
class Person extends Monkey implements China,Japan{
private String name ;
private int age ;
public Person(){}
public Person(String name){this.name = name;}
public Person(String name,int age){this(name);this.age = age;}
public void sayChina(){
System.out.println("作者:" + China.AUTHOR + ",国籍:" + China.NATIONAL) ;
}
public String sayHello(String name,int age){
return name + ",你好!我今年:" + age + "岁了!" ;
}
public void sayJapan(){
System.out.println("作者:" + Japan.AUTHOR + ",国籍:" + Japan.NATIONAL) ;
}
public void setName(String name){this.name = name;}
public void setAge(int age){this.age = age ;}
public String getName(){return this.name;}
public int getAge(){return this.age;}
};
public class Hello{
public static void main(String args[]){
try{
Class<?> c1 = Class.forName("org.kasumi.Person");
Constructor<?> con[] = c1.getConstructors();
for(int i=0;i<con.length;i++){
System.out.print("构造方法:" ) ; // 输出构造,直接打印
System.out.print(con[i].getModifiers() + " ") ; // 得到修饰符
System.out.print(con[i].getName()) ; // 取得构造方法的名字
System.out.print("(") ;
Class<?> p[] = con[i].getParameterTypes() ; // 得到构造方法中的全部参数(类型)
for(int j=0;j<p.length;j++){
System.out.print(p[j].getName() + " arg" + i) ;
if(j<p.length-1){
// 判断此是否是最后一个参数
System.out.print(","); // 输出“,”
}
}
System.out.println("){}") ;
}
}catch(ClassNotFoundException e){
e.printStackTrace() ;
}
}
};
D:\>javac -d . Hello.java
D:\>java org.kasumi.Hello
构造方法:1 org.kasumi.Person(){}
构造方法:1 org.kasumi.Person(java.lang.String arg1){}
构造方法:1 org.kasumi.Person(java.lang.String arg2,int arg2){}
根据对象实例获取其所属类的所有方法(构造)的原始修饰符
上面也获取了修饰符,但是是以常量int值形式显示并不是想要的String,这里这个是获取可读性的修饰符。
package org.kasumi;
import java.lang.reflect.Constructor ;
import java.lang.reflect.Modifier ;
interface China{
public static final String NATIONAL = "中国";
public static final String AUTHOR = "snowDrink";
public void sayChina();
public String sayHello(String name,int age);
}
interface Japan{
public static final String NATIONAL = "日本";
public static final String AUTHOR = "kasumi";
public void sayJapan();
}
class Monkey{}
class Person extends Monkey implements China,Japan{
private String name ;
private int age ;
public Person(){}
public Person(String name){this.name = name;}
public Person(String name,int age){this(name);this.age = age;}
public void sayChina(){
System.out.println("作者:" + China.AUTHOR + ",国籍:" + China.NATIONAL) ;
}
public String sayHello(String name,int age){
return name + ",你好!我今年:" + age + "岁了!" ;
}
public void sayJapan(){
System.out.println("作者:" + Japan.AUTHOR + ",国籍:" + Japan.NATIONAL) ;
}
public void setName(String name){this.name = name;}
public void setAge(int age){this.age = age ;}
public String getName(){return this.name;}
public int getAge(){return this.age;}
};
public class Hello{
public static void main(String args[]){
try{
Class<?> c1 = Class.forName("org.kasumi.Person");
Constructor<?> con[] = c1.getConstructors();
for(int i=0;i<con.length;i++){
System.out.print("构造方法:" );
// 获取原始修饰符
System.out.print(Modifier.toString(con[i].getModifiers()) + " ") ;
System.out.print(con[i].getName());
System.out.print("(") ;
Class<?> p[] = con[i].getParameterTypes() ;
for(int j=0;j<p.length;j++){
System.out.print(p[j].getName() + " arg" + i) ;
if(j<p.length-1){
System.out.print(",");
}
}
System.out.println("){}") ;
}
}catch(ClassNotFoundException e){
e.printStackTrace() ;
}
}
};
D:\>javac -d . Hello.java
D:\>java org.kasumi.Hello
构造方法:public org.kasumi.Person(){}
构造方法:public org.kasumi.Person(java.lang.String arg1){}
构造方法:public org.kasumi.Person(java.lang.String arg2,int arg2){}
通过对象实例取得其所属类的所有方法(非构造)及该方法的返回值类型与其定义的异常
package org.kasumi;
import java.lang.reflect.Constructor ;
import java.lang.reflect.Modifier ;
import java.lang.reflect.Method ;
interface China{
public static final String NATIONAL = "中国";
public static final String AUTHOR = "snowDrink";
public void sayChina();
public String sayHello(String name,int age);
}
interface Japan{
public static final String NATIONAL = "日本";
public static final String AUTHOR = "kasumi";
public void sayJapan();
}
class Monkey{}
class Person extends Monkey implements China,Japan{
private String name ;
private int age ;
public Person(){}
public Person(String name){this.name = name;}
public Person(String name,int age){this(name);this.age = age;}
public void sayChina(){
System.out.println("作者:" + China.AUTHOR + ",国籍:" + China.NATIONAL) ;
}
public String sayHello(String name,int age){
return name + ",你好!我今年:" + age + "岁了!" ;
}
public void sayJapan(){
System.out.println("作者:" + Japan.AUTHOR + ",国籍:" + Japan.NATIONAL) ;
}
public void setName(String name){this.name = name;}
public void setAge(int age){this.age = age ;}
public String getName(){return this.name;}
public int getAge(){return this.age;}
};
public class Hello{
public static void main(String args[]){
try{
Class<?> c1 = Class.forName("org.kasumi.Person");
Method m[] = c1.getDeclaredMethods() ; // 取得全部方法
for(int i=0;i<m.length;i++){
Class<?> r = m[i].getReturnType() ; // 得到返回值类型
System.out.print(Modifier.toString(m[i].getModifiers()) + " ") ;
System.out.print(r + " ") ;
System.out.print(m[i].getName()) ;
System.out.print("(") ;
Class<?> p[] = m[i].getParameterTypes();
for(int j=0;j<p.length;j++){
System.out.print(p[j].getName() + " " + "arg" + j) ;
if(j<p.length-1){
System.out.print(",") ;
}
}
Class<?> ex[] = m[i].getExceptionTypes() ; // 取出异常
if(ex.length>0){
System.out.print(") throws ") ;
}else{
System.out.print(")") ;
}
for(int j=0;j<ex.length;j++){
System.out.print(ex[j].getName()) ;
if(j<p.length-1){
System.out.print(",") ;
}
}
System.out.println() ;
}
}catch(ClassNotFoundException e){
e.printStackTrace() ;
}
}
};
D:\>javac -d . Hello.java
D:\>java org.kasumi.Hello
public void sayChina()
public class java.lang.String sayHello(java.lang.String arg0,int arg1)
public void sayJapan()
public void setAge(int arg0)
public int getAge()
public class java.lang.String getName()
public void setName(java.lang.String arg0)
通过对象实例取得其所属类的所有方法(非构造,包含父类)及该方法的返回值类型与其定义的异常
package org.kasumi;
import java.lang.reflect.Constructor ;
import java.lang.reflect.Modifier ;
import java.lang.reflect.Method ;
interface China{
public static final String NATIONAL = "中国";
public static final String AUTHOR = "snowDrink";
public void sayChina();
public String sayHello(String name,int age);
}
interface Japan{
public static final String NATIONAL = "日本";
public static final String AUTHOR = "kasumi";
public void sayJapan();
}
class Monkey{}
class Person extends Monkey implements China,Japan{
private String name ;
private int age ;
public Person(){}
public Person(String name){this.name = name;}
public Person(String name,int age){this(name);this.age = age;}
public void sayChina(){
System.out.println("作者:" + China.AUTHOR + ",国籍:" + China.NATIONAL) ;
}
public String sayHello(String name,int age){
return name + ",你好!我今年:" + age + "岁了!" ;
}
public void sayJapan(){
System.out.println("作者:" + Japan.AUTHOR + ",国籍:" + Japan.NATIONAL) ;
}
public void setName(String name){this.name = name;}
public void setAge(int age){this.age = age ;}
public String getName(){return this.name;}
public int getAge(){return this.age;}
};
public class Hello{
public static void main(String args[]){
try{
Class<?> c1 = Class.forName("org.kasumi.Person");
Method m[] = c1.getMethods() ; // 取得全部方法(包含父类)
for(int i=0;i<m.length;i++){
Class<?> r = m[i].getReturnType() ; // 得到返回值类型
System.out.print(Modifier.toString(m[i].getModifiers()) + " ") ;
System.out.print(r + " ") ;
System.out.print(m[i].getName()) ;
System.out.print("(") ;
Class<?> p[] = m[i].getParameterTypes();
for(int j=0;j<p.length;j++){
System.out.print(p[j].getName() + " " + "arg" + j) ;
if(j<p.length-1){
System.out.print(",") ;
}
}
Class<?> ex[] = m[i].getExceptionTypes() ; // 取出异常
if(ex.length>0){
System.out.print(") throws ") ;
}else{
System.out.print(")") ;
}
for(int j=0;j<ex.length;j++){
System.out.print(ex[j].getName()) ;
if(j<p.length-1){
System.out.print(",") ;
}
}
System.out.println() ;
}
}catch(ClassNotFoundException e){
e.printStackTrace() ;
}
}
};
D:\>javac -d . Hello.java
D:\>java org.kasumi.Hello
public void sayChina()
public class java.lang.String sayHello(java.lang.String arg0,int arg1)
public void sayJapan()
public void setAge(int arg0)
public int getAge()
public class java.lang.String getName()
public void setName(java.lang.String arg0)
public final void wait() throws java.lang.InterruptedException
public final void wait(long arg0,int arg1) throws java.lang.InterruptedException,
public final native void wait(long arg0) throws java.lang.InterruptedException
public native int hashCode()
public final native class java.lang.Class getClass()
public boolean equals(java.lang.Object arg0)
public class java.lang.String toString()
public final native void notify()
public final native void notifyAll()
获取本类属性及其父类属性
package org.kasumi;
import java.lang.reflect.Constructor ;
import java.lang.reflect.Modifier ;
import java.lang.reflect.Method ;
import java.lang.reflect.Field ;
interface China{
public static final String NATIONAL = "中国";
public static final String AUTHOR = "snowDrink";
public void sayChina();
public String sayHello(String name,int age);
}
interface Japan{
public static final String NATIONAL = "日本";
public static final String AUTHOR = "kasumi";
public void sayJapan();
}
class Monkey{}
class Person extends Monkey implements China,Japan{
private String name ;
private int age ;
public Person(){}
public Person(String name){this.name = name;}
public Person(String name,int age){this(name);this.age = age;}
public void sayChina(){
System.out.println("作者:" + China.AUTHOR + ",国籍:" + China.NATIONAL) ;
}
public String sayHello(String name,int age){
return name + ",你好!我今年:" + age + "岁了!" ;
}
public void sayJapan(){
System.out.println("作者:" + Japan.AUTHOR + ",国籍:" + Japan.NATIONAL) ;
}
public void setName(String name){this.name = name;}
public void setAge(int age){this.age = age ;}
public String getName(){return this.name;}
public int getAge(){return this.age;}
};
public class Hello{
public static void main(String args[]){
try{
Class<?> c1 = Class.forName("org.kasumi.Person") ; // 实例化对象
{ // 本类属性
Field f[] = c1.getDeclaredFields() ; // 取得本类中的属性
for(int i=0;i<f.length;i++){
Class<?> r = f[i].getType() ; // 得到属性类型
int mo = f[i].getModifiers() ; // 得到修饰符的数字
String priv = Modifier.toString(mo) ; // 还原修饰符
System.out.print("本类属性:") ;
System.out.print(priv + " ") ;
System.out.print(r.getName() + " ") ; // 得到属性类型
System.out.print(f[i].getName()) ; // 输出属性名称
System.out.println(" ;") ;
}
}
{ // 公共属性
Field f[] = c1.getFields() ; // 取得本类中的公共属性
for(int i=0;i<f.length;i++){
Class<?> r = f[i].getType() ; // 得到属性类型
int mo = f[i].getModifiers() ; // 得到修饰符的数字
String priv = Modifier.toString(mo) ; // 还原修饰符
System.out.print("公共属性:") ;
System.out.print(priv + " ") ;
System.out.print(r.getName() + " ") ; // 得到属性类型
System.out.print(f[i].getName()) ; // 输出属性名称
System.out.println(" ;") ;
}
}
}catch(ClassNotFoundException e){
e.printStackTrace() ;
}
}
};
D:\>javac -d . Hello.java
D:\>java org.kasumi.Hello
本类属性:private java.lang.String name ;
本类属性:private int age ;
公共属性:public static final java.lang.String NATIONAL ;
公共属性:public static final java.lang.String AUTHOR ;
公共属性:public static final java.lang.String NATIONAL ;
公共属性:public static final java.lang.String AUTHOR ;
关键字词:java,反射