zoukankan      html  css  js  c++  java
  • java反射基础应用备注

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

    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;
        }
    
    }
  • 相关阅读:
    InnoDB和MyISAM区别
    include和require的区别
    php的魔术方法
    php中heredoc的使用方法
    20条常见的编码陷阱
    php header 跳转
    php.ini设置详解
    session的实现原理 大网站应用应注意的问题
    Ruby on Rails 开发实践相关命令参考
    IBM WebSphere Portal6 最佳项目实践
  • 原文地址:https://www.cnblogs.com/shoneworn/p/8822885.html
Copyright © 2011-2022 走看看