今天看了剑指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 }