鞍山网站建设鞍山百度推广代理怎么加盟
引论 :
从技术上说,OOP只是涉及抽象数据类型、继承和多态,但是其他议题至少也同样重要,本节将涵盖这些议题。
对象最重要的要素之一便是它们的生成和销毁。对象的数据位于何处?怎样控制对象的生命周期?关于此存在着不同的处理哲学。C++认为效率控制是最重要的议题,所以提供选择给程序员。为了追求最大的执行速度,对象的存储空间和生命周期可以在编写程序时确定,这可以通过将对象置于堆栈(它们有时被称为自动变量(automatic variable)或限域变量(scoped variable))或静态存储区域内来实现。这种方式将存储空间分配和释放置于优先考虑的位置,某些情况下这样控制非常有价值,但是,也牺牲掉了灵活性,因为你必须在编写程序时知道对象确切的数量、生命周期和类型。如果你试图解决更一般化的问题,例如计算机辅助设计、仓库管理或者是空中交通控制,这种方式都显得过于受限了。
第二种方式是在被称为堆(heap)的内存池中动态地创建对象。在这种方式中,你直到运行时刻才知道需要多少对象?它们的生命周期如何?以及它们的具体类型是什么?这些问题的答案只能在程序运行时相关代码被执行到的那一刻才能确定。如果你需要一个新对象,你可以在你需要的时刻直接在堆中创建。因为存储空间是在运行时刻被动态管理的,所以需要大量的时间在堆中分配存储空间,这可能要远远大于在堆栈中创建存储空间的时间。(在堆栈中创建存储空间通常只需要一条将栈顶指针向下移动的汇编指令,另一条汇编指令对应释放存储空间所需的将栈顶指针向上移动。创建堆存储空间的时间以来于存储机制的设计)。动态方式有这样一个逻辑假设:对象趋向于变得复杂,所以查找和释放存储空间的开销不会对对象的创建造成重大冲击。动态方式所带来的更大的灵活性正是解决一般化编程问题的要点所在。
Java完全采用了第二种方式。每当你想要创建新对象时,就要使用new关键字来构建此对象的动态实例。
还有另一个议题,就是对象生命周期。对于允许在堆栈上创建对象的语言,编译器可以确定对象存活的时间有多久,并可以自动销毁它。然而,如果你在堆上创建对象,编译器就会对它的生命周期一无所知。在像C++这类的语言中,你必须通过编程方式来确定何时销毁对象,这可能会因为你不能正确处理而导致内存泄漏(这在C++程序中是常见的问题)。Java提供了被称为“垃圾回收器(garbage collector)”的机制,它可以自动发现对象何时不再被使用,并继而销毁它。垃圾回收器非常有用,因为它减少了你必须考虑的议题和你必须编写的代码。更重要的是,垃圾回收器提供了更高层的保障,可以避免暗藏的内存泄漏问题(这个问题已经使许多C++项目折戟沉沙)。
提问:
为什么要使用 hibernate?
什么是 ORM 框架?
hibernate 中如何在控制台查看打印的 sql 语句?
hibernate 有几种查询方式?
hibernate 实体类可以被定义为 final 吗?
在 hibernate 中使用 Integer 和 int 做映射有什么区别?
hibernate 是如何工作的?
get()和 load()的区别?
说一下 hibernate 的缓存机制?
hibernate 对象有哪些状态?
在 hibernate 中 getCurrentSession 和 openSession 的区别是什么?
hibernate 实体类必须要有无参构造函数吗?为什么?