zoukankan      html  css  js  c++  java
  • 吴裕雄--天生自然JAVA反射机制学习笔记:反射机制的使用——取得类的结构

    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 ;
        }
    };
  • 相关阅读:
    MY_HOME
    跨站请求伪造CSRF防护方法
    python中的函数参数
    python 中的闭包
    append追加元素绑定事件无效的解决办法
    webservice练习(cxf,axis,httpclient)
    hibernate5 mysql写入中文乱码
    今天面试中遇到的几个sql查询问题
    Eclipse运行maven项目是出现-Dmaven.multiModuleProjectDirectory system property is not set. Check $M2_HOME environment variable and mvn script match.这种问题解决办法
    模拟博客园登录java实现
  • 原文地址:https://www.cnblogs.com/tszr/p/12416974.html
Copyright © 2011-2022 走看看