访问控制权限 final static
1.访问权限控制
| 同一个类 | 同一个包的类 | 不同包中的子类 | 其他包中的类 | |
|---|---|---|---|---|
| public | √ | √ | √ | √ |
| protected | √ | √ | √ | |
| default | √ | √ | ||
| private | √ |
2.final关键字
final关键字可以用在成员变量上、用在参数上、用在方法上、用在类上。
2.1 final成员变量
final修饰成员变量要分为两种情况,一种是修饰基本数据类型,另一种是修饰引用数据类型。
①当修饰基本数据类型时:会使数值不变
②当修饰引用数据类型时:会使引用恒定不变,一旦引用初始化指定一个对象,就无法将把它改为指定为另一个对象
class Value{
int i;
public Value(int i){
this.i = i;
}
}
public class FinalTest {
final Value v3 = new Value(3);
public static void main(String[] args) {
FinalTest test = new FinalTest();
test.v3.i++;
test.v3 = new Value(10); // error:无法指定为另一个对象
}
}
2.2 fianl参数
Java允许在参数列表中以声明的方式将参数指明为final,一旦声明为final,只可以读该参数,不能修改该参数
public void test1(final Value value){
value = new Value(10); // error:无法修改参数
}
2.3 final方法
当final修饰方法时,能够确保在继承中使方法行为保持不变,并且不会被覆盖
class Value{
int i;
public Value(int i){
this.i = i;
}
public final void f(){
System.out.println("f");
}
}
class ValueSon extends Value{
public ValueSon(int i) {
super(i);
}
// error: 'f()' cannot override 'f()' in 'Value'; overridden method is final
public final void f(){
}
}
2.4 final类
当final修饰类时,表示该类不能被继承
final class Value{
int i;
}
// error:Cannot inherit from final 'Value
class ValueSon extends Value{
}
3.static关键字
static关键字可以修饰成员变量和成员方法、修饰代码块、修饰内部类
3.1 修饰成员变量和成员方法
被 static 修饰的成员属于类,不属于单个这个类的某个对象,被类中所有对象共享,可以并且建议通过类名调用。
public class StaticTest {
// 静态成员变量
static int i;
// 静态成员方法
public static void f(){
}
}
3.2 修饰代码块
静态代码块定义在类中方法外, 静态代码块在非静态代码块之前执行(静态代码块 —> 非静态代码块 —> 构造方法)。 该类不管创建多少对象,静态代码块只执行一次
public class StaticTest {
static {
System.out.println("静态代码块");
}
{
System.out.println("非静态代码块");
}
public StaticTest(){
System.out.println("构造器");
}
public static void main(String[] args) {
new StaticTest();
}
}

3.3 修饰内部类
静态类内部不可以访问外部类的实例成员,只能访问外部类的类成员,即使是静态内部类的实例方法也不能访问外部类的实例成员,只能访问外部类的静态成员

浙公网安备 33010602011771号