我最近開始學習編程。我知道它看起來毫無意義,但我想知道為什么我不能在本地類中宣告我的物件。我可以在我創建的第二個類中宣告它,但不能在主類中宣告。
這是我的代碼:
public class User {
public String name;
public String surname;
public int age;
public static String companyname;
User student = new User();
student.name = "Jack";
}
uj5u.com熱心網友回復:
您的 IDE 給您的錯誤,與您的宣告有關
student.name = "Jack";
您可以宣告 a User,就像您在這里所做的那樣
User student = new User();
它將被解釋為您的User類的屬性。但是,您不能在方法之外撰寫任何邏輯。您只能宣告欄位以定義類的屬性。如果您想將名稱 Jack 分配給您的學生變數,您有三個選項:
- 定義一個建構式,它接受一個名稱并在實體化期間將值 Jack 傳遞給您的學生實體。
public class User {
public String name;
public String surname;
public int age;
public static String companyname;
User student = new User("Jack");
public User(String name){
this.name = name;
}
}
- 在實體塊中包含您的陳述句。
public class User {
public String name;
public String surname;
public int age;
public static String companyname;
User student = new User();
{
student.name = "Jack";
}
}
- 在類建構式中初始化你的學生欄位。
public class User {
public String name;
public String surname;
public int age;
public static String companyname;
User student = new User();
public User(){
this.student.name = "Jack";
}
}
但是,所有這些選項都沒有什么意義,它們都是為了讓您了解可以撰寫此類陳述句的背景關系。此外,正如評論中所報告的,User在您的User類中創建一個新的將在每次創建一個新的時溢位堆疊User,因為每個用戶的創建都會觸發另一個用戶的創建。
我想你只是想User用它的實際欄位(名字、姓氏、年齡、公司名)定義一個,然后在“測驗”背景關系中宣告一個學生,就像一個主要方法。這很可能是您嘗試做的事情:
public class User {
public String name;
public String surname;
public int age;
public static String companyname;
public User(String name, String surname, int age) {
this.name = name;
this.surname = surname;
this.age = age;
}
public static void main(String[] args) {
User student = new User("Jack", "Black", 15);
}
}
附帶說明一下,您應該將類??的屬性(其欄位)定義為private. public訪問修飾符通常用于物件(其方法)提供的服務。這也稱為information hidingor encapsulation。基本上,您希望隱藏類的內部實作并保護其狀態(其欄位)免受任何濫用,例如分配不一致的值。您的方法是規范對內部狀態的訪問的“外層”,它們包含防止誤用和對物件狀態進行不一致更改的邏輯。
無封裝
public class User {
public String name;
public String surname;
public int age;
public User(String name, String surname, int age) {
this.name = name;
this.surname = surname;
this.age = age;
}
public static void main(String[] args) {
User student = new User("Jack", "Black", 15);
//misuse of the object's attributes
student.age = -20;
}
}
封裝
public class User {
private String name;
private String surname;
private int age;
public User(String name, String surname, int age) {
this.name = name;
this.surname = surname;
this.age = age;
}
public void setAge(int age) {
if (age < 0 || age > 120) {
return;
}
this.age = age;
}
public int getAge() {
return age;
}
public static void main(String[] args) {
User student = new User("Jack", "Black", 15);
student.age = -20; //gives you an error, you cannot access anymore this field directly
student.setAge(-20); //It won't update its age to -20
System.out.println(student.getAge()); //It still prints 15
student.setAge(25); //Regulates the update and allows the assignment
System.out.println(student.getAge()); //Prints 25
}
}
這篇文章很好地解釋了封裝的概念:
https://www.geeksforgeeks.org/encapsulation-in-java/
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/476144.html
