Java笔试题:给定一个ReadOnlyClass的对象roc,能否把这个对象的age值改成30?
在Java笔试面试中,经常会遇到代码题,今天我们就来看一则Java代码笔试题。
有如下代码:
Class ReadOnlyClass {
private Integer age=20;
public Integer getAge() {return age;}
}
现给定一个ReadOnlyClass的对象roc,能否把这个对象的age值改成30?
从正常编程的角度出发分析会发现,在本题中,age属性被修饰为 private,而且这个类只提供了获取age的 public的方法,而没有提供修改age的方法,因此,这个类是一个只读的类,无法修改age的值。但是Java语言还有一个非常强大的特性:反射机制,所以本题中,可以通过反射机制来修改age的值。
在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取对象的信息以及动态调用对象的方法的功能称为Java语言的反射机制。Java反射机制容许程序在运行时加载、探知、使用编译期间完全未知的Class换句话说Java可以加载一个运行时才得知名称的Class,获得其完整结构。
在Java语言中,任何一个类都可以得到对应的 Class 实例,通过class实例就可以获取类或对象的所有信息,包括属性(Field对象)、方法( Method对象)或构造方法( Constructor对象)。对于本题而言,在获取到 ReadOnly Class类的Class实例后,就可以通过反射机制获取到age属性对应的Field对象,然后可以通过这个对象来修改age的值,实现代码如下:
import java.lang.reflect.field;
class ReadOnlyClass {
private Integer age =20;
public Integer getAge() {
return age;
}
}
public class Test {
public static void main(string[] ages) throws Exception {
ReadOnlyClass pt = new ReadOnlyClass();
Class<?> clazz = ReadOnlyClass.class;
Field field = clazz.getDeclaredField("age")
field.setAccessible(ture);
field.set(pt,30);
System.out.println(pt.getAge());
}
}
程序的运行结果为:30
这就是全部答案,上海尚学堂Java培训提供技术支持,需要Java资料或学习视频请留言,谢谢!
Java笔试题:给定一个ReadOnlyClass的对象roc,能否把这个对象的age值改成30?的更多相关文章
- 谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数。
谷歌笔试题--给定一个集合A=[0,1,3,8](该集合中的元素都是在0,9之间的数字,但未必全部包含), 指定任意一个正整数K,请用A中的元素组成一个大于K的最小正整数. Google2009华南地 ...
- 2016最新Java笔试题集锦
更新时间:2015-08-13 来源:网络 投诉删除 [看准网(Kanzhun.com)]笔试题目频道小编搜集的范文“2016最新Java笔试题集锦”,供大家阅读参考, ...
- 华为Java笔试题
华为Java笔试题+数据库题 一. 单项选择题 1.Java是从( )语言改进重新设计. A.Ada B.C++ C.Pasacal D.BASIC 2.下列语句哪一个正确( ) A. Java程序经 ...
- Java笔试题集锦
Java笔试题集锦 1.MVC的各个部分都有那些技术来实现?怎样实现? 答:MVC是Model-View-Controller的简写."Model" 代表的是应用的业务逻辑(通过J ...
- java笔试题13-11-21
中xxx科技公司java笔试题 今天去参加一个公司的面试,去先做了一份笔试题,妈的,太他妈难了(对于我来说,最后做完一个员工说你是不是投错简历了,都是空白,我说我做的大部分都对了..最后面试都没有,就 ...
- java面试题—精选30道Java笔试题解答(二)
摘要: java面试题-精选30道Java笔试题解答(二) 19. 下面程序能正常运行吗() public class NULL { public static void haha(){ System ...
- 北京Java笔试题整理
北京Java笔试题整理 1.什么是java虚拟机?为什么ava被称作是"平台无关的编程语言? 答:Java虚拟机可以理解为一个特殊的"操作系统",只是它连接的不是硬件,而 ...
- 【笔试题】精选30道Java笔试题解答
转自于:精选30道Java笔试题解答 精选30道Java笔试题解答 1. 下面哪些是Thread类的方法() A. start() B. run() C. exit() D. getPriority( ...
- 精选30道Java笔试题附答案分析
精选30道Java笔试题解答 都是一些非常非常基础的题,是我最近参加各大IT公司笔试后靠记忆记下来的,经过整理献给与我一样参加各大IT校园招聘的同学们,纯考Java基础功底,老手们就不用进来了,免得笑 ...
随机推荐
- 2142: 逛超市(zznuoj)
2142: 逛超市 时间限制: 1 Sec 内存限制: 128 MB提交: 82 解决: 43[提交] [状态] [讨论版] [命题人:admin] 题目描述 “别人总说我瓜,其实我一点也不瓜,大 ...
- Selenium 常用API
浏览器相关操作 启动浏览器 driver = new ChromeDriver(); 控制浏览器窗口大小 maximize() 设置浏览器最大化 setSize() 设置浏览器窗口的宽与高 访问网页 ...
- ES6---箭头函数()=>{} 与function的区别(转载)
1.箭头函数与function定义函数的写法: //function function fn(a, b){ return a + b; } //arrow function var foo = (a, ...
- matplotlib函数理解
cumsum(),通常用于计算一个数组各行的累加值,函数用法是B = cumsum(A,dim),或B = cumsum(A). def cumsum(self, axis=0, *args, **k ...
- 今日报错Cannot access java.lang.String
public java.long.Long getId() { return id; } public void setId(java.lang.Long id) { this.id = id;} 手 ...
- SQL数据库的操作,表的操作
数据库定义语言(DDL):用于对数据库及数据库中的各种对象进行创建,删除,修改等操作 (1)create:用于创建数据库或数据库对象 (2)alter:用于对数据库或数据库对象进行修改 (3)drop ...
- meta标签整合
<title>名称</title>(便于搜索) <meta name="keywords" content="内容"> ke ...
- NOIP2017 国庆郑州集训知识梳理汇总
第一天 基础算法&&数学 day1难度测试 如果要用一个词来形容上午的测试,那真是体无完肤. 成绩: 题目 成绩 评价 T1 50 一般 T2 10 大失所望 T3 0 差 基础算法 ...
- 如何使用 tf object detection
# 如何使用 tf object detection https://juejin.i m/entry/5a7976166fb9a06335319080 https://towardsdatascie ...
- PC网站转换成手机版
博客地址:https://www.cnblogs.com/zxtceq/p/5714606.html 一天完成把PC网站改为自适应!原来这么简单! http://www.webkaka.com/blo ...