JAVA杂碎知识点

x++和++x的区别:

image-20240827101613164

image-20240827101620721

&&运算符的短路求值

1
2
3
4
5
6
7
8
9
10
public class E {
public static void main(String args[]) {
int x = 8, y = 8;
if (x++ == 9 && ++y == 9) {
x = 10;
y = 10;
}
System.out.println("x=" + x + " , y=" + y);
}
} //x=9,y=8

在if语句中,&&运算符先对左边进行运算:x++此时值为8,不等于9,导致判断结果为false,当已经有一方为false时,整个if语句已是false,导致&&右边的运算不会进行,所以只有x进行了自增操作,而y没有。

switch case

1
2
3
4
5
6
7
8
9
10
11
12
public class E {
public static void main(String args[]){
int x=2, y=5, z= 20;
switch(x) {
case 7 : z--;
case 5 : z-=2;
case 2: z-=5;
default: z+=10;
}
System.out.println(z);
}
} //z=25

不要认为经过一个case就会结束,要看看有无break语句,若无则会一条条往下走,直至走完default。

package语句要放在最前面

静态嵌套类

1
2
3
4
5
6
7
8
9
10
11
12
public class OuterClass {
static class A {
public static int a = 1; //静态变量
static {
a = 2;
}
}

public static void main(String[] args) {
System.out.println(A.a); // 输出 2
}
}

其中A为静态嵌套类,无需将其实例化即可访问其中的静态属性

static { a=2; }为静态代码块,在类加载时会被执行。即使静态变量a的初值是1,当A类被加载时,a的最终值是2。

非静态嵌套类

访问外部类成员

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class OuterClass {
private String name = "OuterClass Name";

class InnerClass {
public void printOuterName() {
// 非静态嵌套类可以访问外部类的私有成员
System.out.println("Outer class name: " + name);
}
}
}

public class Main {
public static void main(String[] args) {
OuterClass outer = new OuterClass();
OuterClass.InnerClass inner = outer.new InnerClass();
inner.printOuterName(); // 输出: Outer class name: OuterClass Name
}
}