1

好的,所以我需要一些基本的帮助。这是我正在尝试学习的教程(http://docs.oracle.com/javase/tutorial/java/javaOO/classes.html),但我对如何将数据实际传递给它感到困惑。问题是我在尝试学习 java 时已经启动了我的 Pascal 大脑......

这是我的代码。我究竟做错了什么?

public class OrigClass{
    public static void main(String[] args){
        StudentData(17, "Jack"); //error here: the method StudentData(int, String) is undefined for the type OrigClass
    }

    public class Student{
        public void StudentData(int age, String name){
            int sAge = age;
            String sName = name;
            System.out.println("Student Name: " + sName + " | Student Age: " + sAge);
        }
    }
}

在此先感谢您的帮助 :)

4

5 回答 5

5

构造函数不仅仅是一个方法:你需要给它赋予与类相同的名称,并使用new运算符调用它,如下所示:

public class Student{
    // Declare the fields that you plan to assign in the constructor
    private int sAge;
    private String sName;
    // No return type, same name as the class
    public Student(int age, String name) {
        // Assignments should not re-declare the fields
        sAge = age;
        sName = name;
        System.out.println("Student Name: " + sName + " | Student Age: " + sAge);
    }
}
// This goes in the main()
Student sd = new Student(17, "Jack");
于 2013-07-24T15:54:42.947 回答
2

如果我假设您在Student没有考虑Java 命名约定的情况下正确编写了类并且StudentData是方法,那么调用方法的方式StudentData是不正确的。首先创建Student类的对象,然后调用该方法

更新:考虑到学生是内部班级

 public static void main(String[] args){
    new OrigClass().new Student().StudentData(17, "Jack");// Considering Student is inner class
  }
于 2013-07-24T15:56:02.377 回答
2

您的代码中有几个问题。

首先,您已经像普通方法一样定义了 StudentData 的构造函数——构造函数没有返回类型。

其次,您需要使用new关键字在 Java 中创建非原始对象。

public class OrigClass{
    public static void main(String[] args){
        new Student(17, "Jack"); 
    }
}

public class Student{
   public Student(int age, String name){
       int sAge = age;
       String sName = name;
       System.out.println("Student Name: " + sName + " | Student Age: " + sAge);
   }
}
于 2013-07-24T15:56:19.283 回答
1
public class OrigClass {

    public static void main(String[] args) {
        Student obj = new Student();
        obj.studentData(17, "Jack");

    }
}

public class Student {   

    public void studentData(int sName, String sAge) {
        System.out.println("Student Name: " + sName + " | Student Age: " + sAge);
    }
}
于 2013-07-24T16:05:27.550 回答
0

因此,首先,您不能从静态方法(public static void main(String[] args) )中访问非静态成员( StudentData(int age, String name))。因此,如果您想从静态 main 方法中访问该方法,您需要执行以下操作:

  1. 创建一个替代方法(例如:将其命名为 xyz()),它将为您的内部类 Student 创建一个对象(例如:std),然后 使用语法 std.StudentData(17,"JACK"); 调用 StudentData 方法 .
  2. 接下来通过创建外部类的对象(例如:obj)并在此 obj 的帮助下调用备用方法(如 obj.alternateMethodName();),从静态主方法调用此备用方法;

这是完整的代码,展示了如何实现所需的输出:

public class OrigClass{
public static void main(String[] args){
    OrigClass obj= new OrigClass();
    obj.getStudentData();
}
public void getStudentData(){
    Student std = new Student();
    std.StudentData(17, "Jack");
}

public class Student{
    public void StudentData(int age, String name){
        int sAge = age;
        String sName = name;
        System.out.println("Student Name: " + sName + " | Student Age: " + sAge);
    }
}

}

于 2018-06-29T20:28:26.547 回答