Java 静态数据初始化的示例代码
无论创建多少个对象,静态数据都只占用一份存储区域。static关键字不能应用于局部变量,因此它只能作用于域。如果一个域是静态的基本类型域,且也没有对它进行初始化,那么它就会获得基本类型的标准初始值;如果它是一个对象引用,那么它的默认初始值就是null
class Bowl { public Bowl(int marker) { System.out.println('Bowl(' + marker + ')'); } void f1(int marker) { System.out.println('f1(' + marker + ')'); }} class Table { static Bowl bowl = new Bowl(1); public Table() { System.out.println('Table()'); bowl2.f1(1); } void f2(int marker) { System.out.println('f2(' + marker + ')'); } static Bowl bowl2 = new Bowl(2);} class Cupboard { Bowl bowl3 = new Bowl(3); static Bowl bowl4 = new Bowl(4); public Cupboard() { System.out.println('Cupboard()'); } void f3(int marker) { System.out.println('f3(' + marker + ')'); } static Bowl bowl5 = new Bowl(5);} public class StaticInit { public static void main(String[] args) { //第三步 System.out.println('Creating new Cupboard in main'); //第四步 //因为Cupboard内的静态变量已经初始化完成,所以不再初始化(无论创建多少个对象,静态数据都是只占用一份存储区域) //但是里边的类成员变量 bowl3 还是需要进行二次初始化的,因为你这是new对象,所以打印 Bowl(3) //然后调用该对象的无参构造函数,打印 Cupboard() new Cupboard(); //第五步 System.out.println('Creating new Cupboard in main'); //第六步 //和第四步一样,执行初始化,打印 Bowl(3),然后调用无参构造函数,打印 Cupboard() new Cupboard(); //第七步 table.f2(111); //第八步 cupboard.f3(111); } //Java 数据类型、对象引用 和 构造器 之间的初始化顺序 https://www.sunjs.com/article/detail/debedcef327c4872933e0b2f1ac7cb71.html //第1步: //先初始化静态代码块、 //Table 类中也含有静态引用变量,所以先去执行bowl引用指向的对象的创建,所以先打印 Bowl(1) //然后该类中还有一个静态对象,所以立即去初始化这个静态对象,然后打印 Bowl(2) //执行完成以后,正式创建对象,执行Table类的默认无参构造函数,打印 Table() //构造函数内 又使用静态变量bowl2 调用了其对象内的方法,所以打印 f1(1) //到此这一行代码执行的初始化全部执行完毕 static Table table = new Table(); //第2步: //初始化 Cupboard 类,因为 Cupboard 类中也含有两个静态对象,所以依次执行 Bowl(4) 和 Bowl(5) //在执行Cupboard构造函数之前先执行变量初始化的规则,所以 bowl3 先执行,打印 Bolw(3) //然后执行无参构造函数,打印 Cupboard() //到此,这行代码的初始化全部执行完毕 static Cupboard cupboard = new Cupboard(); }
执行结果:
Bowl(1)Bowl(2)Table()f1(1)Bowl(4)Bowl(5)Bowl(3)Cupboard()Creating new Cupboard in mainBowl(3)Cupboard()Creating new Cupboard in mainBowl(3)Cupboard()f2(111)f3(111)
以上就是Java 静态数据初始化的示例代码的详细内容,更多关于Java 静态数据初始化的资料请关注好吧啦网其它相关文章!
相关文章:
1. vue-drag-chart 拖动/缩放图表组件的实例代码2. vue使用moment如何将时间戳转为标准日期时间格式3. Android studio 解决logcat无过滤工具栏的操作4. 什么是Python变量作用域5. js select支持手动输入功能实现代码6. PHP正则表达式函数preg_replace用法实例分析7. Android Studio3.6.+ 插件搜索不到终极解决方案(图文详解)8. bootstrap select2 动态从后台Ajax动态获取数据的代码9. Android 实现彻底退出自己APP 并杀掉所有相关的进程10. 一个 2 年 Android 开发者的 18 条忠告
