Java关键字中final与static

final


1. 数据
声明时数据如果是常量,则遍野时也可为常量,也可是在运行时被初始化后不能被改变的常量。
对于基本类型,关键字final 使数值不变;
而对于引用类型时,final 使引用不变,也就不能再去引用其它对象,但是被引用的对象本身可以修改。

final int x = 1;
// x = 2; 
final A y = new A();
y.a = 1;


2. 方法
声明方法不能被子类重写。
       private 方法隐式地被指定为 final,如果在子类中定义的方法和基类中的一个 private 方法签名相同,此时子类的方
法不是重写基类方法,而是在子类中定义了一个新的方法。
3. 类
声明类不允许被继承。
       以上是关于final的基本定义,现在说说final在实际应用中三种用法,final关键字一般情况下可以用来修饰类、方法和变量,其中变量又包括成员变量和局部变量。

 (1)修饰类

  当用final修饰一个类时,表明这个类不能被继承。也就是说,如果一个类你永远不会让他被继承,就可以用final进行修饰。final类中的成员变量可以根据需要设为final,但是要注意final类中的所有成员方法都会被隐式地指定为final方法。

 (2)修饰方法

       使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继承类修改它的含义;第二个原因是效率。在早期的Java实现版本中,会将final方法转为内嵌调用。但是如果方法过于庞大,可能看不到内嵌调用带来的任何性能提升。

 (3)修饰变量

  修饰变量是final用得最多的地方,首先了解一下final变量的基本语法:

  对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。

举个例子:

Class rock{
    private final int i = 0;
    public rock() {
              i = 1;
              final Object obj = new Object();
              obj = new Object();
}


}

上面的一段代码中,对变量i和obj的重新赋值都报错了。

 


static
1. 静态变量
静态变量:又称为类变量,也就是说这个变量属于类的,类所有的实例都共享静态变量,可以直接通过类名来
访问它。静态变量在内存中只存在一份。
实例变量:每创建一个实例就会产生一个实例变量,它与该实例同生共死。

public class A {
private int x; // 实例变量
private static int y; // 静态变量
public static void main(String[] args) {
// int x = A.x; // Non-static field 'x' cannot be referenced from a static context
A a = new A();
int x = a.x;
int y = A.y;
}
}


2. 静态方法
静态方法在类加载的时候就存在了,它不依赖于任何实例。所以静态方法必须有实现,也就是说它不能是抽象方法。

public abstract class A {
public static void func1(){
}
// public abstract static void func2(); // Illegal combination of modifiers: 'abstract'
and 'static'
}


只能访问所属类的静态字段和静态方法,方法中不能有 this 和 super 关键字。

public class A {
private static int x;
private int y;
public static void func1(){
int a = x;
// int b = y; // Non-static field 'y' cannot be referenced from a static context
// int b = this.y; // 'A.this' cannot be referenced from a static context
}
}


3. 静态语句块
静态语句块在类初始化时运行一次。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值