请对这段java代码进行解释

来源:百度知道 编辑:UC知道 时间:2024/09/20 16:43:26
class A
{
private A(){
System.out.println("A()");
}
public static A makeA(){
return new A();
}
}
public class Test
{
static int indexA=3;
static A[] a=new A[3];//这里是什么意思为什么不会报错原构造函数不是私有的嘛?这里不是有个分号吗?怎么不是一条语句?
{
for(A x:a)
x=A.makeA();
}
public static A getA(){
if(indexA>0)
return a[--indexA];
else
return null;
}
//public static A makeA()上面都可以为什么这样不可以?
// {
// return new A();
//}
// public static A x=new A();为什么又不可以?
public static void main(String[] args){
Test t=new Test();
t.getA();
}
}

首先static A[] a=new A[3]这个语句的意思是:创建一个其元素为A类对象,长度为3的数组A,注意这里只是声明了一个数组,数组里的元素均为null,即还没有初始化.即是还没有A类的对象被实例化了.如果明白了这一点.那么理解下面的就易了.

私有的构造函数不能访问,也就不能用私用的构造函数实例化对象.
return new A(); 这语句是实例化一个A类对象,但A()构造函数是私用的,所以不能实例化.

public static A x=new A();同样道理.

t.getA(); 这里会全部返回null;前提是这个程序能运行了.

A的构造函数是私有的,所以不能用new。
但是new A[3]这个是生成指向A这种类型的引用数组,并没有进行实例化。换言之,一个类不能被实例化,但是不代表不能定义指向这种类型的引用。

static A[] a=new A[3] 这个就是array呀。。array的长度是3....