java中object 赋值[]赋值问题?

java中Object对象String对象的解析_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
java中Object对象String对象的解析
&&主要对java中object对象和String对象进行解析。。。。
包括了String Pool
创建String 时是在内存中的java栈还是堆
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢JAVA中销毁一个对象的方法 - 我思故我在 - ITeye博客
博客分类:
方法一:垃圾回收器
垃圾回收器是Java平台中用的最频繁的一种对象销毁方法。垃圾回收器会全程侦测Java应用程序的运行情况。当反先有些对象成为垃圾时,垃圾回收
器就会销毁这些对象,并释放这些对象所占用的内存空间。在这里,程序开发人员需要知道,在哪些情况下垃圾回收器会认为这些对象是垃圾对象。通常情况下,如
果发生以下两种情况时,系统会认为这些对象是垃圾对象,需要销毁。
一是将一个NULL值赋值给对象。如用户先建立了一个对象str1。对象用完了之后,再利用赋值语句,将NULL值赋值给这个对象str1,即使用
str1=NULL的方式将NULL值赋值给这个对象。此时这个对象与内存中对象的存储地址之间就失去了联系。此时内存中的对象就好像成为了一个无主的对
象,就会被垃圾回收器销毁。不过这也有例外。如现在同一个对象有两个名字,分别为str1与str2。此时若只是将NULL值赋值给str1,那么内存的
这个对象仍然有一个主人,即str2。此时这个对象还暂时不会被垃圾回收器回收。除非在代码中讲这个对象所关联的所有对象名字都赋值为NULL。此时这个
对象才变为无主的对象,才会被垃圾回收器回收。在Java中定义自己的工具库
二是对象其超出了作用范围,这个这个对象就被认为是垃圾对象,被被垃圾回收器回收并释放内存。其实对象跟变量一样,其也有作用域。当超过这个作用域
的话,跟变量一样,这个对象也就无效了,其他地方不能够再引用这个对象。此时这个对象就是名存实亡了。为此垃圾回收器也把这种超过作用范围的对象当作垃圾
对象来处理。所以说,如果程序员要让对象中的某些成员变量或者成员方法一直有效的话,就需要采用static关键字,让其在变量销毁时仍然有效,或则仍然
可以调用这些成员变量与成员方法。
方法二:finalize方法
虽然说垃圾回收器已经是一个比较完善的对象销毁机制,但是其并不能够解决Java语言中所有对象的销毁问题。如Java语言平台中,创建对象主要有
两种方式,分别为利用NEW关键字来创建(这是对象创建的主要方式)与不适利用NEW关键字来创建。如果Java语言中某些对象不是利用new关键字为对
象在内存中分配一块存储区域,那么这种类型的对象就不能够被垃圾回收站回收。即使在代码中将NULL值赋值给这个对象,仍然不能够被垃圾回收器回收。虽然
这种对象比较少,但是毕竟存在。为了解决这类对象的回收与内存释放问题,在Java语言中提供了一个finalize的方法。通过这个方法可以显示的让系
统回收这个对象。这是一个Object类的方法。通常情况下,这个方法是被声明为protected。程序开发人员在必要的时候,可以在自定的类中定义这
个方法。假设现在程序开发人员定义了这个方法,那么在对象销毁时,垃圾回收器会先采用这个方法来销毁对象。并且在下一次垃圾回收动作发生时,最终释放对象
可见,采用了finalize
方法,虽然可以让这个对象被垃圾回收器回收,但是其原理是不同的。垃圾回收器是先调用这个方法,然后在下次运行这个垃圾回收作业时再释放其占用的内存。另
外需要注意的是,这个方法并不一定会保证发生。也就是说,相对来讲,其安全性并没有垃圾回收器那么的高。故在实际创建对象时,最好还是采用new关键字来
创建比较安全,也更加的方便。因为在利用New关键字来创建对象时,在代码中不需要加入另外额外的代码。所以从安全性与便利性上来说,笔者都建议采用
new方法为对象在内存中分配存储区域,而不建议采用其他的方式。在采用垃圾回收器的时候,其会自动检测对象的状态,而不需要程序员告知。其发现对象超出
了作业域范围或者对象被重置为空时,其就会被自动销毁并释放对象所占用的内存,这种方式处理起来相对来说更加的安全与便利。
方法三:利用System.gc方法强制启动垃圾回收器
垃圾回收器其实自动启动的。也就是说,垃圾回收机制起会自动监测垃圾对象,并在适当的时候启动垃圾回收器来销毁对象,释放内存。但是这个垃圾回收器
也会有不合作的时候。也就是说,这个垃圾回收器不受程序代码的控制,其具体执行的时间也会不确定,从而导致上面的finalize方法无法执行,某些对象
无法及时销毁。为此有时候需要利用代码来强制启动垃圾回收器,来销毁对象。
笔者平时在给一些学员培训时,往往将这个垃圾回收器比喻成医院里的护士。平时的时候,护士会每隔一段时间来进行查房,看看病人有没有什么问题。不过
在必要的时候,病人也可以通过警铃来呼叫护士。如当盐水挂完了就可以要求护士来更换盐水。其实这个护士定期查房就好像是垃圾回收器会根据应用程序的运行情
况来定时的或者不定时的启动。而这个警铃就好像是这个System.go方法。在有需要的时候,程序开发人员可以在代码中调用这个方法,来强制让护士来病
房,即强制启动这个垃圾回收器。采用这个方法,给程序开发人员多了一种主动权,而不需要被动的等着垃圾回收器的启用。有时候,在代码种类利用这个方法不定
期或者定期的强制启动垃圾回收器,对及时销毁垃圾对象能够起到一个辅助与保障作用。
浏览 12619
浏览: 352622 次
来自: 杭州
不好意思,请问这确定是回调机制吗。你的例子中只是将接口的实现类 ...
写的真乱啊,完全不知所云...
junia_1 写道
shock: ...2012年7月 Java大版内专家分月排行榜第三2011年11月 Java大版内专家分月排行榜第三2007年12月 Java大版内专家分月排行榜第三2007年10月 Java大版内专家分月排行榜第三
2011年1月 Java大版内专家分月排行榜第二
2012年7月 Java大版内专家分月排行榜第三2011年11月 Java大版内专家分月排行榜第三2007年12月 Java大版内专家分月排行榜第三2007年10月 Java大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。求助,如何将一个对象赋值给另一个对象【java吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:635,745贴子:
求助,如何将一个对象赋值给另一个对象收藏
有两个对象,值是一一对应的,怎么将一个对象的值赋值给另一个对象,不要用先get再set的方法...
java-亚马逊819店庆,一站购全球,全品类齐放价,钜惠就在眼前!亚马逊819店庆,正品低价,送货上门,货到付款!
那只能Object.clone了
看不懂楼主的意思,你是说对象里面的值吗?
老老实实get set
我朋友说自学真的很累,坚持了一段时间,还是到杭州下沙的北大青鸟培训了。
比如原有对象object1;object2 = new Object(object1);object3 = new Object(object1);
登录百度帐号推荐应用import java.io.*;
class CCircle{
&private static double pi = 3.1415;
&public CCircle(double r) &{ &
&public void show() &{ &
&System.out.println("Area is "+pi*radius*radius);
&public void SetRadius(double r) &
&&radius =
&public boolean compare(CCircle c2)
if(this.radius == c2.radius) &
&public double GetRadius()
public class HelloWorld{
&public static void main(String args[])
CCircle cirl1,cirl2; &
&cirl1 = new CCircle(1.0); &&
System.out.println(cirl1.GetRadius());
&& &&cirl2 = cirl1;
&&System.out.println(cirl2.GetRadius());
&& &&cirl2.SetRadius(3.0);
&&System.out.println(cirl2.GetRadius());
&&System.out.println(cirl2.GetRadius());
&&System.out.pare(cirl2));
最后结果显示,两个对象是相等的。 CCircle cirl1,cirl2; cirl1 = new CCircle(1.0); cirl2 = cirl1; cirl2.SetRadius(3.0); 表达式: A a1 = new A(); 它代表A是类,a1是引用,a1不是对象,new A()才是对象,a1引用指向new A()这个对象。
在JAVA里,&=&不能被看成是一个赋值语句,它不是在把一个对象赋给另外一个对象,它的执行过程实质上是将右边对象的地址传给了左边的引用,使得左边的引用指向了右边的对象。JAVA表面上看起来没有指针,但它的引用其实质就是一个指针,引用里面存放的并不是对象,而是该对象的地址,使得该引用指向了对象。在JAVA里,&=&语句不应该被翻译成赋值语句,因为它所执行的确实不是一个赋值的过程,而是一个传地址的过程,被译成赋值语句会造成很多误解,译得不准确。
再如: A a2; 它代表A是类,a2是引用,a2不是对象,a2所指向的对象为空
再如: a2 = a1; 【它代表,a2是引用,a1也是引用,a1所指向的对象的地址传给了a2(传址),使得a2和a1指向了同一对象。】
综上所述,可以简单的记为,在初始化时,&=&语句左边的是引用,右边new出来的是对象。 在后面的左右都是引用的&=&语句时,左右的引用同时指向了右边引用所指向的对象。
再所谓实例,其实就是对象的同义词。
阅读(...) 评论()

我要回帖

更多关于 js中object赋值的方法 的文章

 

随机推荐