java基础——final
来源:互联网 发布:梦幻诛仙手游软件礼包 编辑:程序博客网 时间:2024/05/22 15:25
关于继承的小技巧:
- 将所有的字段都设置为private,将所有的方法都设置为public。
- 我们采取的最好的做法是保持成员的private 状态——无论如何都应保留对基 础的实施细节进行修改的权利。在这一前提下,可通过protected 方法允许类的继承者进行受到控制的访问。
Final详解
最初的定义是“不可变”,为效率和设计。
- final修饰一个类的时候,这个类不能被继承,里面的所有方法都隐藏的指定为final类型
- final修饰一个方法的时候,这个方法不可以被继承的类调用
final修饰变量
当修饰的为基础类型的变量时,其数值一旦初始化后就不可以改变,当为引用类型时,则在其初始化后不能指向其它对象。
例1.
public class Test { public static void main(String[] args) { String a = "hello2"; final String b = "hello"; String d = "hello"; String c = b + 2; String e = d + 2; System.out.println((a == c)); System.out.println((a == e)); }}
result:
truefalse
这里面就是final变量和普通变量的区别了,当final变量是基本数据类型以及String类型时,如果在编译期间能知道它的确切值,则编译器会把它当做编译期常量使用。也就是说在用到该final变量的地方,相当于直接访问的这个常量,不需要在运行时确定。
例2.
被final修饰的引用变量的数值可变
public class Test { public static void main(String[] args) { final MyClass myClass = new MyClass(); System.out.println(++myClass.i); }}class MyClass { public int i = 0;}
Final VS static
public class Test { public static void main(String[] args) { MyClass myClass1 = new MyClass(); MyClass myClass2 = new MyClass(); System.out.println(myClass1.i); System.out.println(myClass1.j); System.out.println(myClass2.i); System.out.println(myClass2.j); }}class MyClass { public final double i = Math.random(); public static double j = Math.random();}
输出:j每次相同而i每次不想同。
原因分析:static保证一个变量只有一个副本,而final保证变量不可变。
- 局部内部类和匿名内部类只能访问局部final变量
局部内部类是定义在一个方法或者一个作用域里面的类,它和成员内部类的区别在于局部内部类的访问仅限于方法内或者该作用域内。
会造成数据不一致性,这样就达不到原本的意图和要求。为了解决这个问题,java编译器就限定必须将变量a限制为final变量,不允许对变量a进行更改(对于引用类型的变量,是不允许指向新的对象),这样数据不一致性的问题就得以解决了。
阅读全文
0 0
- java基础——final
- Java基础—关键字final
- 【Java基础】——之Final
- Java基础——final关键字
- JAVA基础6.57——final关键字
- java基础——try catch final
- java基础——try catch final
- final方法、final变量、final类、final对象—Java
- java基础—java中使用final关键字的总结
- Java基础(五)——final修饰符
- java基础——final、finally、finalize区别
- Java基础——final,finally,finalize的区别
- java基础篇(十五)——final
- Java基础面试——final、static注意点
- java——final
- Java关键字—final
- Java基础: 关键字 final
- java基础--final用法
- F_A day2
- TensorFlow--tf.Variable
- rpm、srpm软件管理器介绍
- 名片识别SDK
- bootstrapTable 动态表头生成
- java基础——final
- 在Mac上安装office2016破解版
- [转] MyEclipse 快捷键
- Out of Hay
- B树C语言实现-创建、插入、删除
- 导出函数__declspec(dllexport)
- 用Servlet获取表单数据
- 生成32位,16进制的UUID
- IOS开发类之间的继承关系 两张树状图片