java静态变量重复new_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.(ConstructorCls.java:7)
at com.ConstructorCls.(ConstructorCls.java:7)
at com.ConstructorCls.(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非静态成员变量之死循环(详解)的全部内容了,希望大家喜欢哦~
如果大家想了解更多游戏活动与游戏攻略,请持续关注本站,本站小编将在第一时间为大家带来最好看、最好玩、最新鲜的游戏资讯。更多精彩内容,尽在jb51游戏频道!
java静态变量重复new_Java非静态成员变量之死循环(详解)相关推荐
- 为什么静态方法无法直接调用非静态成员变量和方法
静态方法无法直接调用非静态成员变量和方法 看到这句话,要想到形容的是这样的如下 静态方法里面无法调用非静态变量 下面在写一个对比非静态的方法和静态方法调用变量对比 问题原因 静态变量和静态的方法是属于 ...
- 静态成员变量和非静态成员变量的5个主要区别
1.从保存位置: a) 静态成员变量: 方法区的静态区域 b) 非静态成员变量: 堆内存中的对象空间里面 2.从书写格式上看: a) 静态成员变量: 在数据类型前面多了一个static修饰 b) 非静 ...
- 静态成员变量和非静态成员变量的对比
静态成员变量和非静态成员变量的对比 1.存储的数据 静态成员变量存储的是所有对象共享的数据 非静态成员变量存储的是每个对象特有的数据 2.存储位置 静态成员变量是随着类的加载在方法区的静态区开辟内存了 ...
- 静态成员变量和非静态成员变量
写在前面的总结: 静态成员变量是属于类的,就像是你买了一套房,属于固定资产:而非静态成员变量是不属于类的,就像是你租了一套房,主人套房子不属于你,因此,静态成员变量的调用可以直接通过类加域运算符的形式 ...
- qt 静态成员变量_Qt 静态成员函数的调用非静态成员变量,非静态成员函数
在多人开发的项目中,一些通用的工具类接口可以用静态成员函数.方便调用,并且不容易调用错误. 静态成员函数不传递this指针(不能->),不识别对象个体,所以经常用于对静态数据成员进行操作.不能操 ...
- 【C++静态成员函数不能调用非静态成员变量】
C++静态成员函数不能调用非静态成员变量 静态成员函数 this指针 C++静态成员函数不能调用非静态成员变量原因 为什么要引入static 什么时候用static 致谢 静态成员函数 定义:静态成员 ...
- 静态内部类和访问非静态成员变量
静态内部类访问包含它的外部类的非静态成员变量时,可以通过new外部类().成员的方式访问,这是因为静态的只能访问静态的,因为他们在对象没创建前就存在了.如果想访问非静态的则必须初始化该对象,因为只有初 ...
- 静态成员变量和非静态成员变量的区别
1.它们在内存中出现的时间不同: 静态成员变量:它是在加载当前这个类的时候,就在方法区的静态区中存在. 非静态成员变量:当创建这个类的对象的时候,随着对象的产生在堆中出现. 2.它们所在的内存区域不同 ...
- 类中的静态成员函数访问非静态成员变量
http://blog.csdn.net/u011857683/article/details/52294353 1.思路: 静态成员函数属于类(通过类访问,调用函数时没有提供this指针), 非静态 ...
最新文章
- Object-c学习之路二(oc内存管理黄金法则1)
- Hyperledger Besu企业以太坊快速教程
- MyBatis中动态SQL
- python获取窗口句柄_Python+selenium 获取浏览器窗口坐标、句柄的方法
- 无法运行的愿意_分享减肥食谱一周瘦10斤,你愿意尝试吗?
- 机器学习分类_机器学习之简单分类模型
- sqlserver 导入mysql,在项目中迁移MS SQLServer到Mysql数据库,实现MySQL数据库的快速整合...
- requests请求报字符编码异常信息
- 华为集齐 AI 龙珠,“召唤神龙”为期不远
- my97Date如何多选日期且无重复日期
- Memcache的 简介
- mysql硬盘复制无法启动_磁盘的移动导致MySQL数据启动失败
- 【转】javascript弹出固定大小的窗口页面
- java中实现下载音乐_如何用JAVA的IO流下载落网音乐?
- R语言中ggplot Theme Assist安装使用教程
- 重装上阵两个人合体机器人_重装上阵:组装机器人是正常人的行为,要我就搞出点花样来...
- 甘孜州2021高考 康定中学宴冬梅成绩查询,最新2021甘孜州高中排名
- java 实现金额大小写转换
- GitHub上最励志的计算机自学教程(重制版)
- 如何解决图片在移动端清晰显示的问题