zoukankan      html  css  js  c++  java
  • java 中的final

    在编程语言中都有某种方式,告知编译器一块数据是恒定不变的。有两个需求
    1. 一个永不改变的编译器常量

    2. 一个在运行时被初始化的值,而这个值不会被改变


    Java中,使用final修饰变量实现这两个需求

     
    private final int valueOne = 9;  
    
    private static final int VALUE_TWO = 99;  
    
    public static final int VALUE_THREE = 39;  
    
    //运行时被初始化的值,且值不会被改变  
    
    private final int i4 = rand.nextInt(20);  
    
    static final int INT_5 = rand.nextInt(20); 

    final修饰基本数据类型时,使数据恒定不变

    final修饰对象引用时,使引用恒定不变。一旦引用被初始化指向一个对象,就无法再把它改为指向另一个对象。
    然而,对象其自身是可以修改的

    final修饰方法参数列表中的参数,意味着无法在方法中更改参数引用所指向的对象。这一特性主要用来向
    匿名内部类传递数据


    另外,在Java中

    final修饰方法,目的是明确禁止子类覆盖这个方法
    final修饰类,禁止继承

    在C#中是如何实现这两个需求的呢?

    需求1:编译器常量

    const修饰常量,必须能在编译时用于计算。常量总是静态的但不必(实际上,是不允许)在常量声明中包含修饰符static

    需求2:运行期常量

    readonly关键字
    有时可能需要一些变量,其值不应改变,但在运行之前其值是未知的。 
    C#为这种情形提供了另一种类型的变量:只读字段

    另外,在C#中

    sealed修饰方法,目的是明确禁止子类覆盖这个方法
    sealed修饰类,禁止继承

  • 相关阅读:
    搜索存储过程中的关键字
    替换回车换行
    js 常用正则表达式
    获取存储过程返回值
    DataReader 转datatable
    文件打包下载
    My97DatePicker设置当天之后的日期不可选变灰色
    嵌套类引用实例化的外部类的方法
    可叠加定义的成员变量的赋值及操作(权限)
    Java中List中remove的实质
  • 原文地址:https://www.cnblogs.com/tiancai/p/6952251.html
Copyright © 2011-2022 走看看