关于静态方法和静态字段的问题

来源:百度知道 编辑:UC知道 时间:2024/05/14 01:58:58
下面的程序我错在哪里了??
private static String[] CarNo和private String[] CarNo有什么区别,
我知道静态的用类名.成员名来访问,不需要实例化对象,其他的有什么区别么

public class t5_2
{
public static void main(String[] args)
{
new RaceCar("1","jack");
new RaceCar("2","Rose");
new RaceCar("3","smith");
RaceCar.getCount();
}
}
class RaceCar
{
private static String[] CarNo;//字段成员
private static String[] driverName;
static int count;
static
{
System.out.println("比赛开始了");
count=0;
}
public RaceCar(String i,String name)
{
CarNo[count]=i;
driverName[count]=name;
count++;
System.out.println("赛道上有"+count+"辆赛车");
}
static void getCount()
{
for(int i=0;i<count;i++)
{
System.out.println("他是"+CarNo[i]+"号车手"+driverName[i]);

类的所有实例共享一个变量(静态变量)
你的程序错误,是由于
private static String[] CarNo;//字段成员
private static String[] driverName;
没有初使化造成的,改成:
private static String[] CarNo=new String[5];//字段成员
private static String[] driverName=new String[5];
就可以了

static的成员共享同一个内存地址。 可以把它理解成C中的全局变量

static型的数据可以在不用初始化该类的前提下使用,原因何在?

其实static的变量保存在内存的堆中,而其他变量等再在栈中,堆中的数据是在程序运行之前就已经分配好了的,所以不用初始化就可以使用,而其他变量则必须初始化,从而在栈中为它划分内存地址,并初始化

当然,既然保存在堆中,所以一个类也就只保存一份该变量值