怎么通俗理解反射
我就是一个对象:
在java中,创建对象常用的方式就是使用new关键字;对象一旦创建,对象有了属性,方法等信息;就像人的出生,人有很多私密信息,比如我的名字,我住哪里,我的性别,我的爱好,我的身份证,银行卡,银行卡密码等
我的信息真的安全吗?
我的学名:Rufus(鲁弗斯)
我的乳名,出生的时候我的亲人给我取好了;没出生家人就知道了
我的住址,邻居知道,户口也有;公开信息呗
我的身份证号,除了公安机构,家人知道;保护信息呗
我后背有条疤,我和我女友知道;更加隐秘的保护信息呗
我的银行卡密码,我自己知道;私密信息呗
我喜欢打篮球,看书,写日志
那么这些信息真的安全么,我的银行卡密码真的私密么??
突然有一天,我被人打晕,醒来后,环顾四周,我得知这是一个读心术实验室
里,有很多座位
我的座位号是:被测人员-青年组-21号-鲁弗斯
嗡隆隆,随着机器一想,我身体并没有感觉
只听见对面有个人随即念出我的所有信息:“记录一下他的信息:乳名:爱新觉罗·顺治,住址:中国xx…”
完了,所有的信息都被别人知道了,这是怎么回事?
代码演示
-
将我个人信息写成一个java类;
注意不同属性的的修饰符
package com.lsz.atest; /** * 我的个人信息 * 我叫Rufus * @author Rufus */ public class Rufus { /** * 注意不同属性的的修饰符 * 乳名 */ static String name = "爱新觉罗·顺治"; /** * 住址 */ public String address = "中国xxx"; /** * 身份证号 */ protected String idCard = "110120119"; /** * 伤疤 */ String scar = "后背有条疤"; /** * 银行卡密码 */ private String cardPwd = "123456"; /** * 打篮球 */ public void playBasketball() {} /** * 看书 */ protected void reading() {} /** * 写日志 */ private void writeLog() {} }
-
我的信息测试:
/** * @author Rufus */ public class RufusTest { public static void main(String[] args) { // 没有出生前,就已经有名字了 String name = Rufus.name; // 创建对象:我出生后,我知道我有很多东西; Rufus rufus = new Rufus(); String address = rufus.address; String scar = rufus.scar; String idCard = rufus.idCard; // 银行卡密码是我的私密信息,只有我知道(打开一下注释代码,提示不能调用私有属性) // 也就是说,得不到我的银行卡密码 // String cardPwd = rufus.cardPwd; } }
-
被被抓到
读心术实验室
后,标识上:被测人员-青年组-21号-Rufus
座位号后,当然不是嘿嘿嘿了,机器会根据座位号和名字
去读取你的信息package com.lsz.atest; import java.lang.reflect.Field; /** * @author Rufus */ public class RufusTest { public static void main(String[] args) throws Exception { // 被抓进标有名字和座位号为“com.lsz.atest.Rufus”‘读心术实验室(java[jvm])’中 // 读心术机器启动 Class rufus = Class.forName("com.lsz.atest.Rufus"); Field[] fields = rufus.getDeclaredFields();// 获取所有属性,包含私有属性 for (Field field : fields) { field.setAccessible(true); System.out.println(field.getName() + " ==>" + field.get(new Rufus())); } } }
打印信息:
银行卡密码都打印出来了
name ==>爱新觉罗·顺治 address ==>中国xxx idCard ==>110120119 scar ==>后背有条疤 cardPwd ==>123456
总结:
以上的过程可以理解为一个反射!!! 好理解吧??