• Java的反射机制的详细应用


    package com.at221;
    
    import java.io.Serializable;
    import java.lang.reflect.*;
    
    import org.junit.Test;
    
    public class TestReflection {
        @Test
        public void test1() throws Exception{
            Class<?> class1 = null;
            Class<?> class2 = null;
            Class<?> class3 = null;
            //对象实例化的第一种方式:
            class1 = Class.forName("com.at221.Person");
    //        Person person = (Person)class1.newInstance();
            
            //对象实例化的第二种方式:
            
            class2 = new Person().getClass();
            
            //第三种对象实例化的方式:
            
            class3 = Person.class;
            
            System.out.println(class1);
            System.out.println(class2);
            System.out.println(class3);
            
        }
        
        /*运行结果:
         *     class com.at221.Person
            class com.at221.Person
            class com.at221.Person
    
         * 
         */
        
        //获取类的父类和接口:
        @Test
        public void test2() throws Exception{
            Class<?> class1 = Class.forName("com.at221.Person");
            
            Class<?> parentclass = class1.getSuperclass();
            System.out.println(parentclass.getName());
            
            System.out.println("----------------");
            
            Class<?> inte[] = class1.getInterfaces();
            for(int i = 0; i < inte.length; i++){
                System.out.println(inte[i].getName());
            }
        }
        /*
         * 运行结果:
         *     com.at221.Creture
            ----------------
            java.io.Serializable
    
         */
        
        
        //获取类的属性和属性的作用域和类型:
        @Test
        public void test3(){
            Class<?> class2 = new Person().getClass();
            Field[] fields = class2.getDeclaredFields();
            
            for(int i = 0; i < fields.length; i++){
                Class<?> types = fields[i].getType();
                int mo = fields[i].getModifiers();
                System.out.println(Modifier.toString(mo) + " " + 
                                    types.getName() + " " + fields[i].getName() + "
    ");
            }
            /*运行结果:
             *     private static final long serialVersionUID
    
                private java.lang.String name
                
                private int age
                
                private java.lang.String nation
             * 
             */
            
            //获取构造器的各种信息:
            
            Class<?> class3 = new Person().getClass();
            Constructor<?> construtor[] = class3.getDeclaredConstructors();
            
            for(int i = 0; i < construtor.length; i++){
                int mo = construtor[i].getModifiers();
                Class<?> types[] = construtor[i].getParameterTypes();
                System.out.println(Modifier.toString(mo) + " " + construtor[i].getName());
                System.out.println(i + ": ");
                for(int j = 0; j < types.length; j++){
                    System.out.print(types[j].getName() + " ");    
                }
                System.out.println("--------------");
            }
            /*运行结果:
             *     public com.at221.Person
                0: 
                --------------
                public com.at221.Person
                1: 
                java.lang.String int java.lang.String --------------
             * 
             */
         }
        
        @Test
        public void test4(){
            //获取类中的方法:
            Class<?> class4 = Person.class;
            Method methods[] = class4.getDeclaredMethods();
            for(int i = 0; i < methods.length; i++){
                
                int mod = methods[i].getModifiers();//获取函数的作用域;
                Class<?> returnTypes = methods[i].getReturnType();//q就函数的返回值;
                
                System.out.print("method[" + i + "] :" + Modifier.toString(mod) + " " + 
                                    " " + returnTypes.getName() + " " + methods[i].getName() + " ( ");
                Class<?> parameterType[] = methods[i].getParameterTypes();//获取函数的形参类型;
                for(int j = 0; j < parameterType.length; j++){
                    System.out.print(parameterType[j].getName() + " ");
                }
                System.out.println(")");
                
            }
        }
        /*运行结果:
         *     method[0] :public  java.lang.String toString ( )
            method[1] :public  java.lang.String getName ( )
            method[2] :public  void setName ( java.lang.String )
            method[3] :public  int getAge ( )
            method[4] :public  void setAge ( int )
            method[5] :public  java.lang.String getNation ( )
            method[6] :public  void setNation ( java.lang.String )
    
         * 
         */
    }
    
    
    class Person extends Creture implements Serializable {
        /**
         * 
         */
        private static final long serialVersionUID = 1L;
        private String name;
        private int age;
        private String nation;
        
        public Person() {
            super();
        }
    
        public Person(String name, int age, String nation) {
            super();
            this.name = name;
            this.age = age;
            this.nation = nation;
        }
    
        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;
        }
    
        public String getNation() {
            return nation;
        }
    
        public void setNation(String nation) {
            this.nation = nation;
        }
    
        @Override
        public String toString() {
            return "Person [name=" + name + ", age=" + age + ", nation=" + nation + "]";
        }
    }
    
    class Creture{
        public Creture(){
            super();
        }
        
        public void show(){
            System.out.println("!!!i am a creture!!!");
        }
    }
  • 相关阅读:
    Brocade FC Switch 光信号强度查看
    [Err]1418 This function has none of DETERMINISTIC,NO SQL,or R
    VBA 新手疑难杂症记录(不断更新中…)
    VBA 学习之旅(一) —— 数据类型
    ELO等级分制度
    Grunt上手指南<转>
    新开始新挑战
    html5大纲算法(目录树)
    隐居网V2.0
    长焦点图的解决方案(全兼容)
  • 原文地址:https://www.cnblogs.com/zhaoningzyn/p/6828851.html
Copyright © 2020-2023  润新知