静态方法
静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。
如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量。在普通成员方法中,则可以直接访问同类的非静态变量和静态变量
静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法。
1 | //普通成员方法 |
静态初始化块
静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29public class HelloWorld{
int num1;
int num2;
static int num3;
public HelloWorld(){
num1=91;
System.out.println("通过构造方法为变量num1赋值");
}
{//初始化块
num2=74;
System.out.println("通过初始化块为变量num2赋值");
}
static {//静态初始化块
num3 = 83;
System.out.println("通过静态初始化块为变量num3赋值");
}
public static void main(String[] args){
HelloWorld hello = new HelloWorld();
System.out.println("num1:"+hello.num1);
System.out.println("num2:"+hello.num2);
System.out.println("num3:"+num3);
HelloWorld hello2 = new HelloWorld(); //再创建类的对象hello2
}
}
代码执行结果如下图:
通过输出结果,我们可以看到,程序运行时静态初始化块最先被执行,然后执行普通初始化块,最后才执行构造方法。
由于静态初始化块只在类加载时执行一次,所以当再次创建对象 hello2 时并未执行静态初始化块。
静态内部类
静态内部类是 static 修饰的内部类,这种内部类的特点是:
- 静态内部类不能直接访问外部类的非静态成员,但可以通过
new 外部类().成员
的方式访问 - 如果外部类的静态成员与内部类的成员名称相同,可通过“类名.静态成员”访问外部类的静态成员;如果外部类的静态成员与内部类的成员名称不相同,则可通过“成员名”直接调用外部类的静态成员
- 创建静态内部类的对象时,不需要外部类的对象,可以直接创建
内部类 对象名= new 内部类()
;