final、static(Java)和const、static(C#)

声明:本文转自 http://hi.baidu.com/leo_han/item/fe4cb338cda75b8ff4e4ad32 背景:最近研究android,听了同事的报告。讲的很多,主要就是什么c#和java怎么类似,于是没有多想什么,就按照以前C#的编程习惯对待java。 现在看看以下等价关系: C#中的static 和Java中的static 简单,两者用法完全是一致的。从两方面讨论: 1. 变量是属于类的,不是实例级别的。只能通过类名调用,不能通过实例调用。 2. 如果在定义时就赋值了,那么在类初始化的时候,最先完成所有静态变量的赋值。但是要注意,所有静态变量的初始化顺序是无法确定的。 C# 中的const 和Java中的finnal 很长一段时间我一直认为两者是相同的作用,无非是变量初始化后不能更改,即只能在定义时或者构造函数中赋值。然而这仅仅只是片面的,下面将为大家详细分析: 1.修饰变量 准确的说C#中的const 等价于 Java中的static final,也就是说,Java中final不具有static的功能。而C#中的const具有static的功能。因此在C#中 public static const string 等将于 public const string。 2.修饰类和方法 此时Java中的final类似C#中的sealed,就是说,final修饰的类不能被继承,final修饰的方法不能被覆盖。而C#中的const不能修饰类和方法。 问题: 1. 私有静态成员的作用(private static 变量) 字面表示私有的,类外不能使用;静态的,全局变量。看上去很矛盾,又不能被类外使用,要全局的有什么用。问得好,类中全局也是很有意义的,例如 private static int a = 5,那么就可以保证变量a在类的初始化过程中将被优先初始化(在构造函数执行之前)。这样如果对象A的初始化需要对象B的实例,那么就可以用这种申明,以保证在类A在构造函数中能够使用类B的实例。同时private又能够保证类B的实例只能在类A中使用,起到很好的密封作用。 2. 私有最终成员作用(private final 变量) 在类构造函数完成前必须对该成员完成初始化,一旦定义不许更改;该成员只能在本类中使用。实例,子类中都不能使用。 private static final修饰的成员在申明的时就被赋值,保证在构造函数中可以被使用,一个被private static final修饰的成员通常表示其他组件的一个实例,且变量是类中的全局变量。 private final 修饰的成员在构造中被赋值,表示它是该类全局的私有成员变量,且该类的构造需要传入他们的初始值,才能完成类的初始化。

你可能感兴趣的:(java,C#)