Java:如何将参数传递给构造函数?未定义的方法错误?

时间:2013-07-24 15:53:19

标签: java class constructor arguments undefined

好的,所以我需要一些基本的帮助。这是我正在尝试学习的教程(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);
        }
    }
}

提前感谢您的帮助:)

5 个答案:

答案 0 :(得分: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");

答案 1 :(得分:2)

如果我假设您已正确编写Student类而未考虑 Java命名约定StudentData是方法,那么调用方法StudentData的方法是不正确的。首先创建Student类的对象,然后调用方法

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

 public static void main(String[] args){
    new OrigClass().new Student().StudentData(17, "Jack");// Considering Student is inner class
  }

答案 2 :(得分: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);
   }
}

答案 3 :(得分: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);
    }
}

答案 4 :(得分:0)

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

  1. 创建一个备用方法(例如:将其命名为xyz()),该方法将为您的内部类Student创建一个对象(例如:std),然后使用语法std调用 StudentData 方法.StudentData(17,“ JACK”);。
  2. 接下来的事情是通过创建外部类的对象(例如:obj)并通过像obj.alternateMethodName();这样的obj调用替代方法,从静态main方法中调用此替代方法。

下面是完整的代码,显示了如何实现所需的输出:

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);
    }
}

}