在Java中,类变量按以下顺序初始化:

超类的静态变量

此类的所有静态变量都设置为其默认值 。

静态变量和静态初始化块,按声明顺序排列。

超类的实例变量

此类的所有实例变量都设置为其默认值 。

声明顺序中的实例变量和实例级初始化块

1和2仅在第一次实例化类时完成。

因此,给出以下代码:

class Test

extends TestSuper

{

final int ti1;

final int ti2 = counter ++;

{ ti1 = counter ++; }

static final int ts1;

static final int ts2 = counter ++;

static { ts1 = counter ++; }

public static void main(String[] argv) {

Test test1 = new Test();

printTest(test1);

Test test2 = new Test();

printTest(test2);

}

private static void printTest(Test test) {

System.out.print("ss2 = " + test.ss2);

System.out.print(", ss1 = " + test.ss1);

System.out.print(", ts2 = " + test.ts2);

System.out.println(", ts1 = " + test.ts1);

System.out.print("si2 = " + test.si2);

System.out.print(", si1 = " + test.si1);

System.out.print(", ti2 = " + test.ti2);

System.out.println(", ti1 = " + test.ti1);

System.out.println("counter = " + test.counter);

}

}

class TestSuper

{

static int counter = 0;

final int si1;

final int si2 = counter ++;

{ si1 = counter ++; }

static final int ss1;

static final int ss2 = counter ++;

static { ss1 = counter ++; }

}

然后我们得到以下输出:

ss2 = 0, ss1 = 1, ts2 = 2, ts1 = 3

si2 = 4, si1 = 5, ti2 = 6, ti1 = 7

counter = 8

ss2 = 0, ss1 = 1, ts2 = 2, ts1 = 3

si2 = 8, si1 = 9, ti2 = 10, ti1 = 11

counter = 12

从此输出中我们可以看到字段按列表中指定的顺序初始化。

现在,关于第二个问题,可以重新排序字段来改变类的行为。 是的,通过重新排序字段,您可以更改字段的初始化顺序。 现在,在所有字段都是独立的特定情况下,这不会影响观察到的行为,但是每当字段不是独立的时,例如在上面的代码中,那么重新排序字段可以改变它们的初始值。

例如,如果三行:

static final int ss1;

static final int ss2 = counter ++;

static { ss1 = counter ++; }

改为:

static final int ss1;

static { ss1 = counter ++; }

static final int ss2 = counter ++;

然后输出将变为:

ss2 = 1, ss1 = 0, ts2 = 2, ts1 = 3

si2 = 4, si1 = 5, ti2 = 6, ti1 = 7

counter = 8

也就是说, ss2和ss1会改变值。

原因是此行为在Java语言规范中指定。

