JAVA非静态成员变量之死循环
1.非静态成员变量
当成员变量为非静态成员变量且对当前类进行实例化时,将会产生死循环
例子:
public class ConstructorCls { private ConstructorCls obj=new ConstructorCls(); }
public class TestC { public static void main(String[] args) {
ConstructorCls c =new ConstructorCls();
}
}
结果:
Exception in thread "main" java.lang.StackOverflowError
at com.ConstructorCls.<init>(ConstructorCls.java:7)
at com.ConstructorCls.<init>(ConstructorCls.java:7)
at com.ConstructorCls.<init>(ConstructorCls.java:7)
分析:当new ConstrutorCls() 会对ConstrutorCls进行实例 化,后然对这个类的成员obj进行初始化,obj又是对自已所在类进行实列化,这一样一直下去,直到StackOverflowError
2.静态成员变量
静态成员变量是属于类的,不会出现死循环
例如:
public class ConstructorCls {
private static ConstructorCls obj=new ConstructorCls();
}
public class TestC { public static void main(String[] args) {
ConstructorCls c =new ConstructorCls();
}
}
分析:当new ConstructorCls()时,首先将ConstructorCls加截到JVM中,在加载时对该类的静态成员进行初始化(仅加载时初始化一次),初始化obj对像,new 一个ConstructorCls, 这里的一个关键点 是这个静态成员是属于类的,并不属于某一个实例对像,所以不会产生死循环。
JAVA非静态成员变量之死循环的更多相关文章
- 分析java类的静态成员变量初始化先于非静态成员变量
依上图中当class字节码文件被jvm虚拟机加载到内存中依次经过 连接 验证:对字节码进行验证 准备:给静态变量分配内存并赋予变量类型各自的默认值(注:基本类型为0或false,对象为null,sta ...
- Java中非静态成员变量、静态成员变量的初始化时机
转: Java中非静态成员变量.静态成员变量的初始化时机. 2018年05月22日 11:48:11 SilenceCarrot 阅读数 421 版权声明:技术就要分享才有意思,欢迎大家分享(注明 ...
- java:静态成员变量和静态函数
静态成员变量 可以使用类名调用,如 class Dog { static int age; } class Test2{ public static void main(String args[]){ ...
- C++静态成员函数不能调用非静态成员变量
其实我们从直观上可以很好的理解静态成员函数不能调用非静态成员变量这句话因为无论是静态成员函数还是静态成员变量,它们 都是在类的范畴之类的,及在类的整个生存周期里始终只能存在一份.然而非静态成员变量和非 ...
- C++对象模型:成员变量<一>非静态成员变量
非静态成员变量,分别两种可能,要么类自定义,要么继承而来.根据<深度探索C++对象模型>的解读. class X { private: int x,y,z; }; 在这个类中,有三个私有成 ...
- PHP静态成员变量和非静态成员变量
数据成员可以分静态变量.非静态变量两种. 静态成员: 静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会 ...
- 关于C++静态成员函数访问非静态成员变量的问题
静态成员函数不能访问非静态成员,这是因为静态函数属于类而不是属于整个对象,静态函数中的 member可能都没有分配内存.静态成员函数没有隐含的this自变量.所以,它就无法访问自己类的非静态成员 代码 ...
- C++ 中静态成员函数访问非静态成员变量的方法
最近在 VS2010 里开发出厂烧写工具,遇到一个问题: 我创建了一个线程,在这个线程里要访问非静态成员,而这个线程函数是静态的.最后找到的办法是用对象指针来做. sourcecode: #test. ...
- java非静态变量初始化
java费静态变量的初始化分为两种情况,一种是局部变量,一种是类的域. 对于类的域,java在类初始化时,会为变量赋一个初始值.对于基本数据类型,java会将初始值设置为二进制0,具体为将boolea ...
随机推荐
- Flask系列01--flask认识, 启动, 响应
一. 四款python web框架简单总结 Django : 优点 - 大而全所有组件都是有组织内部开发高度定制化 教科书级别的框架 缺点 - 浪费资源,请求的时候需要的资源较高 Flask : 优势 ...
- 891. Sum of Subsequence Widths
Given an array of integers A, consider all non-empty subsequences of A. For any sequence S, let the ...
- A - 开门人和关门人(sort+结构体)
点击打开链接 每天第一个到机房的人要把门打开,最后一个离开的人要把门关好.现有一堆杂乱的机房签 到.签离记录,请根据记录找出当天开门和关门的人. Input 测试输入的第一行给出记录的总天数N ( ...
- 【文文殿下】【CF724C】Ray Tracing (中国剩余定理)
题解 我们考虑将棋盘扩大一倍,这样相当于取膜.然后,我们只要对x,y,的位置分类讨论,做四次crt就行.具体细节看文文代码. #include<cstdio> #include<al ...
- iOS - 安全
1. CheckList http://www.jianshu.com/p/d3cc2d5c177d a 数据安全.分为数据传输安全和数据存储安全 数据存储安全为保存在App中的数据安全.不允许明文存 ...
- MySQL 高级查询操作
目录 MySQL 高级查询操作 一.预告 二.简单查询 三.显示筛选 四.存储过程 五.查询语句 1.作为变量 2.函数调用 3.写入数据表 备注 附表一 附表二 相关文献 博客提示 MySQL 高级 ...
- python求100以内素数
python求100以内素数之和 from math import sqrt # 使用isPrime函数 def isPrime(n): if n <= 1: return False for ...
- spring基础回顾
1.什么是Spring框架?Spring框架有哪些主要模块? Spring框架是一个为Java应用程序的开发提供了综合.广泛的基础性支持的Java平台.Spring帮助开发者解决了开发中基础性的问题, ...
- win7使用命令
osk 屏幕键盘 perfmon 性能监视器 PresentationSettings 演示设置 recdisc.exe 创建系统恢复光盘 regedt32 注册表编辑器 rekeywiz 加密文件系 ...
- C/C++ -- Gui编程 -- Qt库的使用 -- Qt编码问题
1.直接使用QObject::trUtf8("中文字符串") 2.头文件<QTextCodec>QTextCodec::setCodecForTr(QTextCodec ...