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