您的位置:首页 > 编程语言 > Java开发

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

2017-11-19 13:08 211 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: