当前需求: 利用反射获取某一属性值
运行结果: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. linux学习 三 redhat

    1: 查看redhat版本号. 2:   防火墙中加入8080 查看防火墙状态,root用户登录,执行命令systemctl status firewalld 开启防火墙:systemctl star ...

  2. sublime 设置像IDE一样的 ctrl+鼠标左键 跳转到定义方法

    鼠标点击菜单栏的Preferences,选择Browse Packages ,进入文件加之后,选择User 点击进入User,在User里面添加文件名为 Default (Windows).subli ...

  3. java:calendar类及一些比较实用的utils(一)

    在java编程中经常会用到时间日期的计算.比较.格式化等等操作,刚开始接触Calendar类时,还是在初学习期间,小小白一枚,看着这个好复杂,懒惰心理作祟也就没有怎么去学习,后来在项目中经常用到,索性 ...

  4. 利用python数据分析panda学习笔记之基本功能

    1 重新生成索引 如果某个索引值不存在就引入缺失值 from pandas import Series,DataFrame import pandas as pd import numpy as np ...

  5. PHP实用小程序(四)

    <HTML> <HEAD> <TITLE>访问文件时间属性</TITLE> </HEAD> <BODY> <? $Last ...

  6. 《剑指offer》面试题5—从尾到头打印链表

    重要思路: 这个问题肯定要遍历链表,遍历链表的顺序是从头到尾,而要输出的顺序却是从尾到头,典型的“后进先出”,可以用栈实现. 注意stl栈的使用,遍历stack的方法. #include <io ...

  7. [翻译] 正式宣布 .NET 5

    原文: Introducing .NET 5 今天,我们宣布 .NET Core 3.0 之后的下一个版本将是 .NET 5 .这将是 .NET 系列的下一个重要版本. 将来只会有一个 .NET ,您 ...

  8. qscoj53(图的m着色问题)

    题目链接:http://qscoj.cn/contest/12/problem/53/ 题意:中文题诶- 思路:n个点, 那么最多用n种颜色,所以我们可以枚举颜色种类1~n,然后再判断用 i 种颜色可 ...

  9. 利用Web服务生成产品编号 执行添加操作

    为什么我想要执行添加操作,却添加不成功,系统提示我comm.ExecuteNonQuery有错误 已找到原因 在 string strsql = "insert into tb_goods( ...

  10. 几例实用的Shell脚本

    日常工作中,经常编写一些shell命令或脚本以完成重复性操作,本文分享了最近用到的几例shell实用脚本. 1 特殊文件名的远程拷贝 服务器之间拷贝文件经常使用scp命令,其命令格式: (1)scp ...