zoukankan      html  css  js  c++  java
  • 反射 Reflect

    public class TestReflect {
    	public static void main(String[] args) {
    //		getConstructor();
    //		getMothed();
    //		getFiled();
    		getArrayFieldMethod();
    	}
    /**
     * 	通过反射获取参数是数组的方法
     */
    	private static void getArrayFieldMethod() {
    		try {
    			
    			//获取参数是数组的方法
    			Class person4 = Class.forName("com.fanshe1.Person");
    			Method method =person4.getMethod("printArray", String [].class);
    			Object obj = person4.newInstance();
    			method.invoke(obj,(Object) new String[]{"aaa","bbb","ccc"});
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		
    	}
    	/**
    	 * 通过反射获取属性
    	 */
    	private static void getFiled() {
    		try {
    			 Class person3 = Class.forName("com.fanshe1.Person");
    			 System.out.println("111");
    				//获取公开字段 
    //			Field[] fields = person3.getFields();
    //			for(Field field:fields){
    //				System.out.println(field);
    //			}
    			//获取私有字段
    			Field[] declaredFields = person3.getDeclaredFields();
    			for(Field field : declaredFields){
    				System.out.println(field);
    			}
    			
    			Field field = person3.getDeclaredField("name");
    			field.setAccessible(true);
    			Object obj = person3.newInstance();
    			field.set(obj, "小六");
    			String str = (String)field.get(obj);
    			System.out.println(str);
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		
    	}
    	/**
    	 * 通过反射获取方法(参数 返回值)
    	 */
    	private static void getMothed(){
    		try {
    			//获取类的对象
    			Class person2 = Class.forName("com.fanshe1.Person");
    		
    			//获取所有继承链中公共的方法
    //			Method[] methods = person2.getMethods();
    //			for(Method method:methods)
    //			{
    //				System.out.println(method);
    //			}
    			
    			//获取所有该类中公共和私有的方法
    //			Method[] declaredMethods = person2.getDeclaredMethods();
    //			for(Method method:declaredMethods){
    //				System.out.println(method);
    //			}
    			
    			
    			//获取无参无返回值
    			Method method = person2.getMethod("showInfo", null);
    			Object obj = person2.newInstance();
    			method.invoke(obj, null);
    			
    			//获取带参数无返回值
    			Method method1 = person2.getMethod("showInfo", String.class);
    			method1.invoke(obj, "北京");
    			
    			//获取无参有返回值
    			Method method2 = person2.getMethod("getInfo", null);
    			String str = (String)method2.invoke(obj, null);
    			System.out.println(str);
    			
    			//获取私有方法
    			Method method3 = person2.getDeclaredMethod("data", null);
    			method3.setAccessible(true);
    			method3.invoke(obj, null);
    			
    			//获取静态方法
    			Method method4 = person2.getMethod("staticmethod", null);
    //			method4.setAccessible(true);
    			method4.invoke(null, null);
    		} catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    		
    	}
    	
    	/**
    	 * 通过反射获取构造方法
    	 */
    	private static void getConstructor() {
    		// TODO Auto-generated method stub
    		try {
    			Class person1 = Class.forName("com.fanshe1.Person");
    //			Constructor[] constructors = person1.getConstructors();
    //			for(Constructor constructor:constructors)
    //			{
    //				System.out.println(constructor);
    //			}
    			Constructor con1= person1.getConstructor(String.class,int.class,String.class);
    			Object obj1 = con1.newInstance("aa",18,"男");
    			System.out.println(obj1.toString());
    			
    			Object obj2 = person1.newInstance();
    			System.out.println(obj2);
    			
    			
    			
    		}catch (Exception e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    		}
    	}
    }
    
  • 相关阅读:
    【leetcode_easy】530. Minimum Absolute Difference in BST
    【leetcode】521. Longest Uncommon Subsequence I
    【leetcode】520. Detect Capital
    【leetcode】509. Fibonacci Number
    【leetcode】507. Perfect Number
    第2章 GNS3和PacketTracer网络模拟器(1)_GNS3概述
    第1章 计算机网络和协议(4)_网络性能指标
    第1章 计算机网络和协议(3)_TCP/IP协议
    第1章 计算机网络和协议(2)_OSI参考模型
    第1章 计算机网络和协议(1)_网络的概念
  • 原文地址:https://www.cnblogs.com/ssjifm/p/7275306.html
Copyright © 2011-2022 走看看