假如java类里的成员变量是自身的对象
假如java类里的成员变量是自身的对象,则新建该类对象时内存中怎么分配空间,我感觉似乎死循环了。
不过我想的肯定是错的,因为很多类的成员变量是自身对象,并且绝对无错,举个例子:
Class A{
private String b ="Hello";
private A a = new A();
}
Class B{
public static void main(){
A p = new A();
}
}
1.程序运行的时候会产生一个栈溢出错误的异常
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();
}
}
也就是说类是自身成员的时候,通常不能初始化,而仅仅是一个定义,在满足某些条件的时候,才去初始化,否则必然导至内存溢出。
2.可以给静态的自身对象赋值,如
Class A{
private String b ="Hello";
private static final A a = new A();
}
3.因为a被修饰为static后第一次建的对象就被放在静态区,再建对象时第二个成员变量就引用到该静态区的对象
4.假如a被修饰为static后,只要new A类的对象,第二个成员变量对象就会被放在静态区,而该对象中的第二个成员变量就不会在重新new了,因为它必须使用静态区的已经new好的这个对象
################################################################################
举例说明:
1、
################################################
测试结果如下:
2、结论是:定义一个该对象,那么该对象的成员变量可以嵌套无数次来访问,但是在内存中只有一份,所以访问的都是一个对象。
假如java类里的成员变量是自身的对象的更多相关文章
- java类里的成员变量是自身的对象问题
今晚看单例模式饿汉时想到一个问题:假如java类里的成员变量是自身的对象,则新建该类对象时内存中怎么分配空间,我感觉似乎死循环了.于是上网搜索了下,哈哈,果然有人早就思考过这个问题了,站在巨人的肩膀上 ...
- 测试 Java 类的非公有成员变量和方法
引言 对于软件开发人员来说,单元测试是一项必不可少的工作.它既可以验证程序的有效性,又可以在程序出现 BUG 的时候,帮助开发人员快速的定位问题所在.但是,在写单元测试的过程中,开发人员经常要访问类的 ...
- java类中,成员变量赋值第一个进行,其次是静态构造函数,再次是构造函数
如题是结论,如果有人问你Java类的成员初始化顺序和初始化块知识就这样回答他.下面是代码: package com.test; public class TestClass{ // 成员变量赋值第一个 ...
- perl 取类里的成员变量
[root@wx03 test]# cat x1.pm package x1; use Data::Dumper; sub new { my $self ={}; my $invocant = shi ...
- Objective-C类成员变量深度剖析--oc对象内存模型
目录 Non Fragile ivars 为什么Non Fragile ivars很关键 如何寻址类成员变量 真正的“如何寻址类成员变量” Non Fragile ivars布局调整 为什么Objec ...
- JAVA中局部变量 和 成员变量有哪些区别
JAVA中局部变量 和 成员变量有哪些区别 1.定义的位置不一样<重点>***局部变量:在方法的内部成员变量:在方法的外部,直接写在类当中 2.作用范围不一样<重点>***局部 ...
- 【基础】java类的各种成员初始化顺序
父子类继承时的静态代码块,普通代码块,静态方法,构造方法,等先后顺序 前言: 普通代码块:在方法或语句中出现的{}就称为普通代码块.普通代码块和一般的语句执行顺序由他们在代码中出现的次序决定--“先出 ...
- Java接口中的成员变量默认为(public、static、final)、方法为(public、abstract)
interface”(接口)可将其想象为一个“纯”抽象类.它允许创建者规定一个类的基本形式:方法名.自变量列表以及返回类型,但不实现方法主体.接口也可包含基本数据类型的数据成员,但它们都默认为publ ...
- android 20 Intnet类重要的成员变量
Intnet类重要的成员变量: <intent-filter> <action android:name="android.intent.action.MAIN" ...
随机推荐
- 知乎如何基于开源Druid打造下一代数据平台?
https://mp.weixin.qq.com/s/WXA_Pn5xwlL-cA4JaGRw6Q
- 新浪广告交易平台(SAX)DSP手册
新浪广告交易平台(SAX)DSP手册 http://amp.ad.sina.com.cn/sax/doc/zh-CN/xhtml/index.xhtml 新浪广告交易平台(SAX)DSP手册 版权 © ...
- 【PyQt5-Qt Designer】窗口操作
1.窗口最上栏最大化 最小化 关闭按钮显示 #设置最小化与最大化按钮 self.setWindowFlags(QtCore.Qt.Window) 将其添加到Ui_*** 布局代码中即可 2.窗口知识 ...
- JavaScript 学习笔记-HTML&&DOM
HTML DOM (文档对象模型) 当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model). HTML DOM 模型被构造为对象的树. JavaScript 能够 ...
- oracle中,将两个select语句的结果作为一个整体显示出来
如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字.union(或称为联合)的作用是将多个结果合并在一起显示出来.union和union ...
- 用laravel dingo/api创建产品api
沿着上一篇来讲,我们来创建一个简单的item产品api,也是用到laravel dingo/api来实现,对dingo/api不熟的朋友可以翻看前面的文章.好,我们随着ytkah一起来创建产品api ...
- CGPoint,CGSize,CGRect转NSString以及CGRect的一些便捷实用方法
打印代码小技巧 UIKIT_EXTERN NSString *NSStringFromCGPoint(CGPoint point); UIKIT_EXTERN NSString *NSStringFr ...
- HDFS介绍及简单操作
目录 1.HDFS是什么? 2.HDFS设计基础与目标 3.HDFS体系结构 3.1 NameNode(NN)3.2 DataNode(DN)3.3 SecondaryNameNode(SNN)3.4 ...
- 每周工作4小时,蒂莫西·费里斯 最理想的工作方式和生活方式,QQ群666243547
内容简介 · · · · · · <每周工作4小时>是一本从观念到行为,彻底改变你的工作方式和生活方式的书.它既是数字时代的职场励志书和创业指导书,也是新新人类的全球化生存手册和人生哲学 ...
- sap gui 配置
1: sap gui 安全配置 ,在左下角搜索sap gui configuration.