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

java对象保存时,方法是如何保存的?

发布网友 发布时间:2022-04-27 08:20

我来回答

2个回答

热心网友 时间:2022-06-29 02:31

你是说hibernate的对象持久话?
那个是存进数据库,。

java对象的方法在编译后,就有固定的内存空间,在类被加载到内存(对象没有创建时)就已经在内存了。你说咋保存的,当然是在内存了。

热心网友 时间:2022-06-29 02:32

2.1 用句柄操纵对象
每种编程语言都有自己的数据处理方式。有些时候,程序员必须时刻留意准备处理的是什么类型。您曾利用一些特殊语法直接操作过对象,或处理过一些间接表示的对象吗(C或C++里的指针)?
所有这些在Java里都得到了简化,任何东西都可看作对象。因此,我们可采用一种统一的语法,任何地方均可照搬不误。但要注意,尽管将一切都“看作”对象,但操纵的标识符实际是指向一个对象的“句柄”(Handle)。在其他Java参考书里,还可看到有的人将其称作一个“引用”,甚至一个“指针”。可将这一情形想象成用遥控板(句柄)操纵电视机(对象)。只要握住这个遥控板,就相当于掌握了与电视机连接的通道。但一旦需要“换频道”或者“关小声音”,我们实际操纵的是遥控板(句柄),再由遥控板自己操纵电视机(对象)。如果要在房间里四处走走,并想保持对电视机的控制,那么手上拿着的是遥控板,而非电视机。
此外,即使没有电视机,遥控板亦可独立存在。也就是说,只是由于拥有一个句柄,并不表示必须有一个对象同它连接。所以如果想容纳一个词或句子,可创建一个String句柄:
String s;
但这里创建的只是句柄,并不是对象。若此时向s发送一条消息,就会获得一个错误(运行期)。这是由于s实际并未与任何东西连接(即“没有电视机”)。因此,一种更安全的做法是:创建一个句柄时,记住无论如何都进行初始化:
String s = "asdf";
然而,这里采用的是一种特殊类型:字串可用加引号的文字初始化。通常,必须为对象使用一种更通用的初始化类型。

2.2 所有对象都必须创建
创建句柄时,我们希望它同一个新对象连接。通常用new关键字达到这一目的。new的意思是:“把我变成这些对象的一种新类型”。所以在上面的例子中,可以说:
String s = new String("asdf");
它不仅指出“将我变成一个新字串”,也通过提供一个初始字串,指出了“如何生成这个新字串”。
当然,字串(String)并非唯一的类型。Java配套提供了数量众多的现成类型。对我们来讲,最重要的就是记住能自行创建类型。

