static

1)Static修饰的变量是静态变量:

1.1) 由static修饰 值可以修改

1.2) 属于类,存在方法区中,只有一份

1.3) 常常通过类名来访问

1.4) 何时用:所有对象的数据都一样,静态变量的值和所在类的对象无关。

class A {

public static int index = 100; //index就是static修饰的静态变量

}

2)由static修饰的方法是静态方法:

21)由static修饰

2.2)属于类,存在方法区中,只有一份

2.3)常常通过类名来访问

2.4)静态方法没有隐式的this传递,不能直接访问本类中的变量 //静态变量除外

没有this就意味着没有对象,而实例成员必须通过打点来访问,所以静态方法不能访问实例成员

2.5)何时用:方法的操作仅与参数相关而与对象无关(与main并列的方法最好用static修饰)

class B {
public static void testMethod(){ //testMethod就是静态方法,可以直接通过类名访问,不需要类的对象
}
}

3) 由static修饰的代码块静态块

3.1) 属于类的代码块,在类加载期间执行的代码块,只执行一次,可以用来在软件中加载静态资源(视频音频等)

3.2) 因为类只加载一次,所以静态块也只加载一次

3.3) 何时用:常常用于加载静态资源(图片、视频、音频···)

成员变量没有static修饰,存在堆中,不能通过类名直接访问,需要类的对象来访问;

而static修饰的静态变量存在方法区中,可以直接通过类名访问,也可以用类的对象访问

final

1) 修饰变量:变量不能被改变

2) 修饰方法:方法不能被重写

3) 修饰类:类不能被继承

问:final修饰的变量怎么赋值(初始化)?

由final修饰的变量有两种赋值方式:

1、声明变量的同时初始化

public final int sample = 520;

2、构造器中赋值(如果final声明的变量没有赋值,会报编译错误)

class C {
public final int sample;
public C{
sample = 520;
}
}

static final 修饰常量

1、 必须在声明的同时赋值

2、 通过类名点来访问,常量值不能被改变

3、 建议:常量名所有字母都要大写

4、 常量在编译时被自动替换为具体的值