Java 非访问修饰符
除了访问性修饰符,我们还有非访问性修饰符。这里主要说明static与final修饰符,其他修饰符以后用到再说。
一、static修饰符
static修饰符是用来修饰方法与变量。
1、创建StaticTest.java
public class StaticTest {
private static int num = 0;////“静态变量(类变量)”不能被使用在类的非静态方法中。
public static int getNum() {
//static int num = 2; //static变量为类变量,局部变量不能声明为static变量
return num;
}
public static void add() { //“静态方法”不能使用类的非静态变量。
num++;
}
public static void main(String[] args) {
System.out.println("num:" + StaticTest.getNum() + " start");
for (int i = 0; i < 10; ++i){
add();//不属于任何对象,即使没有创建对象,也能使用变量和调用方法
}
System.out.println("num:" + StaticTest.getNum() + " end");
}
}
这里的static用法与c有些不同,观察细微点,才能更好的理解java。
2、运行
javac StaticTest.java
java StaticTest
结果如下图:
二、final修饰符
1、创建FinalTest.java
public class FinalTest {
final int value = 10; //实例变量
final int value2;
public FinalTest() {
value2 = 10;//不会报错,在构造方法可以直接赋值。
System.out.println("value2=: " + value2);
}
public final void test() {
int value = 9;//局部变量:不会报错,因为重新赋值给int类型了。
//value = 9; //报错,final定义的变量不能重新赋值。
//value2 = 8;//报错,不能在方法中赋值
System.out.println("value=: " + value);
}
public static void main(String []args) {
FinalTest getText = new FinalTest();
getText.test();
}
}
这里主要关注的final变量与方法。final变量主要是不能再次复制,而final方法主要是不能被重写。
2、运行
javac FinalTest.java
java FinalTest
结果如下:
3、注意点
- final修饰一个类的时候,表示这个类不能被继承。
- 一个类的private方法会隐式的被指定为final方法。被final修饰的方法不能被重写(包括子类)。
- final定义的变量必须赋初值(不能在方法中赋值),并且只能初始化一次。