Java顺序栈的初始化_java - Java类变量初始化的顺序是什么? - 堆栈内存溢出相关推荐

  1. aws java mysql_java - AWS EC2 / MySql - spring boot无法从datasource确定jdbc url - 堆栈内存溢出...

    我有一个简单的Spring Boot应用程序,我试图在基于Amazon AMI的Amazon EC2实例上部署. 它使用MySql数据库(版本8.0.15). 我在AWS上创建了数据库,当我从本地系统 ...

  2. java 获取组件大小_java - 如何初始化取决于组件大小的图像抓取? - 堆栈内存溢出...

    如果我正确理解问题,那么您的方法会有些落后. 与其让ImageNavigator告诉ZoomedImage绘制哪个子图像,不如让ZoomedImage在绘制时询问ImageNavigator(通过重写 ...

  3. Java拆解最多的素数之和_java - 计算并打印第n个素数 - 堆栈内存溢出

    为了计算第n个素数,我知道两个主要的变体. 直截了当的方式 也就是说,从找到的所有素数开始计数,直到找到所需的n th为止. 这可以通过不同程度的复杂性和效率来完成,并且在概念上有两种不同的实现方式. ...

  4. java ftp 关闭连接_java - 使用Java Apache FTPClient进行FTP TLS获取“握手时远程主机关闭连接”[重复] - 堆栈内存溢出...

    我在Windows 10 64x上为FTP TLS(org.apache.commons.net.ftp)运行了一个Java(1.8)程序: FTPSClient ftpClient = new FT ...

  5. java jtextfield 高度_java - 固定的JTextField的高度和宽度 - 堆栈内存溢出

    我最近一直在使用Java Swing,当我尝试在彼此之间添加3个JTextField时,它们会填充整个JFrame. 但是我希望它们具有固定的高度和宽度. 我能做什么? 由于我是该主题的新手,因此我无 ...

  6. java服务器返回错误码,java - java.io.IOException:服务器返回URL的HTTP响应代码:409 - 堆栈内存溢出...

    我正在使用某些应用程序的API下载文档. 问题是,当我尝试解析inputStream时,它将引发响应代码409异常. 但是最大的问题是它有时会抛出此异常. 此异常的原因是什么? 这是我的代码: URL ...

  7. java spring 打包后找不到路径,java - Spring中的类路径问题:找不到文件异常 - 堆栈内存溢出...

    我有一个简单的Java Spring IO项目,其中的一个类应该从csv文件读取,对于每个读取的记录,参数都存储在帐户对象列表中. 我正在使用Force IDE Luna,并且读取文件的Class C ...

  8. java mapper.readtree_java - 杰克逊的readValue和readTree:何时使用哪个? - 堆栈内存溢出...

    我刚刚开始使用Jackson JSON库. 杰克逊是一个非常强大的库,但它有一个非常广泛的API. 很多事情可以通过多种方式完成. 这使得很难在杰克逊找到自己的方式 - 如何知道什么是正确/最好的做事 ...

  9. java游戏怎么导入jme3,java - JME:将带有纹理的Cinema 4d模型导入jMonkey Projekt - 堆栈内存溢出...

    我的问题是: 现在,我想将其导出到我的jMonkeyEngine中,以将其设置在场景中并对其进行动画处理. 我试图将模型导出为.obj文件并将其加载到我的项目中(只是.obj文件). 结果是我没有纹理 ...

  10. java结果写入html,java - 将长字符串写入HTML文件,InputStream vs FileWriter vs BufferedReader - 堆栈内存溢出...

    我对执行此操作的最佳方法有些困惑. 我在SO上看到了很多示例,许多答案有不同的解决方案. 因此,我想知道将非常长的字符串写入新的html文件的最有效方法(即,从字符串中生成html文件). 并且真的可 ...

最新文章

  1. python csv模块心得
  2. MySQL数据库将查询结果插入到其它表中
  3. 让你android手机变平板,手机瞬间变平板 两种形态随意换_手机Android频道-中关村在线...
  4. 1.7 Java try catch finally语句
  5. CV Code|计算机视觉开源周报20200601期
  6. 解读|数据分析的发展和演变经过哪几个阶段
  7. w10自动删除文件怎么关了_回收站删除的文件怎么恢复?
  8. python学习——numpy库
  9. TIOBE 年度榜单揭晓:C 语言夺冠,Python 紧随其后
  10. 河南理工大学计算机专业几本,2018河南理工大学是几本 是一本还是二本
  11. Python3的迭代器
  12. 谷歌浏览器插件Adblock Plus、OneTab~
  13. 一张图看明白金融数据架构
  14. vue的事件修饰符之.prevent
  15. 《孙子兵法战场机变之军争篇》
  16. 初识Cura3D打印开源项目
  17. C++重温笔记(一): C++再初识
  18. 数字电路实验 07 - | 计数器及其应用
  19. 一年赚一百万很简单(穷人翻身唯一出路)
  20. BurpSuite学习:在火狐浏览器使用foxyproxy添加代理127.0.0.1后无法正常上网

热门文章

  1. 如何高效地使用ERP管理系统
  2. 基于asp.net319一嗨租车汽车租赁系统
  3. 支持Jolla,支持Linux,支持开放,支持互联,Jolla屌丝逆袭
  4. python经典程序练习题-Python练习题(基础知识练习题(一))
  5. 去年华为晋身非洲智能手机市场前三,非洲之王受威胁
  6. 一组图片看完“自动驾驶”发展史
  7. webpack-webpack-dev-server
  8. android8.1官方下载,【安卓市场】安卓市场app官方下载 v7.8.1.81 手机版-七喜软件园...
  9. 计算机专业英文简历和求职信,毕业生通用英文简历范文和求职信.doc
  10. 小程序 项目文件夹命名导致的Bug