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;
        }
    
    }
  • 相关阅读:
    Codeforces Round 546 (Div. 2)
    Codeforces Round 545 (Div. 2)
    Codeforces Round 544(Div. 3)
    牛客小白月赛12
    Codeforces Round 261(Div. 2)
    Codeforces Round 260(Div. 2)
    Codeforces Round 259(Div. 2)
    Codeforces Round 258(Div. 2)
    Codeforces Round 257 (Div. 2)
    《A First Course in Probability》-chaper5-连续型随机变量-随机变量函数的分布
  • 原文地址:https://www.cnblogs.com/shoneworn/p/8822885.html
Copyright © 2011-2022 走看看