﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-dreaming here-随笔分类-JAVA基础</title><link>http://www.blogjava.net/yanzizyy/category/37444.html</link><description>学习技能的过程本身也是一种快乐</description><language>zh-cn</language><lastBuildDate>Wed, 04 Feb 2009 13:31:13 GMT</lastBuildDate><pubDate>Wed, 04 Feb 2009 13:31:13 GMT</pubDate><ttl>60</ttl><item><title>如果java类里的成员变量是自身的对象？</title><link>http://www.blogjava.net/yanzizyy/archive/2009/02/04/253312.html</link><dc:creator>dreaming here</dc:creator><author>dreaming here</author><pubDate>Wed, 04 Feb 2009 12:46:00 GMT</pubDate><guid>http://www.blogjava.net/yanzizyy/archive/2009/02/04/253312.html</guid><wfw:comment>http://www.blogjava.net/yanzizyy/comments/253312.html</wfw:comment><comments>http://www.blogjava.net/yanzizyy/archive/2009/02/04/253312.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yanzizyy/comments/commentRss/253312.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanzizyy/services/trackbacks/253312.html</trackback:ping><description><![CDATA[<strong>问题：</strong><br />
如果java类里的成员变量是自身的对象，则新建该类对象时内存中怎么分配空间，我感觉好像死循环了。 <br />
不过我想的肯定是错的，因为很多类的成员变量是自身对象，举个例子： <br />
Class A{ <br />
&nbsp; &nbsp; &nbsp; &nbsp; private String b ="Hello"; <br />
&nbsp; &nbsp; &nbsp; &nbsp; private A a = new A(); <br />
} <br />
<br />
Class B{ <br />
<br />
&nbsp; &nbsp; public static void main(){ <br />
&nbsp; &nbsp; &nbsp; &nbsp; A p = new A(); <br />
} <br />
<br />
} <br />
在程序执行中，要new一个A类型的对象p，这时为对象p开辟内存空间，其中一部分存放字符串b Hello，另一部分存放对象a，可是我感觉a是一个对象，应该再开辟一块空间存放a这个对象，可是应该在里面放什么呢？一个是hello，另一个又是A类的对象？<br />
<br />
<strong>搜到的答案：<br />
</strong>你的程序运行的时候会产生一个栈溢出错误的异常 <br />
Exception in thread "main" java.lang.StackOverflowError <br />
你的思路是对的，但是，在main方法中创一个A对象，而A对象在初始化自己成员的时候，又会创另一个A对象，从而造成死循环，最终导至内存溢出。 <br />
你的A类如下： <br />
Class A{ <br />
&nbsp; &nbsp; &nbsp; &nbsp; private String b ="Hello"; <br />
&nbsp; &nbsp; &nbsp; &nbsp; private A a = new A(); <br />
} <br />
通常程序不会像你这样写，而是 <br />
Class A{ <br />
&nbsp; &nbsp; &nbsp; &nbsp; private String b ="Hello"; <br />
&nbsp; &nbsp; &nbsp; &nbsp; private A a;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //= new A(); <br />
&nbsp; &nbsp; &nbsp; &nbsp; public anymothod(...){ <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; //在某条件满足时 <br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a=new A(); <br />
&nbsp; &nbsp; &nbsp; &nbsp; } <br />
} <br />
也就是说类是自身成员的时候，通常不能初始化，而仅仅是一个定义，在满足某些条件的时候，才去初始化，否则必然导至内存溢出。
<img src ="http://www.blogjava.net/yanzizyy/aggbug/253312.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanzizyy/" target="_blank">dreaming here</a> 2009-02-04 20:46 <a href="http://www.blogjava.net/yanzizyy/archive/2009/02/04/253312.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>static</title><link>http://www.blogjava.net/yanzizyy/archive/2009/02/04/253310.html</link><dc:creator>dreaming here</dc:creator><author>dreaming here</author><pubDate>Wed, 04 Feb 2009 12:33:00 GMT</pubDate><guid>http://www.blogjava.net/yanzizyy/archive/2009/02/04/253310.html</guid><wfw:comment>http://www.blogjava.net/yanzizyy/comments/253310.html</wfw:comment><comments>http://www.blogjava.net/yanzizyy/archive/2009/02/04/253310.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yanzizyy/comments/commentRss/253310.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanzizyy/services/trackbacks/253310.html</trackback:ping><description><![CDATA[类的成员变量被static修饰，为所有对象共享占用一块空间； <br />
对象的成员变量为每个对象有一份，有多少个对象就有占多少内存空间。</ca>
<img src ="http://www.blogjava.net/yanzizyy/aggbug/253310.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanzizyy/" target="_blank">dreaming here</a> 2009-02-04 20:33 <a href="http://www.blogjava.net/yanzizyy/archive/2009/02/04/253310.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>JAVA中this和super的用法</title><link>http://www.blogjava.net/yanzizyy/archive/2009/02/04/253308.html</link><dc:creator>dreaming here</dc:creator><author>dreaming here</author><pubDate>Wed, 04 Feb 2009 12:16:00 GMT</pubDate><guid>http://www.blogjava.net/yanzizyy/archive/2009/02/04/253308.html</guid><wfw:comment>http://www.blogjava.net/yanzizyy/comments/253308.html</wfw:comment><comments>http://www.blogjava.net/yanzizyy/archive/2009/02/04/253308.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/yanzizyy/comments/commentRss/253308.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/yanzizyy/services/trackbacks/253308.html</trackback:ping><description><![CDATA[<p>1、super（参数）：调用父类中的某一个构造函数（应该为构造函数中的第一条语句） </p>
<p>2、this（参数）：调用本类中另一种形成的构造函数（应该为构造函数中的第一条语句） </p>
<p>3、super:　它引用当前对象的直接父类中的成员（用来访问直接父类中被隐藏的父类中成员数据或函数，基类与派生类中有相同成员定义时） </p>
<p>如：super.变量名&nbsp;&nbsp; super.成员函数据名（实参） </p>
<p>4、this：它代表当前对象名（在程序中易产生二义性之处，应使用this来指明当前对象；如果函数的形参与类中的成员数据同名，这时需用this来指明成员变量名） </p>
<p>二、应用实例 </p>
<code>class Point <br />
<br />
{ private int x,y; <br />
<br />
public Point(int x,int y) <br />
<br />
{ <br />
<br />
this.x=x; //this它代表当前对象名 <br />
<br />
this.y=y; <br />
<br />
} <br />
<br />
public void Draw() <br />
<br />
{ <br />
<br />
} <br />
<br />
public Point() <br />
<br />
{ <br />
<br />
this(0,0); //this（参数）调用本类中另一种形成的构造函数 <br />
<br />
} <br />
<br />
} <br />
<br />
class Circle extends Point <br />
<br />
{ <br />
<br />
private int radius; <br />
<br />
public circle(int x0,int y0, int r ) <br />
<br />
{ <br />
<br />
super(x0,y0); //super（参数）调用基类中的某一个构造函数 <br />
<br />
radius=r; <br />
<br />
} <br />
<br />
public void Draw() <br />
<br />
{ <br />
<br />
super.Draw(); //super它引用当前对象的直接父类中的成员 <br />
<br />
drawCircle(); <br />
<br />
}} </code></font>
<div></div>
　　 
<img src ="http://www.blogjava.net/yanzizyy/aggbug/253308.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/yanzizyy/" target="_blank">dreaming here</a> 2009-02-04 20:16 <a href="http://www.blogjava.net/yanzizyy/archive/2009/02/04/253308.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>