今天看了劍指offer中的第二章-面試需要的基礎知識,對其中的一段C#面試代碼,比較感興趣,想着能否給改成java,結果沒改成,出現了問題,本文是針對這一點來總結一下,下面是C#與java代碼,但是在eclipse環境下,java代碼如此改寫,編譯器提醒構造函數有問題,究其原因,問題是由java的構造函數前的訪問修飾符public與特殊修飾符static所導致的。
java 構造函數,可以被訪問修飾符修飾,而不能被特殊修飾符修飾;(在編譯器經過測試)
訪問修飾符: public (最常用,其他類的任何位置都可以訪問)
protected(能夠在同一包中被子類訪問)
什么都不寫,""(能夠被同一包里的類訪問)
private(經常使用的單例模式中)
特殊修飾符: static (靜態) final(最終) abstract(抽象) synchronized(同步) 這些都不能夠放在構造函數前使用
1 class A{ 2 public A(String text){ 3 console.writeln(text); 4 } 5 } 6 7 class B(){ 8 static A a1=new A("a1"); 9 A a2=new A("a2"); 10 11 static B(){ 12 a1=new A("a3"); 13 } 14 15 public B(){ 16 a2=new A("a4"); 17 } 18 } 19 class Program{ 20 B b=new B(); 21 }
1 public class A { 2 public A(String aStr){ 3 System.out.println("A 構造函數 初始化:"+aStr); 4 } 5 } 6 7 class B { 8 static A a = new A("a1"); 9 A aa = new A("a2"); 10 11 static B() { 12 a = new A("a3"); 13 } 14 15 public B() { 16 aa = new A("a4"); 17 } 18 public static void main(String[] args) { 19 B b=new B(); 20 } 21 }
