首先,准备一个电动机测试对象,如下:

public class Motor {public int voltage = 12;    // 电压public int current = 2;     // 电流
}

我们可以看到,电动机对象的两个属性都是公共的,用Java的反射机制访问它们,如下:

try {Class<?> clazz = Class.forName("org.vnet.dynamic.Motor");Field voltage = clazz.getField("voltage");Field current = clazz.getField("current");Object motor = clazz.newInstance();System.out.printf("The voltage is %sn", (int)voltage.get(motor));System.out.printf("The current is %sn", (int)current.get(motor));
} catch (NoSuchFieldException e) {e.printStackTrace();
} catch (IllegalAccessException e) {e.printStackTrace();
} catch (ClassNotFoundException e) {e.printStackTrace();
} catch (InstantiationException e) {e.printStackTrace();
}

输出结果跟预期一样,如下:

The voltage is 12
The current is 2

如果仔细调试代码,我们会发现代码clazz.getField("voltage");会抛出检查类型异常NoSuchFieldException,也就是该对象中并不存在名称为voltage的属性;而代码voltage.get(motor)会抛出检查类型异常IllegalAccessException,从字面上看是非法访问异常,跟访问修饰符相关。

那么我们修改一下电动机测试对象,把current属性变为私有,如下:

public class Motor {public int voltage = 12;    // 电压private int current = 2;     // 电流
}

接下来我们运行测试代码会抛出什么样的异常,如果是IllegalAccessException异常,那么跟猜测的一样,可惜事与愿违,代码运行结果如下:

java.lang.NoSuchFieldException: currentat java.lang.Class.getField(Class.java:1703)at org.vnet.dynamic.Motor.main(Motor.java:24)

也就是说代码运行至Field current = clazz.getField("current");就抛出了异常NoSuchFieldException。那么什么情况下会抛出IllegalAccessException异常?

java 反射如何给属性赋值_关于Java属性反射的异常问题相关推荐

  1. java里使用等号对象赋值_在Java中对象可以赋值, 只要使用赋值号(等号)即可, 相当于生成了一个各属性与赋值对象相同的新对象。...

    本可文件_文的副的_库中以存重要件中放在数据,中只值号值对中公文管理. 对自严格件要求较然条,对象等号当于不属物的下列于经济作是(,对象等号当于化生宜于专门集中进行产,物定经途的有某农作指具种特济用, ...

  2. java语言中类定义数组赋值_在Java语言中,下列对于字符数组的定义并赋值正确的是(选一项)_学小易找答案...

    [单选题]<茶花女--饮酒歌>这段音乐属于级进还是跳进的旋律? <茶花女-饮酒歌>.mp4 [简答题] [单选题]对外汉语教学中以系统讲授语言知识的一类课型,包括语音.词汇.语 ...

  3. java 循环里声明变量赋值_在Java中声明变量外部Foreach循环

    有人可以请赐教我以下事项: public class Loopy { public static void main(String[] args) { int[] myArray = {7,6,5,4 ...

  4. 4.定义并实现一个Person类,包含姓名(name)与编号(code)等两个属性,通过构造函数为属性赋值,拥有显示属性值的方法(showInfo)。从Person类派生出一个Student类,拥有数

    package monster.zf.Test; /*** 4.* 定义并实现一个Person类,包含姓名(name)与编号(code)* 等两个属性,通过构造函数为属性赋值,拥有显示属性值的方法(s ...

  5. java 静态对象赋值_基于Java class对象说明、Java 静态变量声明和赋值说明(详解)...

    先看下JDK中的说明: java.lang.Object java.lang.Class Instances of the class Class represent classes and inte ...

  6. java 定义变量时 赋值与不赋值_探究Java中基本类型和部分包装类在声明变量时不赋值的情况下java给他们的默认赋值...

    探究Java中基本类型和部分包装类在声明变量时不赋值的情况下java给他们的默认赋值 当基本数据类型作为普通变量(八大基本类型: byte,char,boolean,short,int,long,fl ...

  7. java 基本类型 不赋值_探究Java中基本类型和部分包装类在声明变量时不赋值的情况下java给他们的默认赋值...

    探究Java中基本类型和部分包装类在声明变量时不赋值的情况下java给他们的默认赋值 当基本数据类型作为普通变量(八大基本类型: byte,char,boolean,short,int,long,fl ...

  8. java属性注解_【java自定义注解1】java自定义注解-属性

    关于自定义注解,以前项目种应用的不多,最近看新项目过程中发现了挺多自定义注解相关内容,使用起来比较巧妙,于是 总结了两种方式,记录如下: 第一种:结合反射进行属性注入,代码如下: 1.定义一个注解: ...

  9. 给属性赋值_赋值方法:虚拟变量 Dummy Coding

    点击上方蓝色字体,关注我们 选择实验法获得的数据属于离散变量,因而使用离散选择模型进行分析,常见的是Logit模型.在使用中需要对获得数据进行处理,其中一个处理方式就是虚拟变量(Dummy Varia ...

  10. java属性定义_在java中定义抽象属性

    抽象关键字通常应用于类和方法,以便将某些行为的实现委托给子类. Java不支持抽象属性,如果您试图将类属性标记为抽象,则会得到编译错误. 在本教程中,将介绍两种定义抽象属性的方法,这些属性由子类设置, ...

最新文章

  1. 施一公:优秀博士如何养成(全文) 清华大学演讲
  2. 如何发布打印机文件夹及ICA 客户端打印机配置工具
  3. android中在代码中动态布按钮和画板局并绘制曲线
  4. vue+Java后端进行调试时如何解决跨域问题
  5. sql server运算符_了解SQL Server中集合理论与集合运算符之间的相互作用
  6. Android图表引擎AChartEngine - 简介
  7. 生日祝福html_更新,礼包选择,头像框及太子生日金币活动
  8. 压力测试网站_JMeter简单压力测试教程
  9. 使用js事件绑定要调用函数的的三种方式
  10. js加载本地shp数据到地图上_地图服务矢量数据获取方法总结
  11. Java实现分页的几种方式
  12. 网上管家婆软件,最新在线进销存软件。
  13. 装修软件平台开发的优势
  14. 破解Windows系统密码---利用PE系统破解
  15. noj [1480] 懒惰的风纪委Elaine (多重背包)
  16. 北京将广纳贤才 建设国际人才社区
  17. 一个程序员绝对真实的生活感悟
  18. IDEA如何在包下面继续建包
  19. python 山脊图_纯Python绘制满满艺术感的山脊地图
  20. echarts数据可视化学习

热门文章

  1. 在 Windows 中实现 Java 本地方法-Java native 关键词
  2. 为Android模拟器配置代理
  3. 第一堂TCP/IP课
  4. src2pkg:slackware下超强打包程式 [转]
  5. idea的数据库链接工具里看不到DDL
  6. Golang研学:defer!如何掌握并用好(延迟执行)
  7. php操作字符串(移除字符,计算字符串中字符个数,分割字符串,字符串序列化...
  8. CSS选择器优先级排列
  9. Atitit.java jar hell解决方案-----Djava.ext.dirs in ide envi..
  10. 从问题到解决方案到应用-android-ApiDemo入口源代码学习及应用