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;
        }
    
    }
  • 相关阅读:
    10 个深恶痛绝的 Java 异常。。
    为什么公司宁愿 25K 重新招人,也不给你加到 20K?原因太现实……
    推荐一款代码神器,代码量至少省一半!
    Spring Cloud Greenwich 正式发布,Hystrix 即将寿终正寝。。
    hdu 3853 LOOPS(概率 dp 期望)
    hdu 5245 Joyful(期望的计算,好题)
    hdu 4336 Card Collector(期望 dp 状态压缩)
    hdu 4405 Aeroplane chess(概率+dp)
    hdu 5036 Explosion(概率期望+bitset)
    hdu 5033 Building (单调栈 或 暴力枚举 )
  • 原文地址:https://www.cnblogs.com/shoneworn/p/8822885.html
Copyright © 2011-2022 走看看