小编Sha*_*wal的帖子

Java类和静态块

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?

java static

28
推荐指数
3
解决办法
1135
查看次数

char和int数组的区别

当我尝试打印未初始化的静态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)

java

17
推荐指数
2
解决办法
1528
查看次数

在Java中使用static关键字创建对象

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行创建新对象时不调用静态块,直到那时静态块也没有被调用一次,所以根据惯例,应该调用静态块.为什么会出现这种意外的输出?

java static initialization

14
推荐指数
2
解决办法
1287
查看次数

Java中打印char和int数组之间的区别

当我运行以下代码时,我得到了数组的地址:

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)

java arrays

12
推荐指数
1
解决办法
802
查看次数

使用java中的final关键字从int到byte键入强制转换问题

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

7
推荐指数
1
解决办法
656
查看次数

为什么Java中的数组索引从0开始?

为什么在Java这样的编程语言中,数组索引使用0而不是1?我是java的新手,欢迎任何解释.

java arrays

7
推荐指数
3
解决办法
3万
查看次数

Java实例初始化块和实例变量

在我之前的问题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 呢?

java instance-variables initialization-block

4
推荐指数
1
解决办法
1205
查看次数