java 自我知识总结(十三)final

来源:互联网 发布:平安淘宝信用卡 编辑:程序博客网 时间:2024/06/10 15:50
final 最终的;
final 修饰成员必须有程序员 显示的设定初始值。因为成员变量是随着类初始化或对象初始化的。(可在代码块
或者构造函数中初始化)
注:类初始化的时候系统为类变量分配内存并分配默认值.在创建对象时,系统会为对象的实例变量分配
内存,并分配默认值。
final修饰局部变量在定义的时候不赋初始值,后面如果对其赋值,只能赋值一次,因为系统不会对局部变量
进行初始化
class A{
}
final : 类
修饰的类不可以被继承
方法
修饰的方法不可以被重写
属性:
public class Demo {
int a ;//0
static int b;
final int c ; //常量。不可改变的。 初始化只能执行一次。
{
c=20;
}
Demo(){
c=20; // 报错
}
}
// 由于 a 和 b 都是常量,编译器可以识别a+b 是否超过 byte范围
final byte a = 10;
final byte b = 20;
byte c = a+b;
特点:
final修饰的局部变量:可以不对其初始化编译不出错,但是用到时必须初始化。
final修饰的成员变量:必须对其初始化(可在构造函数构造代码块中初始化),
final修饰的变量,编译器会对其编译期优化。
// 不同的构造函数可以对常量做不同的初始化操作。构造函数只执行一次
public class Demo {
final int a ;
Demo(){
a = 20;
}
Demo(int b){
a = 30;
}
}


静态常量必须定义时就对其初始化
public class Demo {
// 静态常量通常使用大写作为常量名
static final String USER_ST = "aa";
}
下面的做法可以:
public class Demo {
static final String USER_ST = "aa";
final double pai = 3.14;
public static void main(String[] args) {
A a = new A();
a.test();
}
}
class A extends Demo{
double pai = 4.0;
void test(){
System.out.println(pai);
}
}
// 声明的类对象
public static void main(String[] args) {
final A a1 = new A(); //a1 地址不可以被改变,始终指向堆内存中的对象。
a1.b="aaaa"; // 堆中的变量可以改变
A a2 = new A();
a1 = a2;// 试图改变堆的指向,出现错误
}
final int a = 5+2;// 赋值运算 OK
阅读全文
0 0
原创粉丝点击