java构造函数修饰符
今天看了剑指offer中的第二章-面试需要的基础知识,对其中的一段C#面试代码,比较感兴趣,想着能否给改成java,结果没改成,出现了问题,本文是针对这一点来总结一下,下面是C#与java代码,但是在eclipse环境下,java代码如此改写,编译器提醒构造函数有问题,究其原因,问题是由java的构造函数前的访问修饰符public与特殊修饰符static所导致的。
java 构造函数,可以被访问修饰符修饰,而不能被特殊修饰符修饰;(在编译器经过测试)
访问修饰符: public (最常用,其他类的任何位置都可以访问)
protected(能够在同一包中被子类访问)
什么都不写,""(能够被同一包里的类访问)
private(经常使用的单例模式中)
特殊修饰符: static (静态) final(最终) abstract(抽象) synchronized(同步) 这些都不能够放在构造函数前使用
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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 }