如何通俗理解java反射?

我就是一个对象:

在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
    

总结:

以上的过程可以理解为一个反射!!! 好理解吧??

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值