java面试题(21):private修饰的方法可以通过反射访问,那么private的意义是什么?

这篇具有很好参考价值的文章主要介绍了java面试题(21):private修饰的方法可以通过反射访问,那么private的意义是什么?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1 反射简介

Java,在一个类中,为了不让外界访问到某些属性和方法,通常将其设置为private,用正常的方式(对象名.属性名,对象名.方法名)将无法访问此属性与方法,但有没有其他方法可以访问呢?答案是有的,这就是java反射带来的便利。利用反射访问类的私有属性及方法如下:

public class Reflect {

    private String name;
    private int age;

    private Reflect(int age) {
        this.age = age;
    }

    private void speak(String name) {
        System.out.println("My name is" + name);
    }

    public Reflect(String name) {
        this.name = name;
    }
}

首先,我们要了解三个反射包中的类:Constructor:代表类的单个构造方法,通过Constructor我们可执行一个类的某个构造方法(有参或者无参)来创建对象时。

Method:代表类中的单个方法,可以用于执行类的某个普通方法,有参或无参,并可以接收返回值。

Field:代表类中的单个属性,用于set或get属性

AccessibleObject:以上三个类的父类,提供了构造方法,普通方法,和属性的访问控制的能力。

使用Class类中的方法可以获得该类中的所有Constructor对象,Method对象,和Field对象。但是任然无法访问私有化的构造方法,普通方法,和私有属性,此时我们可以使用他们继承父类(AccessibleObject)中的setAccessible()方法,来设置或取消访问检查,以达到访问私有对象的目的。

public static void main(String[] args)  throws Exception {

        Reflect reflect = new Reflect("a");

        Method[] methods = Reflect.class.getMethods();
        Field[] fields = Reflect.class.getDeclaredFields();

        for (int i = 0; i < fields.length; i ++) {
            fields[i].setAccessible(true);
            System.out.println(fields[i].getName());
        }

        for (int j = 0; j < methods.length; j ++) {
            methods[j].setAccessible(true);
            System.out.println(methods[j].getName());

            methods[j].invoke(reflect);
            System.out.println(methods[j].getName());
        }
    }

这样,我们就获得了私有属性的值

当然,凡事有利就有弊,然后我们再来说一下java反射的优缺点;

优点:

  1. 能够运行时动态获取类的实例,大大提高了系统的灵活性和扩展性;
  2. 与java动态编译相结合,可以实现无比强大的功能。

缺点:文章来源地址https://www.toymoban.com/news/detail-814407.html

  1. 使用反射的性能较低;
  2. 使用反射来说相对不安全;
  3. 破坏了类的封装性,可以通过反射来获取这个类的属性,和私有方法。

2 private修饰的方法可以通过反射访问,那么private的意义是什么?

  1. Java的private修饰符不是为了绝对安全设计的,而是对用户常规使用Java的一种约束。就好比饭店厨房门口挂着“闲人免进”的牌子,但是你还是能够通过其他方法进去。
  2. 从外部对对象进行常规调用时,能够看到清晰的类结构。

到了这里,关于java面试题(21):private修饰的方法可以通过反射访问,那么private的意义是什么?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机系大学生,可以通过Java做什么副业?这篇文章给你答案!

    计算机系科班出身的学生,有什么能做的副业?最佳答案就是做自己专业对口,且促进技能的事,**敲代码做课设!**这篇文章就来分享下自己的副业之旅(仅限计算机相关专业哦) 发现副业机会 在我大三时无意将Javaweb作业分享出去,收到了不少回复,很多人问我可以定做课

    2024年02月06日
    浏览(35)
  • 内网可以通过https来访问,外网不可以通过https来访问,怎么办

    如果您的内网可以通过HTTPS来访问,但外网无法通过HTTPS进行访问,可能有几种原因导致这个问题: 防火墙配置:请确保您的防火墙正确配置,以允许外部访问您的服务器的HTTPS端口(通常为443端口)。检查防火墙规则并确保已配置允许传入和传出的HTTPS流量。 网络地址转换(

    2024年02月07日
    浏览(31)
  • 学习和长跑很类似,长跑可以通过训练提高跑步的速度和时长,那么学习也可以通过训练提高学习的速度和时长吗?

    问题描述:学习和长跑很类似,长跑可以通过训练提高跑步的速度和时长,那么学习也可以通过训练提高学习的速度和时长吗?另外,学习和长跑一样,后半程会出现乏力的现象,但是只要坚持下去,虽然速度慢了下来,但是总归可以冲向终点吗? 问题解答: 首先,就像长

    2024年02月22日
    浏览(35)
  • 小程序可以通过以下几种方式下发消息

    1.模板消息 小程序可以通过模板消息向用户发送通知,例如订单状态更新、活动提醒等。开发者需要先在小程序后台设置好模板消息,并获取到模板消息的模板ID。然后在代码中调用相应的API,将模板消息的内容填充并发送给用户。 以下是一个示例代码,用于发送小程序模板

    2024年02月07日
    浏览(32)
  • 语音识别功能测试:90%问题,可以通过技术解决

    现在市面上的智能电子产品千千万,为了达到人们使用更加方便的目的,很多智能产品都开发了语音识别功能,用来语音唤醒进行交互;另外,各大公司也开发出来了各种智能语音机器人,比如小米公司的“小爱”,百度公司的“小度”,三星公司的“bixby”,苹果的“siri”

    2024年02月03日
    浏览(32)
  • 设备分散怎么办? 可以通过链路层发现协议

    大型网络中,连接清晰是很重要滴。网络越大,逻辑上和物理上都越难理清。再加上还有冗余链路和链路聚合,会大大增加理清网络中设备互连情况的难度。而且,问题还不止于此。混合使用来自不同供应商的网络产品,会让设备发现协议无所适从。 首先,我要讲一个背景故

    2024年02月07日
    浏览(38)
  • Vue3:通过路由写多个页面,通过不同的路径可以进入不同的页面

    Vue3:想通过路由写2个页面,不同的路径可以进入不同的页面 1、创建Vue3项目 通过脚手架创建一个Vue3的项目,然后在此基础上对文件进行增删改,修改成自己需要的项目框架 2、views文件夹 对应 页面文件 如果需要写2个页面,则在views文件夹里面创建2个.vue文件 可以在.vue文件

    2024年02月11日
    浏览(31)
  • 电脑可以通过蓝牙发送文件吗?电脑蓝牙怎么发送文件

    蓝牙(bluetooth)是一种支持设备短距离通信的无线电技术。能在包括移动电话、PDA、无线耳机、笔记本电脑、相关外设等众多设备之间进行无线信息交换。蓝牙技术让数据传输变得更加迅速高效,为无线通信拓宽道路。随着蓝牙技术的发展,其应用领域越来越广泛,那么,

    2024年02月09日
    浏览(51)
  • 制造企业可以通过数字工厂管理系统降低采购成本吗

    制造企业可以通过数字工厂管理系统降低采购成本。制造业数字工厂系统是一种基于数字化技术的管理系统,可以帮助企业实现生产过程的数字化管理,提高生产效率和降低生产成本。下面具体介绍数字工厂管理系统如何降低制造企业的采购成本。   一、优化采购计划 数字

    2024年02月11日
    浏览(34)
  • 超实用:通过文字就可以操纵这款AI表格

    公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。 今天给大家分享超实用的AI表格 ChatExcel ,这个工具是由北大团队在2022年3月开始开发的AI表格处理神器,上传你的表格后,只需要用文字描述你的需求,不需要你懂excel函数,AI就会自动帮你

    2024年02月05日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包