关闭。这个问题需要更加突出重点。它目前不接受答案。**想改进这个问题吗?**通过编辑这篇文章更新这个问题,使它只关注一个问题。
27天前关门了。改进这个问题a、 我看过很多程序,每个全局变量都有默认值。这是由编译器或jvm完成的初始化工作。
p5cysglq1#
这是由编译器或jvm完成的初始化工作。取决于值。如果它是一个所谓的编译时常量,那么编译器。否则vm。例如, private static final long foo = System.currentTimeMillis(); 将由vm完成,因此最终将存储在 foo 包含此行的类第一次加载的时间点(这不是系统启动,而是一些引用它的代码第一次运行)。像这样的 private static final long foo = 5; 由编译器完成,因为这是编译时常量。默认构造函数是由编译器提供的,当然它没有显式的返回类型,而是隐式地返回任何内容。所有构造函数都不能有返回类型,这是。。。为什么他们被称为构造器。在类文件级别,构造函数是一种特殊的方法,它返回您正在创建的示例,但在java(语言)中,您无法处理这些信息。
private static final long foo = System.currentTimeMillis();
foo
private static final long foo = 5;
slsn1g292#
我看过很多程序,每个全局变量都有默认值。这是由编译器或jvm完成的初始化工作。严格地说,java没有“全局”变量。真正的全局变量随处可见,没有任何限制。java static 变量需要经过限定或导入才能使用。的默认初始化 class 变量由运行时系统执行。事实上,一个 class 即使变量有显式初始化,也会首先初始化它(实际上,在某些情况下,在显式初始化之前,程序实际上有可能看到默认的初始化值;有关说明,请参阅jls。)话虽如此,说编译器初始化东西绝对不可能是完全正确的。编译器生成 .class 包含代码和其他内容的文件。但是需要初始化的变量在编译代码开始执行之前不存在。到那时,编译器已经完全完成了。默认构造函数是由编译器提供的,当然它没有显式的返回类型,而是隐式地返回任何内容。没有java构造函数具有返回类型。而且没有java构造函数显式返回任何内容。如果询问构造函数是否隐式返回了某些内容,这并不是真正有意义的。在字节码级别,序列如下所示:这个 new 字节码用于在堆中分配对象一 dup 字节码将对象引用的第二个副本推送到操作数堆栈上执行字节码来计算构造函数参数并将它们推送到操作数堆栈上一 invokespecial 字节码用于调用相关的构造函数伪方法。这“消耗”了推送的引用(成为 this )还有争论。不推送返回值。返回到调用代码时,opstack上的原始引用将被分配或返回。
static
class
.class
new
dup
invokespecial
this
2条答案
按热度按时间p5cysglq1#
这是由编译器或jvm完成的初始化工作。
取决于值。如果它是一个所谓的编译时常量,那么编译器。否则vm。例如,
private static final long foo = System.currentTimeMillis();
将由vm完成,因此最终将存储在foo
包含此行的类第一次加载的时间点(这不是系统启动,而是一些引用它的代码第一次运行)。像这样的private static final long foo = 5;
由编译器完成,因为这是编译时常量。默认构造函数是由编译器提供的,当然它没有显式的返回类型,而是隐式地返回任何内容。
所有构造函数都不能有返回类型,这是。。。为什么他们被称为构造器。
在类文件级别,构造函数是一种特殊的方法,它返回您正在创建的示例,但在java(语言)中,您无法处理这些信息。
slsn1g292#
我看过很多程序,每个全局变量都有默认值。这是由编译器或jvm完成的初始化工作。
严格地说,java没有“全局”变量。真正的全局变量随处可见,没有任何限制。java
static
变量需要经过限定或导入才能使用。的默认初始化
class
变量由运行时系统执行。事实上,一个class
即使变量有显式初始化,也会首先初始化它(实际上,在某些情况下,在显式初始化之前,程序实际上有可能看到默认的初始化值;有关说明,请参阅jls。)话虽如此,说编译器初始化东西绝对不可能是完全正确的。编译器生成
.class
包含代码和其他内容的文件。但是需要初始化的变量在编译代码开始执行之前不存在。到那时,编译器已经完全完成了。默认构造函数是由编译器提供的,当然它没有显式的返回类型,而是隐式地返回任何内容。
没有java构造函数具有返回类型。而且没有java构造函数显式返回任何内容。如果询问构造函数是否隐式返回了某些内容,这并不是真正有意义的。在字节码级别,序列如下所示:
这个
new
字节码用于在堆中分配对象一
dup
字节码将对象引用的第二个副本推送到操作数堆栈上执行字节码来计算构造函数参数并将它们推送到操作数堆栈上
一
invokespecial
字节码用于调用相关的构造函数伪方法。这“消耗”了推送的引用(成为this
)还有争论。不推送返回值。返回到调用代码时,opstack上的原始引用将被分配或返回。