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;
        }
    
    }
  • 相关阅读:
    HTML标签和属性三
    HTML标签和属性二
    HTML标签和属性一
    小程序相关面试题
    Vue路由的hash模式与history模式的区别?
    android中VideoView播放sd卡上面的视频
    Android中app开机自启动的开发
    java中byte,byte[]和int之间的转换
    Android多activity启动两种方式浅谈
    Android开发用到的几种常用设计模式浅谈(一):组合模式
  • 原文地址:https://www.cnblogs.com/shoneworn/p/8822885.html
Copyright © 2011-2022 走看看