java 这样在一个类中定义一个对象数组为什么会出错

如题所述

首先纠正你一个错误,第二句(第二张图第六行)应该是

a[0] = new Student();

而不是

Student[0] = new Student();

因为你定义的数组名字叫 a 而不是 Student。


但是,你的主要错误并不只在这里。而是因为在 Java 中,在一个类的方法外只能定义这个类的成员及其他方法,而不能进行任何对这个类成员的操作,包括修改成员。这里你使用

Student[] a = new Student[3];

来定义了一个长度为 3 的数组 a 作为 www 类的成员,这是可以的。但是随后你使用

a[0] = new Student();

初始化 a 中的对象,这就相当于在一个方法的外部来更改类的成员。这种操作是不允许的。所以你有如下两种改法:


第一种是创建一个方法(比如说类的构造函数或者 main 函数),然后把第二句放在这个方法里。

public class Www {

    Student[] a = new Student[3];
    
    public Www() {
        a[0] = new Student();
    }
    
}

第二种是将第二句用大括号括起来。

public class Www {

    Student[] a = new Student[3];
    {
        a[0] = new Student();
    }
    
}

追问

真是谢谢 我还想问一下

    类的属性在定义的时候直接赋值算是方法外更改成员吗? 

    第二种方法的大括号是什么意思,作用是什么?

    谢谢

追答

超出字数限制,只能截图给你了。


温馨提示:内容为网友见解,仅供参考
第1个回答  2015-07-24
声明没有错的,但是给数组赋值是必须在{}内的
比如
String[] a=new String[1];
{
a[0]=new String("a");
}

java 这样在一个类中定义一个对象数组为什么会出错
但是,你的主要错误并不只在这里。而是因为在 Java 中,在一个类的方法外只能定义这个类的成员及其他方法,而不能进行任何对这个类成员的操作,包括修改成员。这里你使用 Student[] a = new Student[3];来定义了一个长度为 3 的数组 a 作为 www 类的成员,这是可以的。但是随后你使用 a[0] =...

java在一个类中定义一个属性,main方法中为什么点不出来!!
\/\/数组定义完之后要赋值的public class Teacher{ private String name = "sun"; public static void main(String[] args) { Teacher[] teacher = new Teacher[2]; \/** * 你新定义的数组是空的,虽然长度是2,可是内容都是null。 下面给teacher数组赋值 *\/ teacher[0]...

java,list:定义一个list数组怎么没法定义?该怎么定义...
arrayList本身就是一个数组了没必要那样定义。List集合包括JavaList接口以及List接口的所有实现类,List集合中的元素允许重复,各元素的顺序放是对象插入的顺序。ArrayList:底层的数据结构使用的是数组结构线程不同步。

java自定义类型数组
1. Student的对象都没有初始化,因为你只创建了数组对象,而数组的每个元素都为null,所以你运行的时候会抛出空指针异常。2. 你的Student类里面的score属性,也定义成了数组类型,但是你没有对这个属性初始化,在下面给课程分数赋值的时候必然会出错。

Java定义一个数组的问题。
其实称之为数组不太准确,我觉得叫做test类型的一个集合更好,这个集合中有5个对象分别是group[0]到group[4];这个test有2个属性:String类型A和double类型B;如果定义了属性,一般会在后面追加get()和set()方法,get方法对属性进行读取,set方法写入的操作。这样你就方便在main方法中操作了。public ...

在JAVA中如何定义一个对象数组,并正确使用该对象数组
public static void main(String[]args){ int a[]={3,9,8};\/\/这个是数组的静态初始化. Date days[]={new Date(1,4,2994),new Date(2,4,2004),new Date(2,5,2005)};\/\/创建了3个Date对象放在days[]数组里。 \/\/这里还有种写法。你可以先定义个数组,然后动态的进行付值。 \/\/这样写...

为什么在java中会出现无法访问对象的内部方法
这种情况可能是对象类型错误、拼写或大小写错误、对象未初始化导致的。1、对象类型错误:在编程中,一个对象必须具有所调用的方法或属性。如果尝试调用一个没有该方法或属性的对象,就会出现这个错误。例如,可能尝试在字符串上调用一个只有数组或日期对象才有的方法。2、拼写或大小写错误:如果尝试调用一...

为什么我的建立了一个父类对象数组却无法调用子类的方法
父类没定义这个方法 只能通过转换为子类对象来 调用 (Student)persons[i].set子类某方法()百度这个 java父类调用子类方法

java中定义了一个类,其中有一个对象 数组,如何比较其中任意两个对象的...
public static void main(String[] args) throws Exception { System.out.println("结果:" + compare(10.3, 1.5, CompareMark.AAB));} public static boolean compare(Object o1, Object o2, CompareMark compareMark) throws Exception { if ((!(o1 instanceof Comparable)) || (!(o2 ...

...int[3]; a[0]=0; a[1]=1; a[2]=2; }为什么这样会报错,
class Test{ 。。。\/\/这里只能定义实例变量,int a[]被认为是实例变量,a[0],a[1],a[2]不是实例变量,所以错误 } class Test{ { 。。。\/\/这里是初始化块,可以对实例变量进行初始化 } } 你也可以这样初始化int a[]class Test{ int a[]=new int[3]{0,1,2};} ...

相似回答