簡體   English   中英

Java:如何將參數傳遞給構造函數? 未定義的方法錯誤?

[英]Java: how to pass arguments into constructor? Undefined method error?

好的,所以我需要一些基本的幫助。 這是我想從中學習的教程( 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);
        }
    }
}

先謝謝您的幫助 :)

構造函數不僅僅是一個方法:您需要給它一個與類相同的名稱,並使用一個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");

如果我假設您沒有考慮Java命名約定就正確編寫了Student類,而StudentData是方法,則調用方法StudentData方法是不正確的。首先創建Student類的對象,然后調用該方法

更新:考慮到學生是內部階級

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

您的代碼中有幾個問題。

首先,您已經像普通方法一樣定義了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);
   }
}
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);
    }
}

因此,首先,您不能從靜態方法( public static void main(String [] args) )內部訪問非靜態成員( StudentData(int age,String name )。 因此,如果要從靜態main方法內部訪問該方法,則需要執行以下操作:

  1. 創建一個替代方法(例如:將其命名為XYZ()),這將創建一個對象:為你的內部類學生(例如STD),然后調用StudentData方法與語法std.StudentData(17,“傑克”); 。
  2. 接下來,通過創建外部類的對象(例如obj)並通過此obj(如obj.alternateMethodName();)調用替代方法,從靜態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);
    }
}

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM