zoukankan      html  css  js  c++  java
  • 回忆(四):通过反射获得私有构造实例化得到对象

    package reflex;
    
    import java.lang.reflect.Constructor;
    
    /*
     * 需求:通过反射获取私有构造方法并使用
     * private Person(String name) {}
     */
    public class ReflectDemo04_getConstructor_private_newInstance {
    	public static void main(String[] args) throws Exception{
    		// 获取字节码对象
    		Class  c = Class.forName("reflex.Person");
    		
    		// 获取私有构造方法
    		// NoSuchMethodException 没有这个方法异常
    		// 此方法无法找到其中的私有和默认修饰符修饰的构造方法
    		// Constructor con = c.getConstructor(String.class);
    		
    		// java.lang.IllegalAccessException 非法的访问异常
    		// 暴力访问
    		Constructor con = c.getDeclaredConstructor(String.class);
    		
    		// 反射很强大
    		// public void setAccessible(boolean flag)
            // throws SecurityException将此对象的 
    		// accessible 标志设置为指示的布尔值。
    		// 值为 true 则指示反射的对象在使用时应该取消 Java 语言访问检查。
    		// 值为 false 则指示反射的对象应该实施 Java 语言访问检查。
    		con.setAccessible(true); // 设置可访问为:true
    		// 用该私有构造方法创建对象
    		Object obj = con.newInstance("mzy");
    		// 一般的java反编译工具就是使用了反射的机制
    		System.out.println(obj);
    		
    		
    		// 然而java是号称安全的语言,
    		// 所以我们在写java文件的时候,可以加两行加密的语句
    		// 按照某种特殊的运算方法,对数据进行异或操作
    		// 也能进行加密
    	}
    }
    

    其中的person:

    package reflex;
    
    public class Person {
    	// 成员变量
    	private String name;
    	int age;
    	public String address;
    
    	// 构造方法
    	public Person() {
    	}
    
    	Person(String name, int age) {
    		this.name = name;
    		this.age = age;
    	}
    	private Person(String name) {
    		this.name = name;
    	}
    	public Person(String name, int age, String address) {
    		this.name = name;
    		this.age = age;
    		this.address = address;
    	}
    
    	// 成员方法
    	public void show() {
    		System.out.println("show");
    	}
    
    	public void method(String s) {
    		System.out.println("method" + s);
    	}
    
    	public String getString(String s, int i) {
    		return s + "---" + i;
    	}
    
    	@Override
    	public String toString() {
    		return "Person [name=" + name + ", age=" + age + ", address=" + address + "]";
    	}
    
    	private void function() {
    		System.out.println("function");
    	}
    
    }
    


  • 相关阅读:
    20145304《信息安全系统设计基础》第0周学习总结
    20145304 《Java程序设计》课程总结
    20145304 实验五实验报告
    20145304 第十周学习报告
    20145304 Java第九周学习报告
    20145304 实验四实验报告
    20145304 实验三实验报告
    20145304 Java第八周学习报告
    20145304 Java第七周学习报告
    20145303 《信息安全系统设计基础》第7周学习总结(2)
  • 原文地址:https://www.cnblogs.com/mzywucai/p/11053447.html
Copyright © 2011-2022 走看看