必威体育Betway必威体育官网
当前位置:首页 > IT技术

Java反射中的setAccessible()方法是否破坏了类的访问规则

时间:2019-07-26 19:11:06来源:IT技术作者:seo实验室小编阅读:57次「手机版」
 

accessible

java反射机制提供的setaccessible()方法可以取消Java的权限控制检查,下面展示了这种方法的使用。

package test;

import java.lang.reflect.field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

class A {
	private int i = 5;

	private void printI() {
		System.out.println(this.i);
	}
}

public class Test {

	public static void main(String[] args)
			throws ClassnotfoundException, instantiationexception, IllegalAccessException, NoSuchFieldException, SecurityException, NoSuchMethodException, illegalargumentException, InvocationTargetException {
		String name = "test.A";
		Class c = class.forname(name);
		Object obj = c.newinstance();
		Method method = c.getDeclaredMethod("printI");
		//使private方法可以被调用
		method.setAccessible(true);
		method.invoke(obj);
		Field field = c.getDeclaredField("i");
		//使private成员可以被访问、修改
		field.setAccessible(true);
		field.set(obj, 10);
		method.invoke(obj);
	}

}

运行结果:

5

10

上述例子中,setAccessible(true)取消了Java的权限控制检查(注意不是改变方法或字段的访问权限),调用了类A的private方法,并且修改了其private成员变量的值。

而对于setAccessible()方法是否会破坏类的访问规则,产生安全隐患,我在知乎上面看到的一篇回答貌似很有道理:

另外,我们可以启用java.security.manager来判断程序是否具有调用setAccessible()的权限。默认情况下,内核API和扩展目录的代码具有该权限,而类路径或通过URLClassLoader加载的应用程序不拥有此权限。例如,当我通过cmd编译上述程序时就会报错:

相关阅读

18个Java开源CMS系统一览

恋吧在以前的博文中分别介绍了基于ASP和PHP的开源CMS程序一览,今天为网友献上18个Java开源CMS系统大餐,以飨网友厚爱。1.InfoGluein

java使用 zipoutputstream 进行解压缩时提示:不可预料

private static void zip(File filein, String basepath, ZipOutputStream out) throws IOException { FileInputStream in = n

java.lang.Enum.ordinal()方法实例

java.lang.Enum.ordinal() 方法返回枚举常量的序数(它在枚举声明,其中初始常量分配的零序位)。【实例】package com.yiibai; impo

JAVA继承顺序

当使用继承这个特性时,程序是如何执行的;继承的初始化顺序1.初始化父类再初始子类2.先执行初始化对象中属性,再执行构造方法中的初始

JAVA获取获得Timestamp类型的当前系统时间

java获取获得Timestamp类型的当前系统时间。方法1: Timestampd = newTimestamp(System.currentTimeMillis()); 方法2: Datedate

分享到:

栏目导航

推荐阅读

热门阅读