码迷,mamicode.com
首页 > 编程语言 > 详细

java反射基础应用备注

时间:2018-04-13 20:34:01      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:异常   getname   his   应用   print   lan   count   create   基础   

反射机制应用很广泛。这里简单备注下

package com.shone.ailin;

import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Reflectdemo {
    
    public static void main(String[] args) throws Exception {
        
        
        printVar();
        
        createInstance();

        printAllVarName();
        
    }
    
    //打印所有成员变量名
    private static void printAllVarName() {
        // TODO Auto-generated method stub
        Point p = new Point(1,3);
        Field[] fields = p.getClass().getDeclaredFields();
        for(int i=0;i<fields.length;i++) {
            System.out.println("var["+i+"]="+fields[i].getName());
        }
        
    }

    //打印成员变量的值
    private static void printVar() throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
        Point p = new Point(1,4);
        Field fX = p.getClass().getDeclaredField("x");
        fX.setAccessible(true); //这里必须要加上 。不然会抛出异常。因为是私有成员变量,所以,需要暴力的反射
        int x = (int)fX.get(p);
        System.out.println("x="+x);
        
    }

    //创建实例化对象并调用方法
    private static void createInstance() throws Exception, SecurityException {
        Constructor<Point> con = Point.class.getConstructor(int.class,int.class);
        try {
            Point instance = con.newInstance(1,3);
            
            Method m = instance.getClass().getDeclaredMethod("addCount", int.class,int.class);
            m.setAccessible(true);
            try {
                int count = (int) m.invoke(instance,2,7);
                System.out.println(count);
                
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (InvocationTargetException e) {
                e.printStackTrace();
            }
            
            
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        } catch (SecurityException e) {
            e.printStackTrace();
        }
    }
    

}

Point类

package com.shone.ailin;

public class Point {
    private int x ;
    public int y ;
    
    public Point(int x ,int y ) {
        // TODO Auto-generated constructor stub
        super();
        this.x = x;
        this.y = y;
    }
    
    private int addCount(int x,int y) {
        return x+y;
    }

}

 

java反射基础应用备注

标签:异常   getname   his   应用   print   lan   count   create   基础   

原文地址:https://www.cnblogs.com/shoneworn/p/8822885.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!