• Java的反射机制


    1.Java反射机制的网络解析

    JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。

    2.实际应用

    很多时候,我们实例化了一个类之后,想更改它的属性,可程序员很多时候都把一些属性给私有化了,包括一些方法,这个时候,我们就可以使用Java的反射机制去把这个实例里面的属性值进行更改,或者调用这些被私有化的方法

    3.例子

    //先写一个类
    public class Father {
    
    	private String name;
    	
    	public Father(){
    		setName("Peter");
    	}
    	
    	private void setName(String name) {
    		this.name = name;
    	}
    	
    	public String getName(){
    		return name;
    	}
    }
    

      

    //一个测试类-没有使用反射机制
    public class Child {
    	public static void main(String[] args) {  
            try{  
                Father father=new Father();  
                System.out.println(father.getName());
                //结果是Peter
    
            }catch(Exception ex){  
                ex.printStackTrace();  
            }  
              
        }  
    }
    

      

    //测试类,使用了反射机制修改变量
    public class Child {
    	public static void main(String[] args) {  
            try{  
                Father father=new Father();  
                Class<Father> fatherClass=Father.class; 
                  
                //访问私有变量  name
                Field field=fatherClass.getDeclaredField("name");
                //设置为修改
                field.setAccessible(true);  
                
                //有两个参数(需要更改变量的实例,变量的值);
                field.set(father, "John");
                System.out.println(father.getName());//输出John 
                
            }catch(Exception ex){  
                ex.printStackTrace();  
            }  
              
        }  
    }
    

      

    //调用方法
    public class Child {
    	public static void main(String[] args) {  
            try{  
                Father father=new Father();  
                Class<Father> fatherClass=Father.class; 
               
                Method method = fatherClass.getDeclaredMethod("setName", String.class);
                method.setAccessible(true);
                method.invoke(father, "Rose");
                System.out.println(father.getName());//输出John 
                
            }catch(Exception ex){  
                ex.printStackTrace();  
            }  
              
        }  
    }
    

    这里要注意的是getDeclareMethod()方法与getMethod()方法

    getDeclareMethod()获取自身所有的方法,包括public,private,protected

    getMethod()获取包括父类的所有public方法

  • 相关阅读:
    用 PHP 和 MySQL 保存和输出图片
    windows XP+Apache+PHP5+MySQL的安装与配置方法
    PHP语法学习笔记
    wap开发环境搭建
    三款免费的PHP加速器:APC、eAccelerator、XCache比较
    window下apache与tomcat整合
    用PHP的ob_start();控制您的浏览器cache!
    一些经典常用的正则表达式
    windows下为apache配置多个站点
    windows下IIS与Tomcat共存的问题
  • 原文地址:https://www.cnblogs.com/oscar1987121/p/5213708.html
Copyright © 2020-2023  润新知