通过一个demo熟悉class类的用法。
1.Person3.java
包含一个China接口和Person3类,一些简单方法
package com.yyj.Class;
interface China{ // 定义China接口
public static final String NATIONAL = "China" ; // 定义全局常量
public static final String AUTHOR = "yyj" ; // 定义全局常量
public void sayChina() ; // 无参的,没有返回值的方法
public String sayHello(String name,int age) ; // 定义有两个参数的方法,并返回内容
}
public class Person3 implements China{
private String name ;
private int age ;
public Person3(){ // 无参构造
}
public Person3(String name){
this.name = name ; // 设置name属性
}
public Person3(String name,int age){
this(name) ;
this.age = age ;
}
public void sayChina(){ // 覆写方法
System.out.println("作者:" + AUTHOR + ",国籍:" + NATIONAL) ;
}
public String sayHello(String name,int age){
return "我是" +name + ",我今年" + age + "岁了!" ;
}
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 ;
}
};
2.getAllAboutClass.java
(1)使用Class类进行Person3类的实例化和per对象的实例化,调用基本方法
(2)取得Person3类的结构:构造方法、属性、接口、父类、全部方法。
package com.yyj.Class;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
public class getAllAboutClass {
public static void main(String args[]) {
Class<?> c = null;// 声明class对象
try {
c = Class.forName("com.yyj.Class.Person3");// 实例化class对象为person3类
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
Person3 per=null;
try {
per=(Person3)c.newInstance();//person3对象的实例化
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
per.sayChina();
per.setName("yyj");
per.setAge(23);
System.out.println(per.sayHello("yyj",23));
// -----输出person3类中全部构造方法:访问权限修饰符+返回值类型+方法名+参数
Constructor<?> con[] = c.getConstructors();// 取得类中全部构造方法
System.out.println("person类中全部构造方法:");
for (int i = 0; i < con.length; i++) {
int mo = con[i].getModifiers(); // 取得第i个构造方法的访问权限修饰符
System.out.print(Modifier.toString(mo) + " ");// 得到修饰符名并打印
System.out.print(con[i].getName() + " ");// 得到方法名并打印
Class<?> param[] = con[i].getParameterTypes();
System.out.print("(");
for (int j = 0; j < param.length; j++) {
System.out.print(param[j].getName() + " args" + j);
if (j < param.length - 1) {
System.out.print(",");
}
}
System.out.println(")");
}
// -----person3类公共属性:修饰符+类型+属性名称
System.out.println("公共属性:");
Field f[] = c.getFields();// 取得公共属性
for (int i = 0; i < f.length; i++) {
int mo = f[i].getModifiers();// 取得属性修饰符(数字)
System.out.print(Modifier.toString(mo) + " ");// 还原修饰符
Class<?> t = f[i].getType();// 取得属性类型
System.out.print(t.getName() + " ");// 输出属性类型名称
System.out.println(f[i].getName());// 输出属性名称
}
// -----本类属性:修饰符+类型+属性名称
System.out.println("本类属性:");
Field df[] = c.getDeclaredFields();// 取得本类属性
for (int i = 0; i < df.length; i++) {
int mo = df[i].getModifiers();// 取得属性修饰符(数字)
System.out.print(Modifier.toString(mo) + " ");// 还原修饰符
Class<?> t = df[i].getType();// 取得属性类型
System.out.print(t.getName() + " ");// 输出属性类型名称
System.out.println(df[i].getName());// 输出属性名称
}
// -----person3类实现的接口
System.out.println("person3类实现的接口:");
Class<?> inter[] = c.getInterfaces();
for (int i = 0; i < inter.length; i++) {
System.out.println(inter[i].getName());
}
// -----person3类继承的父类
System.out.println("person3类继承的父类:");
Class<?> fa = c.getSuperclass();
System.out.println(fa.getName());
// -----person3类全部方法
System.out.println("person3类全部方法:");
Method m[] = c.getMethods(); // 取得全部方法
for (int i = 0; i < m.length; i++) {
Class<?> r = m[i].getReturnType(); // 得到返回值类型
Class<?> p[] = m[i].getParameterTypes(); // 取得全部参数的类型
int xx = m[i].getModifiers(); // 得到修饰符
System.out.print(Modifier.toString(xx) + " "); // 输出修饰符
System.out.print(r + " ");
System.out.print(m[i].getName());
System.out.print("(");
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();
}
}
}