当前需求: 利用反射获取某一属性值
运行结果:java.lang.IllegalAccessException: Class com.example.demo.test.Reflect can not access a member of
class com.example.demo.test.EvalNum with modifiers "private static"...
反射用到的Bean类:
 package com.example.demo.test;

 import java.io.Serializable;

 /**
* @description: 反射用到的类
* @author: The Queen Of Rabbit
* @date: 2018/11/26
*/
public class EvalNum implements Serializable { private static String value; public EvalNum() {
super();
} public static String getValue() {
return value;
} public static void setValue(String value) {
EvalNum.value = value;
} }

当前代码:
 package com.example.demo.test;

 import java.lang.reflect.Field;
import java.lang.reflect.Method; /**
* @description: Reflect Demo
* @author: The Queen Of Rabbit
* @date: 2018/11/26
*/
public class Reflect { public static void main(String[] args) {
try {
// 通过反射获取类信息
String path = "com.example.demo.test.EvalNum";
Class<?> reflectClass = Class.forName(path); // 通过反射调用普通方法
EvalNum evalNum = (EvalNum) reflectClass.newInstance();
Method proMethod = reflectClass.getDeclaredMethod("setValue", String.class);
// 把对象evalNum的pro设置为属性(仅用于static修饰的属性)
proMethod.invoke(evalNum, "属性"); // 获取pro值
Field field = reflectClass.getDeclaredField("value"); String value = (String) field.get(reflectClass.newInstance());
System.out.println("获取value值:\n\t\t" + value);
} catch (Exception e) {
e.printStackTrace();
}
}
}
修改后代码:
 package com.example.demo.test;

 import java.lang.reflect.Field;
import java.lang.reflect.Method; /**
* @description: Reflect Demo
* @author: The Queen Of Rabbit
* @date: 2018/11/26
*/
public class Reflect { public static void main(String[] args) {
try {
// 通过反射获取类信息
String path = "com.example.demo.test.EvalNum";
Class<?> reflectClass = Class.forName(path); // 通过反射调用普通方法
EvalNum evalNum = (EvalNum) reflectClass.newInstance();
Method proMethod = reflectClass.getDeclaredMethod("setValue", String.class);
// 把对象evalNum的pro设置为属性(仅用于static修饰的属性)
proMethod.invoke(evalNum, "属性"); // 获取pro值
Field field = reflectClass.getDeclaredField("value");
// 仅在获取用private修饰属性使用
field.setAccessible(true);
String value = (String) field.get(reflectClass.newInstance());
System.out.println("获取value值:\n\t\t" + value);
} catch (Exception e) {
e.printStackTrace();
}
}
}

错误原因:
    无法访问私有化的构造方法,普通方法,和私有属性。

解决方案:
1. 将修饰类属性的 private 改为 public
2. 调用setAccessible()方法,来设置或取消访问检查,以达到访问私有对象的目的【如修改后代码28行】

java.lang.IllegalAccessException: Class XX can not access a member of class XXX with modifiers "private static"的更多相关文章

  1. 异常HTTP Status 500 - Illegal access to constructor, is it public? java.lang.IllegalAccessException: Class com.opensymphony.xwork2.ObjectFactory can not access a member of class action.CoreAction with

    Exception report message Illegal access to constructor, is it public? description The server encount ...

  2. java.lang.IllegalAccessException: void #####.MyBroadcastReceiver.() is not accessible from jav

    java.lang.IllegalAccessException: void #####.MyBroadcastReceiver.<init>() is not accessible fr ...

  3. 7.java.lang.IllegalAccessException

    java.lang.IllegalAccessException 没有访问权限 当应用程序要调用一个类,但当前的方法即没有对该类的访问权限便会出现这个异常.对程序中用了Package的情况下要注意这个 ...

  4. openfire 部署后报错: java.lang.IllegalArgumentException: interface xx is not visible from class loader

    该异常是创建代理时加载接口的类加载器与创建时传入的不一致. 在本地eclipse做openfire二次开发,本地运行没错,部署到服务器上后报异常:  java.lang.IllegalArgument ...

  5. Java反射操作成员变量 Class can not access a member with modifiers "*"

    fields[j].set(obj, val); 报: Exception in thread "main" java.lang.IllegalAccessException: C ...

  6. hibernate 解决 java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.validator.internal.engine.xxx 这类的问题

    <!-- 解决 java.lang.NoClassDefFoundError: Could not initialize class org.hibernate.validator.intern ...

  7. json解析出现:java.lang.ClassCastException: net.sf.ezmorph.bean.MorphDynaBean cannot be cast to XXX

    感谢大佬:https://blog.csdn.net/one_ink/article/details/99817676 一.出错原因 当我们利用json解析中的toBean方法时,如果它的属性里面包含 ...

  8. 错误 java.lang.ClassCastException: com.xx cannot be cast to ResourceBundle

    出现错误: java.lang.ClassCastException: com.xxx cannot be cast to ResourceBundle 百度搜索错误,没有结果.谷歌搜索:http:/ ...

  9. Caused by: org.apache.jasper.JasperException: javax.el.ELException: java.lang.IllegalAccessException: Class javax.el.BeanELResolver can not access a m

    在tomcat版本下的7.0.35没有问题. 在tomcat版本下的7.0.12出现问题.

随机推荐

  1. 最新sublimetext3080注册

    ----- BEGIN LICENSE -----K-20Single User LicenseEA7E-9401293A099EC1 C0B5C7C5 33EBF0CF BE82FE3BEAC216 ...

  2. 重载和const形参的学习心得

    在C++ primer 5th中,第6章的练习6.39(a)中,关于重载和const形参的学习心得. 练习6.39:说明在下面的每组声明中第二条声明语句是何含义.如果有非法的声明,请指出来. (a)  ...

  3. crontab计划任务监控nginx服务器

    #!/bin/bash ps axu |grep 'nginx' |grep -v 'grep' &>/dev/null ] then echo "准备重启nginx....& ...

  4. HTML学习笔记(四)常用标签

    1.超链接 <a href="url">Link text</a> eg:<a href="http://www.w3school.com. ...

  5. 2019ICPC西安邀请赛 - B. Product - 数论

    打印的时候麻烦把:https://blog.csdn.net/skywalkert/article/details/50500009这个打印下来. 求\(\prod\limits_{i=1}^{n} ...

  6. POJ3461 【KMP(粗糙模板)】

    题意: 给你两个字符串p和s,求出p在s中出现的次数. 这道题,abababa中aba出现了3次. 有其他题是求abababa,aba就是2次. 需注意. KMP 模板 //#include<b ...

  7. 51nod 1049【经典】

    自己模拟,全靠体会~ #include <cstdio> #include <stack> #include <iostream> #include <str ...

  8. Lightoj1000【简单A+B】

    balababalabalabala! #include<stdio.h> #include<queue> #include<string.h> #include& ...

  9. memcached 命令详解

    memcached::get(); //查找key的值: 例:$mem->get($key): memcached::add() ; //添加,当key存在时,false,当key不存在则执行 ...

  10. assembly x86(nasm)子程序1

    T: 将BUF开始的10个单元中的二进制数转换成两位十六进制数的ASCII码,在屏幕上显示出来.要求码型转换通过子程序HEXAC实现,在转换过程中,通过子程序DISP实现显示. 思路: Main主调程 ...