问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

java反射机制可以调用到私有方法,是不是就破坏了JAVA的卦装性呢。

发布网友 发布时间:2022-04-14 18:26

我来回答

7个回答

热心网友 时间:2022-04-14 19:55

这是一个很值得探讨的问题,许多人接触反射时,对反射功能之强大都会抱有怀疑,感觉严重破坏了封装的性质。可是,什么是封装,什么是安全呢?
封装,是将具体的实现细节隐藏,而把功能作为整体提供给类的外部使用,也就是说,公有方法能够完成类所具有的功能。当别人使用这个类时,如果通过反射直接调用私有方法,可能根本实现不了类的功能,甚至可能会出错,因此通过反射调用私有方法可以说是没有任何用处的,开发人员没有必要故意去破坏封装好的类。从这点上看,封装性并没有被破坏。
所谓安全,如果意思是保护实现源码不被别人看见,那没有作用。不用反射也能轻易获取源码。
所以我以为反射机制只是提供了一种强大的功能,使得开发者能在封装之外,按照特定的需要实现一些功能。就好比核技术,虽然造核弹很危险吧,但造核电站还是很有用处的(这个比喻似乎不是很恰当,将就将就)。

曾经给朋友讨论过这个问题,感觉解释得不是很清楚,大家一起探讨探讨,看看怎样表述才能更容易理解:)追问的确,不过,你说的我倒是有一点明白了。谢谢啊,再看看。。。。。

追答简单来说,就是封装不是封闭,类对于开发者来说还是开放的。一般情况下,只要类功能完好,开发者没必要故意去破坏封装性。当然也不排除会有不怀好意的情况。

热心网友 时间:2022-04-14 21:13

先不谈安全不安全,了解一下概念
JAVA语言中的反射机制:
在Java 运行时 环境中,对于任意一个类,能否知道这个类有哪些属性和方法?
对于任意一个对象,能否调用他的方法?这些答案是肯定的,这种动态获取类的信息,以及动态调用类的方法的功能来源于JAVA的反射。从而使java具有动态语言的特性。

JAVA反射机制主要提供了以下功能:
1.在运行时判断任意一个对象所属的类
2.在运行时构造任意一个类的对象
3.在运行时判断任意一个类所具有的成员变量和方法(通过反射甚至可以调用private方法)
4.在运行时调用任意一个对象的方法(*****注意:前提都是在运行时,而不是在编译时)

java的封装性
类的封装既是不能让外面的类随意的修改一个类的成员变量;
在定义一个类的成员(包括变量和方法),使用private关键字讲明了成员的访问权限,只能这个类的其他成员方法调用,而不被其他类中的方法所调用;
为了实现封装性,常将类的成员变量声明为private,再通过public的方法对这个变量进行访问。对一个变量的操作,一般都有读取和赋值操作(getXXX和setXX);
一个类就是一个模块,我们应该养模块仅仅公开必要让外界知道的内容,而隐藏其他的一切内容。再进行程序设计的时,应尽量避免一个模块直接修改或操作另一个模块的数据,模块设计追求“强内聚(许多功能尽量在类的内部独立完成,不让外面干预),弱耦合(提供外部尽量少的方法调用)”。
封装应该是一种思路、思想
却不是强制的手段
毕竟java虚拟机需要通过某些手段去获悉类的内部结构和实现
通过概念的理解,不难看出,封装也绝非完全封装,凡是都是相对的。自然安全也就是相对比较安全。

热心网友 时间:2022-04-14 22:48

getDeclaredMethod(name, parameterTypes)使用这个方法获取方法,好好看看API,getMethod只能获取public的方法!

热心网友 时间:2022-04-15 00:39

我理解的这两者不是同一层次的问题。反射可以调用私有方法,那也是因为这个机制把那个类给弄出来一个对象,这个对象调用的自己的私有方法,很正常啊。该私有方法仍在封装,别的对象也还是不能直接执行此方法。对吧
而且反射只是一种生成实例的办法。与封装没什么关系。
我的肤浅理解,见笑。

