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
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
相关文章推荐
- java 自我知识总结(十八)final finalize finally
- java 自我知识总结(九) 二分查找
- java 自我知识总结(二十)异常
- java基础知识要点总结之几个重要关键字(关于static、this、final、)
- java 自我知识总结(十一)构造函数 继承 及类的加载顺序
- java 自我知识总结(六) 栈 堆 队列
- java 自我知识总结(一) 原码 反码 补码 移码
- java 自我知识总结(四) 随机数
- java 自我知识总结(十四)抽象abstract
- java 自我知识总结(七) 冒泡排序法
- java 自我知识总结 (十)构造函数特点
- java 自我知识总结(十五)接口
- java 自我知识总结(二) 逻辑运算符
- java 自我知识总结(十六)匿名内部类
- java 自我知识总结(五)双重循环制作图形
- java 自我知识总结(八)数组的复制
- java 自我知识总结 (十九)lamdba表达式和内部类
- Java final和static总结
- Java关键字final、static使用总结
- JAVA基础知识精华总结