Java非静态成员变量之死循环(详解)
时间:2019-04-07
本文章向大家介绍Java非静态成员变量之死循环(详解),主要包括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非静态成员变量之死循环(详解)的全部内容了,希望大家喜欢哦~
如果大家想了解更多游戏活动与游戏攻略,请持续关注本站,本站小编将在第一时间为大家带来最好看、最好玩、最新鲜的游戏资讯。更多精彩内容,尽在jb51游戏频道!
- MySQL误操作数据恢复的简单实践(r11笔记第67天)
- Oracle 12c中JOB运行失败的简单处理(r11笔记第66天)
- MySQL中的半同步复制(r11笔记第65天)
- Linux系统LVM逻辑卷创建过程以及自动化脚本
- 一个闪回区报警的数据恢复(r11笔记第62天)
- 利用腾讯云COS云对象存储定时远程备份网站
- 分享一个自写的Python远程命令和文件(夹)传输类
- Oracle数据误操作全面恢复实战(r11笔记第78天)
- 远程协助解决异常宕库的问题(r11笔记第75天)
- Nginx-helper纯代码版,文章评论发布自动清理Fastcgi缓存
- MySQL和Oracle行值表达式对比(r11笔记第74天)
- 闪回数据库不是“万金油”(r11笔记第73天)
- 修改Apache的超时设置,解决长连接请求超时问题
- Oracle 12cR2初体验(r11笔记第91天)
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- spring笔记一
- 深度学习之卷积神经网络(CNN)的应用-验证码的生成与识别
- struts2的验证
- 强化学习详解与代码实现
- Spring源码学习笔记(5)——@Conditonal注解
- 你好,CloudBase CLI 1.0
- Spring源码学习笔记(6)——REST服务的拦截
- Spring源码学习笔记(7)——使用@Import导入组件
- 深度强化学习(DQN-Deep Q Network)之应用-Flappy Bird
- Could not load driverClass ${jdbc.driver}
- Js通过值获取索引下标
- Spring源码学习笔记(8)——Bean的生命周期
- hibernate系列之一
- Flutter定义tabbar底部导航路由跳转
- hibernate系列之二