`
newleague
  • 浏览: 1501542 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

如果java类里的成员变量是自身的对象?

阅读更多

问题:
如果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();
    }
}

 

分享到:
评论

相关推荐

    Java 成员变量和局部变量

    它们属于类的实例,因此,每个类的实例都有自己的一份成员变量副本。成员变量可以是public、private、protected或包访问权限,这决定了它们的可访问性。 1. **默认初始化**: 如果没有明确初始化,成员变量会有一个...

    Java成员变量类变量局部变量的区别共5页.pdf.zip

    Java编程语言中有三种主要的变量类型:成员变量(也称为实例变量)、类变量(也称为静态变量)和局部变量。...因此,理解Java成员变量、类变量和局部变量之间的区别对于成为一名专业的Java开发者至关重要。

    Java程序基础成员变量和局部变量PPT优秀资料.pptx

    成员变量是类的属性,跟对象一起出生和消失,而局部变量是函数的一部分,随着函数一起运行和结束。 成员变量是表明了类的属性,跟对象一起出生和消失。成员变量是类的组成部分,它们可以被类的所有对象共享。成员...

    Java static修饰成员变量

    成员变量是属于类的,每个对象都有自己的副本。但当成员变量前加上`static`关键字,这个变量就称为静态变量,或者叫类变量。静态变量不会为每个对象实例创建副本,而是所有实例共享同一份存储空间。这意味着,无论...

    java 使用静态成员变量计算内存中实例化的对象数目

    总的来说,使用静态成员变量来计算Java程序中实例化的对象数量是一种实用的技术,可以帮助开发者更好地理解他们的代码是如何消耗内存的。然而,对于更复杂的内存分析,可能需要依赖于Java虚拟机(JVM)提供的工具,...

    Java成员变量局部变量静态变量成员方法全局方法等概念的区

    以下是关于Java成员变量、局部变量、静态变量以及成员方法和全局方法的基本概念和区别的详细阐述。 1. 成员变量(Member Variables): 成员变量是类的一部分,它们定义了对象的状态。它们可以是实例变量(非静态...

    java面向对象编程练习

    本资源汇总了 Java 面向对象编程的基本概念和实践练习,涉及到类的成员变量、构造方法、方法重载、get 和 set 方法等方面。 类的成员变量是面向对象编程的基本概念之一。类的成员变量是指类中定义的变量,它可以是...

    java类与对象实例

    在封装过程,对象内的数据我们一般称为成员变量,对象内针对这些数据执行的操作我们可以叫做操作方法。 在 Java 中,类可以分为预定义类和自定义类。预定义类是 Java 语言中已经定义好的类,如 String、Integer 等...

    Java反射机制修改私有成员变量的实现_Reflection

    在提供的"reflectionNew"文件中,可能包含了一些关于如何实现上述过程的示例代码或进一步的解释,如果需要深入学习,可以详细查看这个文件内容,以便更好地理解和掌握Java反射机制修改私有成员变量的方法。

    类中静态成员变量和普通变量的区别——实例代码(VS2010)

    在编程语言中,如C++或Java,类的成员变量分为两种主要类型:静态成员变量(Static Member Variables)和非静态成员变量(也称为实例变量)。这两种变量在使用和存储方式上存在显著差异,这对于理解和编写高效、清晰...

    JAVA学生类Student

    类是一种抽象的概念,而对象则是类的具体实例。本例中的`Student`类就是一个典型的例子。 ### 2. 类的定义 #### 代码示例: ```java public class Student { // ... } ``` 在Java中,类的定义通常使用`public`...

    java多线程_java多线程下变量共享_

    实例成员变量则属于对象,每个线程都有自己独立的副本,除非通过某种方式(如传引用)让线程共享同一个对象。 共享变量可能导致的问题主要包括数据不一致性和竞态条件。当多个线程同时读写同一变量时,如果没有适当...

    JAVA类的方法调用和变量

    Java 类是程序设计的核心元素,它定义了一组相关的属性(变量)和行为(方法)。在 Java 中,类的分类主要有三种: 1. **普通类**:这是最常见的类,需要通过 `new` 关键字实例化后才能使用。实例化一个类意味着...

    Java反射访问私有变量和私有方法.doc

    代理类是 Java 语言中的一种机制,使得我们可以在运行时创建一个代理类,继承自原始类,并且可以访问原始类的非公有成员变量或方法。 优点:这种方法可以在运行时创建一个代理类,继承自原始类,非常灵活。 缺点:...

    建立一个名为Student的类,该类有以下几个私有成员变量:学生姓名、学号、性别、年龄。还有以下两个成员函数:一个用于初始化学生姓名、学号、性别和年龄的构造函数,一个用于输出学生信息的函数。编写一个主函数。声明一个学学生对象。然后调用成员函数在屏幕输出学生信息。

    题目:建立一个名为Student的类,该类有以下几个私有成员变量:学生姓名、学号、性别、年龄。还有以下两个成员函数:一个用于初始化学生姓名、学号、性别和年龄的构造函数,一个用于输出学生信息的函数。编写一个...

    JAVA类和对象.pdf

    每个对象都有自己的状态(即成员变量的值)和行为(即成员函数)。 #### 二、类的定义与组成 1. **数据成员(成员变量)**:指类中的数据存储部分,用来表示对象的状态。这些成员变量可以是基本数据类型(如`int`...

    一个公共类Test在其中的main函数中使用Pen类定义对象

    ②定义类的主体部分,包括变量和方法:变量如colo r,length,price等;方法如Write(),GetPrice()等 ③定义多个构造方法,如Pen(),Pen(参数列表) 2. 定义对象的方法 ①定义公共类Test,则保存的文件名Test.java ②在Test...

Global site tag (gtag.js) - Google Analytics