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();
}
}
}