[英]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方法內部訪問該方法,則需要執行以下操作:
以下是完整的代碼,顯示了如何實現所需的輸出:
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.