热心网友 时间:2022-04-15 02:47

Java语言是一个严谨的编程语言,语言本身是静态的。为了能让语言具有动态编程的特性,必须要有反射机制。而反射机制本身就是底层的处理,不可能按表层的封转特性来处理。也就是说不给调用私有方法的能力,很多程序受到局限,那么实现起来就麻烦了。
以上说的,有肯能你没明白。举一个生活的例子,你家的电视机是要由外壳的,目的是不让普通人接触到电视中的电路。那么Java语言的基本面向对象特征正是这个层次的应用。也就是对于普通程序员的程序,是通过遥控器来操作电视的。但是,如果你是一个专业的电工的话,那么可以打开电视机的后盖,调整电视中的电路和结构,甚至如果是电工的话,那么调台可能都不使用遥控器,而是通过调整内部电路的电阻的阻值来实现。Java中的反射机制正是提供更高要求的编程来使用的,不需要考虑基本面向对象的特征,而是要考虑能否得到和控制代码中的一切,这样反射机制编程才有意义。

热心网友 时间:2022-04-15 05:12

2者没关系,不必矫情。

热心网友 时间:2022-04-15 07:53

期待高手解答 反射我只是用他来做框架 ,很爽的。。 你可以试试
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
读一读下面的句子,在比喻句的后面打上 “√”。 1.燕子有一对剪刀似... 判断下面的句子是不是比喻句,是的打√不是的打×1.北极星是盏指路灯... 我来评判:在是比喻句的句子后面打“√”。1.罗丹嘴里叽里咕噜的,好像跟... 判断下列句子是不是比喻句,是的就打“√”。 1.他摸了摸嘴,好像回味似... 我能判断下面的句子是否是比喻句,在正确句子后面的括号里画“√... 判断下面句子是不是比喻句,是的画“√”,不是的画“×”。(1)那跃跃... 英语题(会的都来哈~要全部回答哦~绝对会采纳!!) 英语题 诚心采纳。 英语题(大家帮帮忙,会采纳哦!) 初二英语下,几个空,求解 诚信采纳 红米note4x蓝牙为什么发送不了照片? 红米怎么用蓝牙传文件 怎么改名 红米note4x蓝牙怎么传东西? 最高人民法院关于拍卖变卖的规定 变卖还需要法院委托拍卖公司吗?,变卖与拍卖有什么区别 佛山南海人,女,以个体户身份买社保,今年11月满50岁退休年龄,按照*,今年可以办理退休手续吗 变卖和拍卖,还有折价,三者是什么意思,怎么区分的? 佛山个体户老板过了50岁不能买社保,那请的员工能不能买社保 电视盒子什么视频软件,资源最多! 佛山市个体户社保可以积分吗? 今年急于在佛山购房,但规定需要买满一年的社保,我又是个体户,没有单位帮我买社保,这要怎么办 出售、变卖,有什么不同? 佛山南海个体工商户怎样取消员工社保 在佛山个体户可以买社保吗 佛山个体户限购区买房需要社保吗? 拍卖好还是等变卖好 苍之彼方的四重奏第八集百度云资源 佛山个体户社保购房 在成都转行做ui设计师零基础要学多久? 如何改自己的微信原始 能改的微信昵称 名字如何改 求入团申请书范文 急!!!第一批入团申请书,初中的,谢谢各位 请告诉我入团申请书怎么写,拜托了! 如何写入团申请书,格式,请帮写一篇 有没有完整的入团申请书 怎么改名 如何改自己的微信原始 能改的微信昵称 名字如何改 煮羊肉的配方是什么? 捡到了一部苹果手机,刷机ID锁死了,说换个主板可以解决,是真的吗?苹果Xs max主板大概多少钱 请问农药敌杀死能杀死臭虫吗 高效氯氰菊酯能有效杀死臭虫吗? 我有两部iPhone有一部iPhone无法激活ID被锁把我另一部iPhone的主板换上去可以吗? 长头发英文怎么说 苹果的id锁住了,换了主板可以吗 长头发的英文怎么写?