一、static修饰符
static:静态,可以修饰成员变量和成员方法(不能修饰局部变量和构造方法)
被static修饰的变量和方法,称之为静态变量和静态方法 (静态方法和静态变量直接通过类来调用,不用再通过对象)
静态变量和静态方法是属于类的 (类变量和类方法)
成员变量和成员方法是属于对象的 (对象变量和对象方法)
一般情况下,调用静态变量的方式为:类名.变量名,静态变量是类以及该类的成员(也称实例/对象)所共享的
调用静态方法的方式为:类名.方法名([实参列表])
静态方法不能被重写,可以被重载
在静态方法中不能使用this和super;
在静态方法中也不能直接使用成员变量和成员方法 (需先new个对象,再通过对象使用);
不能使用的原因就是调用静态方法时,不能保证肯定有该类的对象,有可能是通过类直接调用的。
类中可以定义成员变量、成员方法、静态变量、静态方法、构造方法 (目前变量有静态变量、局部变量、全局变量)
class Test{
public int a; //成员变量
public static int b; //静态变量(参数名 斜体)
public void aa() {
System.out.println("成员方法");
}
public static void bb() {
//this.a = 10; //报错,this/super调用本类/父类的对象,静态方法执行不能确定是类还是对象调用的)
System.out.println("静态方法"); //System.out.println("静态方法" + this.a); 同上述原因报错
//println("静态方法")为out的方法,out为System类的变量
}
}
public class MyStatic {
public static void main(String[] args) {
System.out.println(Test.b); //调用静态变量 b默认为0
Test.b = 100; //改变类变量,test.b对象名调用也为100
//Test.a = 10; (报错,通过类名只能调用静态变量,不能调用非静态变量,a为成员变量)
Test.bb(); //调用静态方法的时候不需先有对象
Test test = new Test();
System.out.println(test.b); //(通过对象调用静态变量不适合,但不影响功能)
test.bb(); //(此处用对象调用静态方法,故标黄线提醒)
test.b = 1000;
Test test2 = new Test();
System.out.println(test2.b); //1000 在调用之前,共享的test.b已经改为1000,用修改后的值
}
}
二、final修饰符
final:
1.可以修饰变量,称之为常量;值一旦确定就不可更改
2.可以修饰方法,称之为最终方法;该方法不能被重写 (成员方法、构造方法、静态方法皆可被修饰)
3.可以修饰类,称之为最终类;最终类不能被继承
(eg:String不能被继承,因为被final修饰)