首页
学习
活动
专区
圈层
工具
发布

java反射详解与反射是否会破坏类的封装性见解

问题:反射是否会破坏类的封装性见解        首先,封装,是将具体的实现细节隐藏,而把功能作为整体提供给类的外部使用,也就是说,公有方法能够完成类所具有的功能。...当别人使用这个类时,如果通过反射直接调用私有方法,可能根本实现不了类的功能,甚至可能会出错,因此通过反射调用私有方法可以说是没有任何用处的,开发人员没有必要故意去破坏封装好的类。...从这点上看,封装性并没有被破坏。...(摘自百度问答)     个人的见解:反射确实可以得到一切 类中的东西(包括私有的属性、方法等),但是或许不算是破坏封装,私有方法是为了让继承的类无法使用,避免调用那些被设为私有的方法出现一些不必要的错误...对于是否破坏了封装性,也欢迎大家评论区说明自己的观点。

2.4K30
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    java反射详解【转】与 反射是否会破坏类的封装性见解

    问题:反射是否会破坏类的封装性见解        首先,封装,是将具体的实现细节隐藏,而把功能作为整体提供给类的外部使用,也就是说,公有方法能够完成类所具有的功能。...当别人使用这个类时,如果通过反射直接调用私有方法,可能根本实现不了类的功能,甚至可能会出错,因此通过反射调用私有方法可以说是没有任何用处的,开发人员没有必要故意去破坏封装好的类。...从这点上看,封装性并没有被破坏。...(摘自百度问答)     个人的见解:反射确实可以得到一切 类中的东西(包括私有的属性、方法等),但是或许不算是破坏封装,私有方法是为了让继承的类无法使用,避免调用那些被设为私有的方法出现一些不必要的错误...对于是否破坏了封装性,也欢迎大家评论区说明自己的观点。

    78950

    C++11 JNI开发中RAII的应用(一)--制作基础工具

    我的确要在native code中频繁创建对象,创建array of object ,还可能会调用java对象中的方法返回的也是java object,。。。。...于是我想到了我之前写的RAII类(参见我之前的博客《C++11实现模板化(通用化)RAII机制》),我的基本思路有了: 将每个java对象的local reference用我之前写的raii_var类封装成一个...操作符使用了函数模板实现,用到了is_pointer和is_class两个type_trait来判断T的类型, //如果T不是指针,也不是class/struct,则没有->操作符实现 同样为了方便调用,还增加了支持类型转换的模板函数...//这里用到了is_same来判断模板参数类型是否相同。其实这里应该写得更严谨一些,不仅要判断_T是class,还要判断T也是class,而且T和_T是继承关系,暂时这么写了,以后再改。...... ); auto env=getJNIEnv(); auto exec=env->ExceptionOccurred();//判断是否有

    48610

    释放堆内存,Rust是怎么做的?所有权!

    不能直接操作堆的语言,这类语言通常带有GC垃圾自动回收器,性能会受一定影响,但是开发效率高,多用于业务编程,代表语言:Java,Python。...; } 堆管理方法三:所有权 Rust作为静态编译型语言,显然没有运行期虚拟机的夹持,那么想要做到内存安全,就得从两个方面下手: 自动化内存管理; 把内存安全检查提前到编译期; 做到第一点并不难,其实RAII...RAII的思想是:资源的有效期与持有资源的对象的生命期严格绑定,即由对象的构造函数完成资源的分配,同时由析构函数完成资源的释放。在这种要求下,只要对象能正确的析构,就不会出现资源泄露问题。...C++应用RAII是以模式(Pattern),或者最佳实践这种松散方式来实现的。Rust要想做到第二点,就需要把这种思想集成进语言本身,让编译器能看得懂。... 和Java一样,只需要一行代码就完成了在堆上的内存申请。但Rust做得更多——在离开作用域的同时,确定性的销毁了堆上的内存,而完全不需要一个拖泥带水的GC。 可谓干净利落,身手不凡。

    1.8K30

    C++11 JNI开发中RAII的应用(三)--JavaClassMirror

    以下是我以前写的将一个C++对象转成java对象的函数toJCodeBean。...对是一个java class,这都是常量啊,为什么不可以一开始把这些值都记下来,每次使用时直接取这个值就行了?...于是,在前面《C++11 JNI开发中RAII的应用(一)–制作基础工具》和《C++11 JNI开发中RAII的应用(二)–JNI函数封装》两节的基础之上,我决定做一个JavaClassMirror类记录一个类的这些常量.../* java类与C++类的镜像,便于操作java对象 */ class JavaClassMirror{ public: /* raii_var类变量,java class 的全局引用,JavaClassMirror...; /* 方法名与jfieldID的映射,可以通过方法名查找到对应的jfieldID,不支持重载的多个方法*/ unordered_map field;

    34120

    重温C++的设计思想

    一、内存管理(RAII) 内存管理分为堆、栈和RAII(Resource Acquisition Is Initialization)。...除了C,还有几个语言D、Ada和RAII少数派语言也采用RAII RAII依托栈和析构函数,对包括堆内存的资源进行管理,所以不需要GC垃圾回收。...也就是说不管是否发生了异常,析构函数都会得到执行。...局限性在现代处理器架构上是绝对有优势,缺点是复制对象的开销大大增加,所以C++需要移动语义,而Java里根本没有。...对象支持移动需要下列几步: 对象有拷贝构造和移动构造(除非你只需要像unique_ptr只打算支持移动,不支持拷贝) 对象有swap成员函数 对象命名空间里,有一个全局的swap函数swap(T&lhs

    1.8K247

    RAII概念与在Python中的应用

    RAII 概念与在 Python 中的应用 RAII(Resource Acquisition Is Initialization),即资源获取即初始化,是一种设计模式,用于解决资源的获取与初始化的问题...这个例子告诉我们在处理一些资源时,需要注意在操作过程中是否会发生一些意外情况,例如抛出异常,并且在意外情况发生后,也需要关闭资源。...为了更好地处理类似的资源管理问题,Python2.5 引入了with语句,做到无论语句块中的代码执行是否抛出异常,都可以在退出with语句块时执行清零代码。...实际上最理想的方式是在文件对象被清理的时候自动关闭文件,然而像 Python、Java 这些有自动管理内存的垃圾回收机制的语言中,一般不会手动控制对象的回收,也就无法保证文件关闭的时机符合预期。...一般带 GC 的语言会有自己的 RAII 模式的实现机制,例如 Python 中的with语句和 Java 中的try with语句。

    88610

    内存管理之堆、栈、RAII

    有少量其他语言,如 D、Ada 和 Rust 也采纳了 RAII,但主流的编程语言中, C++是唯一一个依赖 RAII 来做资源管理的。...原理:RAII 依托栈和析构函数,来对所有的资源——包括堆内存在内——进行管理。 对 RAII 的 使用,使得 C++ 不需要类似于 Java 那样的垃圾收集方法,也能有效地对内存进行管理。...如果内存管理器支持垃圾收集的话,分配内存的操作可能会出触发垃圾收集。 第二,释放内存不只是简单地把内存标记为未使用。...在 C++ 里,所有的变量缺省都是值语义——如果不使用 * 和 & 的话,变量不会像 Java 或Python 一样引用一个堆上的对象。...2.3 RAII C++ 支持将对象存储在栈上面。但是,在很多情况下,对象不能,或不应该,存储在栈 上。

    1.1K30

    C++惯用法之消除垃圾收集器-资源获取即初始化方法(RAII)

    C++惯用法之消除垃圾收集器-资源获取即初始化方法(RAII) 0.导语 在C语言中,有三种类型的内存分配:静态、自动和动态。...一方面出错,内存泄漏,另一方面出错,你已经破坏了正在讨论的数据结构和其他可能的数据结构,因为它们试图取消引用现在不再有效的指针。 2.“使用垃圾收集器,flyboy!” 垃圾收集器不是一项新技术。...但是,1990年代代表了该技术的真正发芽:在1990年至2000年之间,发布了多种语言,所有语言都使用一种或另一种垃圾回收:Haskell,Python,Lua,Java,JavaScript,Ruby...来自C ++标准库的使用RAII的示例为std :: string和std :: vector。...最后,RAII总结如下: 资源在析构函数中被释放 该类的实例是堆栈分配的 资源是在构造函数中获取的。 RAII代表“资源获取是初始化”。

    97520

    多线程同步机制:深入解析互斥锁的原理与实践

    1.1 数据竞争定义:当多个线程同时访问和修改共享变量时,最终结果取决于线程的执行顺序,这种不确定性导致的错误称为数据竞争。示例:假设两个线程同时对一个共享变量进行自增操作,初始值为0。...与阻塞状态不同,等待状态的线程通常会定期检查条件是否满足。3.4 状态转换流程图图的解释线程运行:线程正在执行代码。是否尝试获取锁:线程决定是否尝试获取互斥锁。如果是,检查锁是否可用。...是否被唤醒:检查线程是否被唤醒。如果是,进入运行状态。如果否,继续阻塞。4. C++ 中的 std::mutexstd::mutex 是 C++ 标准库中对互斥锁的封装。...sharedStaticVar: " RAII...std::lock_guard 是一个 RAII 类,用于自动管理锁的获取和释放,确保线程安全。通过本文的详细解释和可视化的流程图,希望读者能够更好地理解和应用多线程同步机制。

    32310

    技术总结|Rust和Zig应该怎么选?

    但现实存储近乎拜占庭式不可靠:磁盘可能返回错误数据却不报错,而一次这样的错误就能破坏共识。TigerBeetle 通过以下方式解决这个问题:允许副本使用其他副本的数据修复本地存储。...工程层面,我们构建的是可靠且可预测的系统,「可预测」意味着真正的确定性:不是限制非确定性因素,而是从零开始用完全确定的手工组件构建整个系统。...引用 Bryan Cantrill 的话很贴切: 「我能写出正确释放内存、避免内存破坏的 C 代码...因为我完全掌控软件的天地。...我注意到许多用「用 defer 替代 RAII」风格编写的 Zig 代码存在资源管理缺陷。...我不确定「可移植汇编」是否真实存在——可以创建很少优化且「通常符合预期」的编译器,但准确定义其行为似乎不可能。一旦深入探究指针和内存的本质,就会陷入「字节可能成为毒药」的复杂领域。

    40500

    【重学C++】01| C++ 如何进行内存资源管理?

    与java、golang等自带垃圾回收机制的语言不同,C++并不会自动回收内存。我们必须手动管理堆上内存分配和释放,这往往会导致内存泄漏和内存溢出等问题。...按照变量是否被初始化。数据段可分为已初始化数据段和未初始化数据段。栈C++中函数调用以及函数内的局部变量的使用,都是通过栈这个内存分区实现的。...RAII想在堆上创建对象,又不想处理这么复杂的内存释放操作。...C++没有像java、golang其他语言创建一套垃圾回收机制,而是采用了一种特有的资源管理方式 --- RAII(Resource Acquisition Is Initialization,资源获取即初始化...在实际开发中,RAII的应用很广。不仅仅用于自动释放内存。还可以用来关闭文件、释放数据库连接、释放同步锁等。总结本文介绍了C++中的内存管理机制,包括内存分区、栈、堆和RAII技术等内容。

    29500

    C++11 GC Interface:从入门到精通

    而垃圾收集的支持和基于可达性的泄漏检测也是其中的一部分尝试。...这增加了开发者的工作量,但也使得程序的性能得到了提升,并且减少了由于垃圾收集机制带来的不确定性。6.2 应对策略使用智能指针:智能指针是一种自动管理内存的工具,它可以在对象不再被使用时自动释放内存。...std::make\_unique();// 当ptr离开作用域时,对象的内存将被自动释放}int main() {testSmartPointers();return 0;}遵循RAII...原则:RAII(Resource Acquisition Is Initialization)是一种C++编程原则,即资源获取即初始化。...开发者在使用C++时,应该根据具体的应用场景和需求,选择合适的内存管理技术和工具,如智能指针和RAII原则,来确保程序的性能和可靠性。

    8900

    无锁编程:c++11基于atomic实现共享读写锁(写优先)

    初始为0的线程id */ static const std::thread::id NULL_THEAD; const bool WRITE_FIRST; /* 用于判断当前是否是写线程...对象,自动完成加锁和解锁管理 raii read_guard()const noexcept{ return make_raii(*this,&RWLock::readUnlock...,&RWLock::readLock); } // 将写入锁的申请和释放动作封装为raii对象,自动完成加锁和解锁管理 raii write_guard()noexcept{...类模板中派生出来的类,对应不同的数据类型 atomic是c++11标准,在gcc编译的时候必须加入std=c++11选项才能正确编译,,vs编译至少要用vs2012,因为visual studio 2012以上才支持...说明4 read_guard,write_guard函数返回的raii类参见我的另一篇博客《C++11实现模板化(通用化)RAII机制》

    2K20
    领券