zoukankan      html  css  js  c++  java
  • java反射机制(笔记)

    java反射机制就是获取出class的相应方法

    例如 获取构造函数:

    模版:

    Class test = Class.forName("cn.test.Person");//得到相应的class
    Constructor test1 = test.getConstructor(null); //获取空的够着函数
    Person person = (Person) test1.newInstance(null);//new一个新对象
    //这里是访问私有的构造函数,进行暴力反射 Constructor c3 = test3.getDeclaredConstructor(List.class);//获得私有的构造 c3.setAccessible(true);//暴力反射

    反射函数模版:

    //实例化一个对象
    Class classtest = Class.forName(""); Method method = classtest.getMethod("方法名",参数);//参数多个用逗号隔开 method.invoke(对象,参数);//首先要创建一个实例化类,然后再进行调用

     反射main方法

    Class testmain = Class.forName("cn.test.Person");//得到对象
    Method tt = testmain.getMethod("main",String[].class);//得到main方法
    tt.invoke(null, new Object[]{new String[]{"aa","bbb"}});//调用

     得到字段:

    Person person = new Person("yy");
            Class cla = Class.forName("cn.test.Person");
            Field field = cla.getField("name");//得到name
            String name = (String) field.get(person);
            System.out.println(name);

    例子:

    //Person类
    package cn.test;
    
    import static java.lang.System.out;
    
    import java.awt.List;
    public class Person {
    	
    	private String name;
    	
    	public Person(){
    		out.print("nulllllllll");
    	}
    	public Person(String name){
    		out.println(name);
    		this.name = name;
    	}
    	
    	public Person(String name,int n){
    		out.print(""+name+"  "+n);
    	}
    	private Person(List l){
    		out.print("static person");
    	}
    	
    	public void getint(int x){
    		System.out.println("x=="+x);
    	}
    	
    	
    	public static void main(String[] args){
    		System.out.print("main ");
    	}
    }
    

      

     

    //测试类
    package cn.test.test;
    
    import java.awt.List;
    import java.lang.reflect.Constructor;
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    
    import org.junit.Test;
    
    import cn.test.Person;
    
    public class test {
    
        @Test
        public void test1() throws Exception{
            Class test = Class.forName("cn.test.Person");
            Constructor test1 = test.getConstructor(null);
            Person person = (Person) test1.newInstance(null);
            
        }
        
        @Test
        public void test2() throws Exception{
            Class test2 = Class.forName("cn.test.Person");
            Constructor c2 = test2.getConstructor(String.class);
            Person person = (Person) c2.newInstance("xxvdfdfd");
            
        }
        @Test
        public void test3() throws Exception{
            Class test3 = Class.forName("cn.test.Person");
            Constructor c3 = test3.getDeclaredConstructor(List.class);
            c3.setAccessible(true);
            Person person = (Person) c3.newInstance(new List());
        }
        
        //反射得到方法
        @Test
        public void test4() throws Exception{
            Person person = new Person();
            Class test4 = Class.forName("cn.test.Person");
            Method  tt = test4.getMethod("getint", int.class);
        
                tt.invoke(person, 12);
                
        }
        //反射得到买你函数
        @Test
        public void testmain() throws Exception{
            Class testmain = Class.forName("cn.test.Person");
            Method tt = testmain.getMethod("main",String[].class);
            tt.invoke(null, new Object[]{new String[]{"aa","bbb"}});
        }
    
        //反射得到字段
        @Test
        public void getname() throws Exception{
            Person person = new Person("yy");
            Class cla = Class.forName("cn.test.Person");
            Field field = cla.getField("name");//得到name
            String name = (String) field.get(person);
            System.out.println(name);
        }
    }

      

  • 相关阅读:
    ubuntu分屏终端
    Xcode-5.1.1更改文件盯作者
    Swift——(两)Swift访问元组
    Android Loader使用,屏幕解锁,重复荷载
    医疗信息季节:第二十三届中国国际医疗仪器设备展览会暨研讨会 思考
    UIBarButtonItem 小记边
    L轻松学习inux教程5 知识与学习bash
    Android 教你打造炫酷的ViewPagerIndicator 不仅仅是高仿MIUI
    Android Context 上下文 你必须知道的一切
    Android 自定义控件 优雅实现元素间的分割线 (支持3.0以下)
  • 原文地址:https://www.cnblogs.com/yyroom/p/3675687.html
Copyright © 2011-2022 走看看