java 反射如何给属性赋值_关于Java属性反射的异常问题
首先,准备一个电动机测试对象,如下:
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属性反射的异常问题相关推荐
- java里使用等号对象赋值_在Java中对象可以赋值, 只要使用赋值号(等号)即可, 相当于生成了一个各属性与赋值对象相同的新对象。...
本可文件_文的副的_库中以存重要件中放在数据,中只值号值对中公文管理. 对自严格件要求较然条,对象等号当于不属物的下列于经济作是(,对象等号当于化生宜于专门集中进行产,物定经途的有某农作指具种特济用, ...
- java语言中类定义数组赋值_在Java语言中,下列对于字符数组的定义并赋值正确的是(选一项)_学小易找答案...
[单选题]<茶花女--饮酒歌>这段音乐属于级进还是跳进的旋律? <茶花女-饮酒歌>.mp4 [简答题] [单选题]对外汉语教学中以系统讲授语言知识的一类课型,包括语音.词汇.语 ...
- java 循环里声明变量赋值_在Java中声明变量外部Foreach循环
有人可以请赐教我以下事项: public class Loopy { public static void main(String[] args) { int[] myArray = {7,6,5,4 ...
- 4.定义并实现一个Person类,包含姓名(name)与编号(code)等两个属性,通过构造函数为属性赋值,拥有显示属性值的方法(showInfo)。从Person类派生出一个Student类,拥有数
package monster.zf.Test; /*** 4.* 定义并实现一个Person类,包含姓名(name)与编号(code)* 等两个属性,通过构造函数为属性赋值,拥有显示属性值的方法(s ...
- java 静态对象赋值_基于Java class对象说明、Java 静态变量声明和赋值说明(详解)...
先看下JDK中的说明: java.lang.Object java.lang.Class Instances of the class Class represent classes and inte ...
- java 定义变量时 赋值与不赋值_探究Java中基本类型和部分包装类在声明变量时不赋值的情况下java给他们的默认赋值...
探究Java中基本类型和部分包装类在声明变量时不赋值的情况下java给他们的默认赋值 当基本数据类型作为普通变量(八大基本类型: byte,char,boolean,short,int,long,fl ...
- java 基本类型 不赋值_探究Java中基本类型和部分包装类在声明变量时不赋值的情况下java给他们的默认赋值...
探究Java中基本类型和部分包装类在声明变量时不赋值的情况下java给他们的默认赋值 当基本数据类型作为普通变量(八大基本类型: byte,char,boolean,short,int,long,fl ...
- java属性注解_【java自定义注解1】java自定义注解-属性
关于自定义注解,以前项目种应用的不多,最近看新项目过程中发现了挺多自定义注解相关内容,使用起来比较巧妙,于是 总结了两种方式,记录如下: 第一种:结合反射进行属性注入,代码如下: 1.定义一个注解: ...
- 给属性赋值_赋值方法:虚拟变量 Dummy Coding
点击上方蓝色字体,关注我们 选择实验法获得的数据属于离散变量,因而使用离散选择模型进行分析,常见的是Logit模型.在使用中需要对获得数据进行处理,其中一个处理方式就是虚拟变量(Dummy Varia ...
- java属性定义_在java中定义抽象属性
抽象关键字通常应用于类和方法,以便将某些行为的实现委托给子类. Java不支持抽象属性,如果您试图将类属性标记为抽象,则会得到编译错误. 在本教程中,将介绍两种定义抽象属性的方法,这些属性由子类设置, ...
最新文章
- 施一公:优秀博士如何养成(全文) 清华大学演讲
- 如何发布打印机文件夹及ICA 客户端打印机配置工具
- android中在代码中动态布按钮和画板局并绘制曲线
- vue+Java后端进行调试时如何解决跨域问题
- sql server运算符_了解SQL Server中集合理论与集合运算符之间的相互作用
- Android图表引擎AChartEngine - 简介
- 生日祝福html_更新,礼包选择,头像框及太子生日金币活动
- 压力测试网站_JMeter简单压力测试教程
- 使用js事件绑定要调用函数的的三种方式
- js加载本地shp数据到地图上_地图服务矢量数据获取方法总结
- Java实现分页的几种方式
- 网上管家婆软件,最新在线进销存软件。
- 装修软件平台开发的优势
- 破解Windows系统密码---利用PE系统破解
- noj [1480] 懒惰的风纪委Elaine (多重背包)
- 北京将广纳贤才 建设国际人才社区
- 一个程序员绝对真实的生活感悟
- IDEA如何在包下面继续建包
- python 山脊图_纯Python绘制满满艺术感的山脊地图
- echarts数据可视化学习
热门文章
- 在 Windows 中实现 Java 本地方法-Java native 关键词
- 为Android模拟器配置代理
- 第一堂TCP/IP课
- src2pkg:slackware下超强打包程式 [转]
- idea的数据库链接工具里看不到DDL
- Golang研学:defer!如何掌握并用好(延迟执行)
- php操作字符串(移除字符,计算字符串中字符个数,分割字符串,字符串序列化...
- CSS选择器优先级排列
- Atitit.java jar hell解决方案-----Djava.ext.dirs in ide envi..
- 从问题到解决方案到应用-android-ApiDemo入口源代码学习及应用