2.2.1 保存到什么地方
程序运行时,我们最好对数据保存到什么地方做到心中有数。特别要注意的是内存的分配。有六个地方都可以保存数据:
(1) 寄存器。这是最快的保存区域,因为它位于和其他所有保存方式不同的地方:处理器内部。然而,寄存器的数量十分有限,所以寄存器是根据需要由编译器分配。我们对此没有直接的控制权,也不可能在自己的程序里找到寄存器存在的任何踪迹。
(2) 堆栈。驻留于常规RAM(随机访问存储器)区域,但可通过它的“堆栈指针”获得处理的直接支持。堆栈指针若向下移,会创建新的内存;若向上移,则会释放那些内存。这是一种特别快、特别有效的数据保存方式,仅次于寄存器。创建程序时,Java编译器必须准确地知道堆栈内保存的所有数据的“长度”以及“存在时间”。这是由于它必须生成相应的代码,以便向上和向下移动指针。这一*无疑影响了程序的灵活性,所以尽管有些Java数据要保存在堆栈里——特别是对象句柄,但Java对象并不放到其中。
(3) 堆。一种常规用途的内存池(也在RAM区域),其中保存了Java对象。和堆栈不同,“内存堆”或“堆”(Heap)最吸引人的地方在于编译器不必知道要从堆里分配多少存储空间,也不必知道存储的数据要在堆里停留多长的时间。因此,用堆保存数据时会得到更大的灵活性。要求创建一个对象时,只需用new命令编制相关的代码即可。执行这些代码时,会在堆里自动进行数据的保存。当然,为达到这种灵活性,必然会付出一定的代价:在堆里分配存储空间时会花掉更长的时间!
(4) 静态存储。这儿的“静态”(Static)是指“位于固定位置”(尽管也在RAM里)。程序运行期间,静态存储的数据将随时等候调用。可用static关键字指出一个对象的特定元素是静态的。但Java对象本身永远都不会置入静态存储空间。
(5) 常数存储。常数值通常直接置于程序代码内部。这样做是安全的,因为它们永远都不会改变。有的常数需要严格地保护,所以可考虑将它们置入只读存储器(ROM)。
(6) 非RAM存储。若数据完全独立于一个程序之外,则程序不运行时仍可存在,并在程序的控制范围之外。其中两个最主要的例子便是“流式对象”和“固定对象”。对于流式对象,对象会变成字节流,通常会发给另一台机器。而对于固定对象,对象保存在磁盘中。即使程序中止运行,它们仍可保持自己的状态不变。对于这些类型的数据存储,一个特别有用的技巧就是它们能存在于其他媒体中。一旦需要,甚至能将它们恢复成普通的、基于RAM的对象。Java 1.1提供了对Lightweight persistence的支持。未来的版本甚至可能提供更完整的方案。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
赵玉平名家论坛 赵玉平人物经历 杭州市汽车西站 现在能提前几天售票啊? 请问杭州西站汽车票可以提前几天买? 杭州汽车西站在节假日的时候需要提前买票的吗 散步有助于减肥吗 魑瑟忝箜莫尘读什么 端午送什么 端午节家里要摆放什么东西 龙舟是如何制作的? 如何存储自定义对象 浙江师范大学教育史专业是获得什么类型的学位证 近代教育史,形式教育论和 近代被誉为教育史上的哥白尼的教育家是谁 教育史有哪些研究方向 教育学发展史上的标志性事件是什么? 教育史成为一门独立的教育科目是什么时候? 高等教育学和教育学考研书目一样吗? 研究生教育史专业怎么样??? 校史有什么重要意义 高等教育学考研,需要看哪些必要的书?包括高等教育学,高等教育管理学,中外教育史,比较教育这几个方面 论述蔡元培大学教育思想及在中国近现代教育史的地位 校史的追溯高校校史起源的标准 在我国高等教育历史上思想辉煌的时期都是私学为什么 中国教育简史 1922年学制高等教育领域有哪些创新 试析高等教育概念的历史演变 中国的高等教育发展史是非常丰富的,你了解的有哪些? 砖墙拆除时该怎么做?要注意什么 家装对墙体拆除及开槽有什么规定 内墙面拆除施工方案,内墙面拆除注意事项 北大青鸟职业学校怎么样? 厦门北大青鸟职业技术学校就业怎么样?出来能找到工作吗 java如何将许多对象存储在一个更大概念的对象里面 北大青鸟职业技术学校简介? 北大青鸟是公立学校还是私立??? 北大青鸟属于职业技术学院吗? 北大青鸟职业技术学校怎么样? 长沙北大青鸟学校简介 北大青鸟职业技术学院简介,北大青鸟华腾学院地址在哪呢?听朋友说不错,想去看看...... 两个手机直播,要怎么连接声卡 北大青鸟学校学费多少?环境咋样? 北大青鸟是干什么的? 客所思FX3手机直播声卡用来做双手机直播的时候,怎么连线? 长沙北大青鸟是干什么的? 北大青鸟中等职业技术学校都有什么专业 有哪位朋友知道双手机直播伴奏手机是怎么弄出同步伴奏? 成都北大青鸟职业技术学校主要有那些专业? 北大青鸟属于什么学校 青鸟IT职业教育到底怎么样? 怎么锻炼才能提高精子质量?