package org.lxh.demo15.classinfodemo ;
import java.lang.reflect.Constructor ;    // 导入构造方法的包
public class GetConstructorDemo01{
    public static void main(String args[]){
        Class<?> c1 = null ;        // 声明Class对象
        try{
            c1 = Class.forName("org.lxh.demo15.Person") ;    // 实例化对象
        }catch(ClassNotFoundException e){
            e.printStackTrace() ;
        }
        Constructor<?> con[] = c1.getConstructors() ;    // 取得一个类中的全部构造
        for(int i=0;i<con.length;i++){
            System.out.println("构造方法:" + con[i]) ;     // 输出构造,直接打印
        }
    }
};
package org.lxh.demo15.classinfodemo ;
import java.lang.reflect.Constructor ;    // 导入构造方法的包
public class GetConstructorDemo02{
    public static void main(String args[]){
        Class<?> c1 = null ;        // 声明Class对象
        try{
            c1 = Class.forName("org.lxh.demo15.Person") ;    // 实例化对象
        }catch(ClassNotFoundException e){
            e.printStackTrace() ;
        }
        Constructor<?> con[] = c1.getConstructors() ;    // 取得一个类中的全部构造
        for(int i=0;i<con.length;i++){
            Class<?> p[] = con[i].getParameterTypes() ;        // 得到构造方法中的全部参数
            System.out.print("构造方法:" ) ;     // 输出构造,直接打印
            System.out.print(con[i].getModifiers() + " ") ;    // 得到修饰符
            System.out.print(con[i].getName()) ;    // 取得构造方法的名字
            System.out.print("(") ;
            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("){}") ;
        }
    }
};
package org.lxh.demo15.classinfodemo ;
import java.lang.reflect.Constructor ;    // 导入构造方法的包
import java.lang.reflect.Modifier ;    // 导入构造方法的包
public class GetConstructorDemo03{
    public static void main(String args[]){
        Class<?> c1 = null ;        // 声明Class对象
        try{
            c1 = Class.forName("org.lxh.demo15.Person") ;    // 实例化对象
        }catch(ClassNotFoundException e){
            e.printStackTrace() ;
        }
        Constructor<?> con[] = c1.getConstructors() ;    // 取得一个类中的全部构造
        for(int i=0;i<con.length;i++){
            Class<?> p[] = con[i].getParameterTypes() ;        // 得到构造方法中的全部参数
            System.out.print("构造方法:" ) ;     // 输出构造,直接打印
            int mo = con[i].getModifiers() ; // 得到所要的访问权限
            System.out.print(Modifier.toString(mo) + " ") ;    // 得到修饰符
            System.out.print(con[i].getName()) ;    // 取得构造方法的名字
            System.out.print("(") ;
            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("){}") ;
        }
    }
};
package org.lxh.demo15.classinfodemo ;
import java.lang.reflect.Field ;    // 导入构造方法的包
import java.lang.reflect.Modifier ;    // 导入构造方法的包
public class GetFieldDemo{
    public static void main(String args[]){
        Class<?> c1 = null ;        // 声明Class对象
        try{
            c1 = Class.forName("org.lxh.demo15.Person") ;    // 实例化对象
        }catch(ClassNotFoundException e){
            e.printStackTrace() ;
        }
        {    // 本类属性
            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(" ;") ;
            }
        }
    }
};
package org.lxh.demo15.classinfodemo ;
public class GetInterfaceDemo{
    public static void main(String args[]){
        Class<?> c1 = null ;        // 声明Class对象
        try{
            c1 = Class.forName("org.lxh.demo15.Person") ;    // 实例化对象
        }catch(ClassNotFoundException e){
            e.printStackTrace() ;
        }
        Class<?> c[] = c1.getInterfaces() ;    // 以数组形式返回实现的全部接口
        for(int i=0;i<c.length;i++){
            System.out.println("实现的接口名称:" + c[i].getName()) ;    // 输出接口名称
        }
    }
};
package org.lxh.demo15.classinfodemo ;
import java.lang.reflect.Method ;    // 导入构造方法的包
import java.lang.reflect.Modifier ;    // 导入构造方法的包
public class GetMethodDemo{
    public static void main(String args[]){
        Class<?> c1 = null ;        // 声明Class对象
        try{
            c1 = Class.forName("org.lxh.demo15.Person") ;    // 实例化对象
        }catch(ClassNotFoundException e){
            e.printStackTrace() ;
        }
        Method m[] = c1.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() ;
        }
    }
};
package org.lxh.demo15.classinfodemo ;
public class GetSuperClassDemo{
    public static void main(String args[]){
        Class<?> c1 = null ;        // 声明Class对象
        try{
            c1 = Class.forName("org.lxh.demo15.Person") ;    // 实例化对象
        }catch(ClassNotFoundException e){
            e.printStackTrace() ;
        }
        Class<?> c2 = c1.getSuperclass() ;    // 取得父类
        System.out.println("父类名称:" + c2.getName()) ;
    }
};
package org.lxh.demo15 ;
interface China{    // 定义China接口
    public static final String NATIONAL = "China" ;    // 定义全局常量
    public static final String AUTHOR = "李兴华" ;    // 定义全局常量
    public void sayChina() ;        // 无参的,没有返回值的方法
    public String sayHello(String name,int age) ;    // 定义有两个参数的方法,并返回内容
}
public class Person implements China{
    private String name ;
    private int age ;
    public Person(){    // 无参构造
    }
    public Person(String name){
        this.name = name ;    // 设置name属性
    }
    public Person(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 ;
    }
};