class Hello12 {
static int b = 10;
static {
b = 100;
}
}
class sample {
public static void main(String args[]) {
System.out.println(Hello12.b);
}
}
Run Code Online (Sandbox Code Playgroud)
在运行上面的代码时,输出为100,因为当我调用Hello类时,首先执行静态块,将b的值设置为100并显示它.但是当我写这段代码时:
class Hello12 {
static {
b = 100;
}
static int b = 10;
}
class sample {
public static void main(String args[]) {
System.out.println(Hello12.b);
}
}
Run Code Online (Sandbox Code Playgroud)
这里的输出为10.我希望答案为100,因为一旦执行静态块,它给b的值为100.所以在main()中,我调用Hello.b它应该引用b(= 100) .两个代码中的内存如何分配给b?
当我尝试打印未初始化的静态char数组时,它会给出运行时错误(Null指针异常),而未初始化的静态int数组则给出null值.为什么?
public class abc {
static int arr[];
static char ch[];
public static void main(String[] args) {
System.out.println(ch); //it gives null pointer exception at run time
System.out.println(arr); //it gives output as "null".
}
}
Run Code Online (Sandbox Code Playgroud) class abc {
int a = 0;
static int b;
static abc h = new abc(); //line 4
public abc() {
System.out.println("cons");
}
{
System.out.println("ini");
}
static {
System.out.println("stat");
}
}
public class ques {
public static void main(String[] args) {
System.out.println(new abc().a);
}
}
Run Code Online (Sandbox Code Playgroud)
当我写这段代码时,我按顺序得到输出:
ini
cons
stat
ini
cons
0
Run Code Online (Sandbox Code Playgroud)
这里当我在main(), class abc加载中创建一个新对象时,static变量和块按顺序执行.当控制进入第4行时,static abc h = new abc();将调用实例初始化块.为什么?为什么在第4行创建新对象时不调用静态块,直到那时静态块也没有被调用一次,所以根据惯例,应该调用静态块.为什么会出现这种意外的输出?
当我运行以下代码时,我得到了数组的地址:
int arr[] = {2,5,3};
System.out.println(arr); // [I@3fe993
Run Code Online (Sandbox Code Playgroud)
但是当我声明一个字符数组并以相同的方式打印它时,它给了我数组的实际内容.为什么?
char ch[] = {'a','b','c'};
System.out.println(ch); // abc
Run Code Online (Sandbox Code Playgroud) public static void main(String[] args) {
final int a =15;
byte b = a;
System.out.println(a);
System.out.println(b);
}
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,当我从int转换为byte时,它没有给出编译时错误,但是当我的转换从long转换为int时,它给出了编译时错误,为什么?
public static void main(String[] args) {
final long a =15;
int b = a;
System.out.println(a);
System.out.println(b);
}
Run Code Online (Sandbox Code Playgroud) 在我之前的问题Java 类和静态块的上下文中,如果我将代码从静态块和变量更改为正常的实例初始化块和实例变量会怎样。现在代码将如何执行?
class extra3 {
public static void main(String string[]) {
Hello123 h = new Hello123();
System.out.println(h.a);
}
}
class Hello123 {
{
a=20;
}
int a=158;
}
Run Code Online (Sandbox Code Playgroud)
这里我得到的输出为 158。我无法理解这里的原因。其他代码是这样的:
class extra3 {
public static void main(String string[]) {
Hello123 h = new Hello123();
System.out.println(h.a);
}
}
class Hello123 {
int a=158;
{
a=20;
}
}
Run Code Online (Sandbox Code Playgroud)
这里的输出是 20,这是可以接受的,因为创建对象时首先执行实例块。但是为什么第一个代码的输出是 158 呢?