• Java的Final和C#的Const,Readonly比较分析(转载)


    Java里面没有readonly关键字,预留了const的关键字,目前还没有实际用途,在Java中,跟这两个关键字比较接近的是final;
    C#中,两者都存在并可用。两者修饰的全局变量或局部变量都不能被修改。
    下面是Java中final与C#中const以及readonly之间的联系和区别:
    1) C#中,const可以修饰全局变量和局部变量,但readonly只能修饰全局变量。
    2) C#中,const修饰的全局变量或局部变量必须在声明的时候初始化,因为是静态,所以无法使用构造方法初始化,当需要调用const修饰的全局变量时,
    可以通过类直接调用,但const修饰的局部变量则无法通过类调用,并且作用范围只能为局部。
    3) readonly修饰的全局变量可以在声明时初始化,也可以在构造方法中被初始化,如果readonly所修饰的全局变量在两个地方都初始化了, 那么最后这
    个全局变量的值是在构造方法中被初始化, readonly可以在全局变量和构造方法中同时初始化。
    4) 在Java中,final可以修饰的全局变量和局部变量.其中全局变量可以选择在声明时进行初始化也可以使用构造方法初始化(二选一),而const则因为
    是静态所以无法使用构造方法, 除此之外, final还可以修饰方法的形式参数, 表示这个形式参数的值在方法体内不可以被改变,否则会产生编译错误。另外, final
    还可以修饰方法,表示该方法不可以被子类覆盖(override), 修饰类,表示该类不可以被继承,修饰类时,跟C#的sealed关键字意思一样。
     
    只读关键字初始化列表:
    修饰符           局部变量       全局变量       构造方法       全局变量和构造方法关系
    Const            支持               支持               不支持           ————————————
    Readonly      不支持           支持               支持              同一全局变量同时初始化后以构造方法为准
    Final              支持               支持               支持              同一全局变量只能在两者之间选一处进行初始化
     
    C#示例:
    using System;
    using System.Collections.Generic;
    using System.Text;
     
    namespace ConsoleApplication1
    {
        class Program
        {
           
            readonly int n=5;
            readonly int m;
            const int q = 6;
            public Program()
            {
                //n = 9; //当readonly全局变量n被类和构造方法两处同时初始化时,将以最后初始化的构造方法为准
                m = 7;
                //q = 8; //错误,const本身就是静态,所以无法使用构造方法
            }
            static void Main()
            {
                Program ct = new Program();
                //ct.n = 12;            //错误, 必须声明时初始化变量,而且不能在局部变量中初始化
                const int p = 3;        //允许在局部变量中初始化值
                //readonly int o=4;     //错误,readonly不能在局部变量中初始化
                Console.WriteLine("n的值为{0}", ct.n);
                Console.ReadLine();
            }
        }
    }
    -------------------------------------------------------------------------------------------------------
    注:本文转载于:http://www.cnblogs.com/yinhaiming/articles/1837316.html,感谢原文作者!
  • 相关阅读:
    线索二叉树的构建和遍历------小甲鱼数据结构和算法
    小甲鱼数据结构和算法-----二叉树的构建和前序遍历
    python爬虫爬取煎蛋网妹子图片
    C语言实现汉诺塔问题
    C语言实现中缀表达式转后缀表达式
    深度优先算法--判断迷宫的一个起点能否到达一个终点
    python 爬取36K新闻
    栈的操作实现逆波兰表达式的计算
    python 实现汉诺塔问题
    【POJ 3258】River Hopscotch
  • 原文地址:https://www.cnblogs.com/GISQZC/p/5641743.html
Copyright © 2020-2023  润新知