- 浏览: 1501542 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (798)
- struts2 (42)
- servlet (20)
- quartz (4)
- jquery & ajax (24)
- tomcat (5)
- javascript (15)
- struts1 (8)
- 搜索关键字及链接 (3)
- fckeditor (3)
- Apache (5)
- spring (22)
- linux (3)
- 企业应用 (8)
- 综合应用 (13)
- 服务器 (2)
- 数据库 (85)
- 性能调优 (21)
- 网络应用 (15)
- 缓存技术 (8)
- 设计模式 (39)
- 面试题 (7)
- 程序人生&前辈程序员 (29)
- java基础 (59)
- hibernate (75)
- log4j (4)
- http (11)
- 架构设计 (28)
- 网页设计 (12)
- java邮件 (4)
- 相关工具 (11)
- ognl (7)
- 工作笔记 (18)
- 知识面扩展 (12)
- oracle异常 (1)
- 正则表达式 (2)
- java异常 (5)
- 项目实践&管理 (1)
- 专业术语 (11)
- 网站参考 (1)
- 论坛话题 (2)
- web应用 (11)
- cxf&webservice (22)
- freemarker (3)
- 开源项目 (9)
- eos (1)
- ibatis (6)
- 自定义标签 (3)
- jsp (3)
- 内部非公开文档(注意:保存为草稿) (0)
- 国内外知名企业 (2)
- 网店 (3)
- 分页 (1)
- 消费者习惯 (2)
- 每日关注 (1)
- 商业信息 (18)
- 关注商业网站 (1)
- 生活常识 (3)
- 新闻 (2)
- xml&JSON (5)
- solaris (1)
- apache.common (3)
- BLOB/CLOB (1)
- lucene (2)
- JMS (14)
- 社会进程 (8)
- SSH扩展 (2)
- 消费心理 (1)
- 珠三角 (1)
- 设计文档 (1)
- XWork&webwork (1)
- 软件工程 (3)
- 数据库及链接 (1)
- RMI (2)
- 国内外知名企业&人物 (1)
最新评论
-
司c马:
简介易懂、
OutputStream和InputStream的区别 -
在世界的中心呼喚愛:
解决我的问题
Java获取客户端的真实IP地址 -
bo_hai:
都是些基本的概念呀!
SSO -
tian_4238:
哥们,你也是搞水利这块的吧。
巧用SQLQuery中的addScalar -
loveEVERYday:
java.util.Date、java.sql.Date、java.sql.Time、java.sql.Timestamp小结
问题:
如果java类里的成员变量是自身的对象,则新建该类对象时内存中怎么分配空间,我感觉好像死循环了。
不过我想的肯定是错的,因为很多类的成员变量是自身对象,举个例子:
Class A{
private String b ="Hello";
private A a = new A();
}
Class B{
public static void main(){
A p = new A();
}
}
在程序执行中,要new一个A类型的对象p,这时为对象p开辟内存空间,其中一部分存放字符串b Hello,另一部分存放对象a,可是我感觉a是一个对象,应该再开辟一块空间存放a这个对象,可是应该在里面放什么呢?一个是hello,另一个又是A类的对象?
搜到的答案:
你的程序运行的时候会产生一个栈溢出错误的异常
Exception in thread "main" java.lang.StackOverflowError
你的思路是对的,但是,在main方法中创一个A对象,而A对象在初始化自己成员的时候,又会创另一个A对象,从而造成死循环,最终导至内存溢出。
你的A类如下:
Class A{
private String b ="Hello";
private A a = new A();
}
通常程序不会像你这样写,而是
Class A{
private String b ="Hello";
private A a; //= new A();
public anymothod(...){
//在某条件满足时
a=new A();
}
}
也就是说类是自身成员的时候,通常不能初始化,而仅仅是一个定义,在满足某些条件的时候,才去初始化,否则必然导至内存溢出。
============
class A{
private String b ="Hello";
private static A a = new A();
}
public class Te{
public static void main(String[] a){
A p = new A();
}
}
发表评论
-
ISO-8859_1统一编码 java
2011-08-19 11:07 2030Java中文问题一直困扰着很多初学者,如果了解了Java系统的 ... -
UTF-8 GBK UTF8 GB2312
2011-08-19 10:46 1926UTF-8:Unicode TransformationFor ... -
Properties 类读取配置文件
2011-08-17 22:37 14621、使用java.util.Properties类的load( ... -
Java编程之四大名著
2011-08-06 10:07 1460中文第四版 http://download.csdn.n ... -
JDK5.0 新特性
2011-07-28 20:02 13871.AutoBoxing 原来int是非 ... -
JDK6的新特性
2011-07-28 19:57 1784JDK6的新特性 JDK6的新特性之一_Desktop类和Sy ... -
线程同步
2011-07-25 11:34 1278作者 : buaawhl http://www.iteye.c ... -
ZipInputStream类
2011-07-22 11:33 18770《Java开发实战经典》第12章Java IO,Java ... -
String、StringBuffer和StringBuilder的区别
2011-07-14 15:04 1368String是不可变的,StringBuffer是可变的;St ... -
精通JAVA核心技术
2011-07-11 11:31 1286http://www.2cto.com/ebook/20100 ... -
Java多线程sleep(),join(),interrupt(),wait(),notify()
2011-07-06 22:51 4910浅析 Java Thread.join() 一、在研究j ... -
FileInputStream/FileOutputStream的应用
2011-07-06 15:06 1410这是一对继承于InputStream和OutputStream ... -
Java基础之理解JNI原理
2011-07-05 14:55 1313JNI是JAVA标准平台中的一个重要功能,它弥补了JAVA ... -
面向对象和面向过程的区别
2011-07-04 09:52 1411面向过程就是分析出解 ... -
Java参数传值还是传引用
2011-07-03 20:52 3638参数是按值而不是按 ... -
JAVA排序汇总
2011-06-29 18:07 1487package com.softeem.jbs.lesson4 ... -
Java流操作,InputStream、OutputStream及子类FileInputStream、FileOutputStream;BufferedInpu
2011-06-27 18:09 19255Java将数据于目的地及来 ... -
线程综合文章
2011-06-27 10:48 1116http://lavasoft.blog.51cto.com/ ... -
由Java中的Set,List,Map引出的排序技巧
2011-06-24 14:18 2377一。关于概念: ... -
Date、String、Timestamp之间的转换
2011-03-20 16:59 2419public static Timestamp pars ...
相关推荐
它们属于类的实例,因此,每个类的实例都有自己的一份成员变量副本。成员变量可以是public、private、protected或包访问权限,这决定了它们的可访问性。 1. **默认初始化**: 如果没有明确初始化,成员变量会有一个...
Java编程语言中有三种主要的变量类型:成员变量(也称为实例变量)、类变量(也称为静态变量)和局部变量。...因此,理解Java成员变量、类变量和局部变量之间的区别对于成为一名专业的Java开发者至关重要。
成员变量是类的属性,跟对象一起出生和消失,而局部变量是函数的一部分,随着函数一起运行和结束。 成员变量是表明了类的属性,跟对象一起出生和消失。成员变量是类的组成部分,它们可以被类的所有对象共享。成员...
成员变量是属于类的,每个对象都有自己的副本。但当成员变量前加上`static`关键字,这个变量就称为静态变量,或者叫类变量。静态变量不会为每个对象实例创建副本,而是所有实例共享同一份存储空间。这意味着,无论...
总的来说,使用静态成员变量来计算Java程序中实例化的对象数量是一种实用的技术,可以帮助开发者更好地理解他们的代码是如何消耗内存的。然而,对于更复杂的内存分析,可能需要依赖于Java虚拟机(JVM)提供的工具,...
以下是关于Java成员变量、局部变量、静态变量以及成员方法和全局方法的基本概念和区别的详细阐述。 1. 成员变量(Member Variables): 成员变量是类的一部分,它们定义了对象的状态。它们可以是实例变量(非静态...
本资源汇总了 Java 面向对象编程的基本概念和实践练习,涉及到类的成员变量、构造方法、方法重载、get 和 set 方法等方面。 类的成员变量是面向对象编程的基本概念之一。类的成员变量是指类中定义的变量,它可以是...
在封装过程,对象内的数据我们一般称为成员变量,对象内针对这些数据执行的操作我们可以叫做操作方法。 在 Java 中,类可以分为预定义类和自定义类。预定义类是 Java 语言中已经定义好的类,如 String、Integer 等...
在提供的"reflectionNew"文件中,可能包含了一些关于如何实现上述过程的示例代码或进一步的解释,如果需要深入学习,可以详细查看这个文件内容,以便更好地理解和掌握Java反射机制修改私有成员变量的方法。
在编程语言中,如C++或Java,类的成员变量分为两种主要类型:静态成员变量(Static Member Variables)和非静态成员变量(也称为实例变量)。这两种变量在使用和存储方式上存在显著差异,这对于理解和编写高效、清晰...
类是一种抽象的概念,而对象则是类的具体实例。本例中的`Student`类就是一个典型的例子。 ### 2. 类的定义 #### 代码示例: ```java public class Student { // ... } ``` 在Java中,类的定义通常使用`public`...
实例成员变量则属于对象,每个线程都有自己独立的副本,除非通过某种方式(如传引用)让线程共享同一个对象。 共享变量可能导致的问题主要包括数据不一致性和竞态条件。当多个线程同时读写同一变量时,如果没有适当...
Java 类是程序设计的核心元素,它定义了一组相关的属性(变量)和行为(方法)。在 Java 中,类的分类主要有三种: 1. **普通类**:这是最常见的类,需要通过 `new` 关键字实例化后才能使用。实例化一个类意味着...
代理类是 Java 语言中的一种机制,使得我们可以在运行时创建一个代理类,继承自原始类,并且可以访问原始类的非公有成员变量或方法。 优点:这种方法可以在运行时创建一个代理类,继承自原始类,非常灵活。 缺点:...
题目:建立一个名为Student的类,该类有以下几个私有成员变量:学生姓名、学号、性别、年龄。还有以下两个成员函数:一个用于初始化学生姓名、学号、性别和年龄的构造函数,一个用于输出学生信息的函数。编写一个...
每个对象都有自己的状态(即成员变量的值)和行为(即成员函数)。 #### 二、类的定义与组成 1. **数据成员(成员变量)**:指类中的数据存储部分,用来表示对象的状态。这些成员变量可以是基本数据类型(如`int`...
②定义类的主体部分,包括变量和方法:变量如colo r,length,price等;方法如Write(),GetPrice()等 ③定义多个构造方法,如Pen(),Pen(参数列表) 2. 定义对象的方法 ①定义公共类Test,则保存的文件名Test.java ②在Test...