Java 显示对象数组的结果

Java 显示对象数组的结果,java,arrays,object,for-loop,nullpointerexception,Java,Arrays,Object,For Loop,Nullpointerexception,这个类编译得很好: public class Student{ //define variables static String name; //define constructor public Student(String n){ name = n; } //define method to display name public static void displayStudent(){ System.out.println("Name: " + name); } }

这个类编译得很好:

public class Student{
//define variables
static String name;

//define constructor
public Student(String n){
    name = n;
}

//define method to display name
public static void displayStudent(){
    System.out.println("Name: " + name);
}
}
下面是我试图调用
displaystustudent()
方法的类,但是我从
for循环中得到java.lang.NullPointerException异常

public class MyClass{

//define array of object Student
private Student[] students;

//constructor
MyClass(int size){
Student[] students = new Student[size];
}

    //define method to display the students variable
public void displayAllStudents(){
    for (int i = 0; i <= students.length; i++){
        students[i].displayStudent();
    }
}
公共类MyClass{
//定义对象的数组
私立学生[]名学生;
//建造师
MyClass(整数大小){
学生[]学生=新学生[人数];
}
//定义方法以显示students变量
公共图书馆所有学生(){

对于(int i=0;i,您在此处创建一个局部变量

MyClass(int size){
    // only exists inside this scope.
    Student[] students = new Student[size];
}
但是这个构造函数是本地的,所以你马上就把它扔掉了。我想你是想设置字段
学生

MyClass(int size) {
    students = new Student[size];
}
注意:这只是创建一个指向学生的引用数组,这些引用都是
null
。因此,您还需要为每个索引创建一个学生对象

MyClass(int size) {
    students = new Student[size];
    for (int i = 0; i < size; i++)
        students[i] = new Student();
}
MyClass(整数大小){
学生=新生[人数];
对于(int i=0;i

注意公共模式是如何使用
的,您正在这里创建一个局部变量

MyClass(int size){
    // only exists inside this scope.
    Student[] students = new Student[size];
}
但是这个构造函数是本地的,所以你马上就把它扔掉了。我想你是想设置字段
学生

MyClass(int size) {
    students = new Student[size];
}
注意:这只是创建一个指向学生的引用数组,这些引用都是
null
。因此,您还需要为每个索引创建一个学生对象

MyClass(int size) {
    students = new Student[size];
    for (int i = 0; i < size; i++)
        students[i] = new Student();
}
MyClass(整数大小){
学生=新生[人数];
对于(int i=0;i

注意公共模式是如何使用的,这是因为数组的大小 把代码改成

public void displayAllStudents(){
for(int i=0;i


如果一个数组有3个元素,array.length函数返回3。从0、1、2、3开始计算,则有4个数字。它将返回数组越界异常或空指针异常。

这是因为该数组的大小 把代码改成

public void displayAllStudents(){
for(int i=0;i

如果数组有3个元素array.length函数返回3。从0、1、2、3开始计算,则有4个数字。它将返回数组越界异常或空指针异常。

有关解决方案,请参阅链接:

学生[]的声明部分在您的类中进行了更改:“MyClass”

-您正在使用数组大小调用构造函数,因此使用您选择的大小初始化Student[](在本例中硬编码为10)

希望这对您有所帮助。

请参阅链接以了解解决方案:

学生[]的声明部分在您的类中进行了更改:“MyClass”

-您正在使用数组大小调用构造函数,因此使用您选择的大小初始化Student[](在本例中硬编码为10)


希望这对您有所帮助。

正如我们看到的,您正在使用student数组,但您没有调用student类的构造函数(带参数),因此它们在名称字段中包含null作为存储值,并给出null指针异常

   class MyClass{

//define array of object Student
private Student[] students;

//constructor
MyClass(int size){
Student[] students = new Student[size];
}

    //define method to display the students variable
public void displayAllStudents(){
    for (int i = 0; i <= students.length; i++){
        students[i].displayStudent();//this will give null pointer execption because student 
        // objects are not inisialised and cointains null 
    }
}
}
class-MyClass{
//定义对象的数组
私立学生[]名学生;
//建造师
MyClass(整数大小){
学生[]学生=新学生[人数];
}
//定义方法以显示students变量
公共图书馆所有学生(){

对于(int i=0;i我们可以看到,您使用的是学生数组,但您没有调用学生类的构造函数(带参数),因此它们在名称字段中包含null作为存储值,并给出null指针异常

   class MyClass{

//define array of object Student
private Student[] students;

//constructor
MyClass(int size){
Student[] students = new Student[size];
}

    //define method to display the students variable
public void displayAllStudents(){
    for (int i = 0; i <= students.length; i++){
        students[i].displayStudent();//this will give null pointer execption because student 
        // objects are not inisialised and cointains null 
    }
}
}
class-MyClass{
//定义对象的数组
私立学生[]名学生;
//建造师
MyClass(整数大小){
学生[]学生=新学生[人数];
}
//定义方法以显示students变量
公共图书馆所有学生(){

对于(int i=0;i)您正在创建一个数组,但还没有用对象填充它,正如您所发现的,它只有空引用。首先用
new Student(…)填充每个数组元素
在尝试使用它之前。您正在创建一个数组,但还没有用对象填充它,正如您所发现的,它只有空引用。请先用
new Student(…)填充每个数组元素
在尝试使用它之前。是的,我一修好它,就得到了一排边界,所以我用
students.length-1修好了,现在可以了。谢谢!是的,我一修好它,就得到了一排边界,所以我用
students.length-1修好了,现在可以了。谢谢!@Radik这应该是对这个问题的评论。@sirio如果这是nswer解决了您的问题,然后请将其标记为正确答案。这是因为所有关于堆栈溢出的帖子都旨在对未来的访问者有所帮助,并且带有已接受答案的帖子肯定会更有帮助。@Radik这应该是对问题的评论。@sirio如果此答案解决了您的问题,请将其标记为正确答案直接回答。这是因为堆栈溢出上的所有帖子都是为了对未来的访问者有所帮助,并且带有已接受答案的帖子肯定会更有帮助。您应该在此处包含代码,而不是通过链接。抱歉。这是我的第一篇帖子。下次将处理它。您应该在此处包含代码,而不是通过链接。抱歉。这是我的第一篇帖子这是我的第一篇文章。下次我会处理的。