final 最终的,不可改变的 final修饰变量时表示这个变量是一个常量既给它初值后就不能改变了 对于对象变量来说其引用指向的对象不变 final修饰方法时,则方法不能被重写. final修饰类,表示这个类不能被继承.这个类中的方法默认是final的。
final 是针对引用的, 它使得一个引用只能指向最初得对象, 说白了就是引用的内存地址是不可变得, 所以内容是可以变的。 final StringBuffer bf = new StringBuffer("aaa"); bf.append("eeeeeeeeeee");//正常 bf = new StringBuffer("ddd");//报错
final 类型的属性,是针对每一个对象所有的,实例化对象的时候必须给出其初始化值, 而且初始化完成后,就不能再改变他的值。不同的实例对象对同一个final属性可以有不同的值。 static final 的类型的属性,是针对类所有的,每一实例对象有共同拥有一个static final属性。
1:属性可以被声明为final,对于final属性来说,构造对象之后就不允许改变他们的值。 2:final还可以用于 不可变类(如果类中的每个方法都不会改变其对象,这种类就是不可变类,例如:String 类) 像Date类就不是个不可变类,Private final Date d;仅仅意味着存储在d变量中的对象引用在对象构造之后不能被改变,而不是意味着d对应的对象是一个常量,任何方法都可以对d引用的对象调用setTime更改器。 3:final方法,不能被子类重写。 4:如果想阻止人们利用某个类定义子类,可用final,用了final修饰符就表明这个类是final类,这个final类中方法默认为final,但是不包括属性。
final 修饰变量时该变量就成了常量不能改, final 修饰方法时如果其他类继承该方法所属的类时该方法就不能被覆盖了 final 修饰类时该类就不能被其他的类继承了
其实java无法做到完全的常量。 比如 final StringBuilder builder = new StringBuilder(); builder.append("Hello"); 常量的说法感觉不好。
可以拿来用,可以给别人用,但是不能改变它。
final修饰变量时表示这个变量是一个常量既给它初值后就不能改变了
对于对象变量来说其引用指向的对象不变
final修饰方法时,则方法不能被重写.
final修饰类,表示这个类不能被继承.这个类中的方法默认是final的。
它使得一个引用只能指向最初得对象,
说白了就是引用的内存地址是不可变得,
所以内容是可以变的。
final StringBuffer bf = new StringBuffer("aaa");
bf.append("eeeeeeeeeee");//正常
bf = new StringBuffer("ddd");//报错
而且初始化完成后,就不能再改变他的值。不同的实例对象对同一个final属性可以有不同的值。
static final 的类型的属性,是针对类所有的,每一实例对象有共同拥有一个static final属性。
2:final还可以用于 不可变类(如果类中的每个方法都不会改变其对象,这种类就是不可变类,例如:String 类)
像Date类就不是个不可变类,Private final Date d;仅仅意味着存储在d变量中的对象引用在对象构造之后不能被改变,而不是意味着d对应的对象是一个常量,任何方法都可以对d引用的对象调用setTime更改器。
3:final方法,不能被子类重写。
4:如果想阻止人们利用某个类定义子类,可用final,用了final修饰符就表明这个类是final类,这个final类中方法默认为final,但是不包括属性。
final 修饰方法时如果其他类继承该方法所属的类时该方法就不能被覆盖了
final 修饰类时该类就不能被其他的类继承了
比如
final StringBuilder builder = new StringBuilder();
builder.append("Hello");
常量的说法感觉不好。
final 方法不能重写
final 类不能继承