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

Posted GeoTechMAN

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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,感谢原文作者!

以上是关于Java的Final和C#的Const,Readonly比较分析(转载)的主要内容,如果未能解决你的问题,请参考以下文章

C# const和readonly修饰符的区别

Java入门系列之final

c#中const与readonly区别

java的final用法

c# lock static对象, 跪求高手。

Dart 中 final和const 区别