浅谈static关键字
如果一个成员变量使用了static关键字,则该成员变量不再属于对象自己,而是属于类。
如果一个成员方法使用了static关键字,则该成员方法不再属于对象自己,而是属于类。
如果没有static关键字,则必须创建对象,然后才能通过对象使用它。
如果有了static关键字,则不需要创建对象,直接就能通过类名称来访问
无论是成员变量,还是成员方法,如果有了static,都推荐使用类名称来调用
静态变量:类名称.静态变量
静态方法:类名称.静态方法()
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 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| package demo03;
class MyClass { String name; static int age; public void method() { System.out.println("这是一个成员方法"); } public static void methodStatic() { System.out.println("这是一个静态方法"); System.out.println(age); } } public class Demo03StaticMethod {
public static void main(String[] args) { MyClass obj=new MyClass(); obj.method(); haha1(); Demo03StaticMethod.haha1(); obj.methodStatic(); MyClass.methodStatic(); } public void haha() { System.out.println("haha"); } public static void haha1() { System.out.println("haha1"); }
}
|
注意事项:
- 静态不能直接访问非静态。
- 原因:因为在内存当中是
先
有静态的内容,后
有非静态的内容 先人不知道后人,但是后人知道先人
- 静态方法中不能使用this
- 原因:this 代表当前对象,通过谁调用的方法,谁就是当前的对象
浅谈静态代码块
静态代码块:
public class 类名称 {
static {
// 静态代码块的内容
}
}
特点:当第一次用到本类时,静态代码执行唯一的一次
静态内容总是优先于非静态,所以静态代码块比构造方法先执行
静态代码块的典型用途:
用来一次性地对静态成员变量进行赋值
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 29 30 31 32 33
| package demo03;
class Student {
public Student() { System.out.println("构造函数执行"); } static { System.out.println("静态代码执行唯一一次"); } } public class Demo03Static { public static void main(String[] args) { Student s=new Student(); Student s1=new Student(); } }
|