Java中的類是屬於引用數據類型,並且所有的引用數據類型在使用過程中都要通過關鍵字 new來開闢新的內存空間,當某個對象擁有了內存空間後纔可以實現成員屬性信息的保存。
引用數據類型中有兩部分最爲重要的內存:
- 【heap】堆內存:保存的是對象的具體信息(成員屬性),在程序之中堆內存空間的開闢是通過new完成的。
- 【stack】棧內存:保存的是一塊堆內存的地址,即通過地址找到堆內存,而後找到對象內容,可以理解爲對象名稱保存在棧內存之中。
當使用了關鍵字 new進行內存空間的開闢後都會爲指定類型的對象進行堆內存空間的開闢,在堆內存中會保存有相應的成員屬性信息。這樣當對象調用類中方法進成員屬性信息時,會從對象對應的堆內存中獲取相應的內容。
例78:類引用數據類型使用分析
public class JavaDemo073 {
public static void main(String[] args) {
Person03 per = new Person03();// 【1】聲明並實例化對象
per.name = "張三";// 【2】爲成員屬性賦值
per.age = 18;// 【3】爲成員屬性賦值
per.tell();// 進行方法的調用
}
}
class Person03 {
String name;
int age;
public void tell() {
System.out.println("姓名:" + name + "、年齡:" + age);
}
}
所有的堆內存都會有相應的內存地址,同時棧內存會保存堆內存的地址數據。
例79:對象實例化處理
public class JavaDemo074 {
public static void main(String[] args) {
Person04 per = null;// 【1】聲明對象
per = new Person04();// 【2】實例化對象
per.name = "張三";// 【3】爲成員屬性賦值
per.age = 19;// 【4】爲成員屬性賦值
per.tell();// 進行方法的調用
}
}
class Person04 {
String name;
int age;
public void tell() {
System.out.println("姓名:" + name + "、年齡:" + age);
}
}
注意:對象使用前首先必須進行實例化
例80:產生異常的代碼
public class JavaDemo075 {
@SuppressWarnings("null")
public static void main(String[] args) {
Person05 per = null;// 聲明對象
// per = new Person05();
per.name = "張三";// 爲成員屬性賦值
per.age = 19;// 爲成員屬性賦值
per.tell();// 進行方法的調用
}
}
class Person05 {
String name;
int age;
public void tell() {
System.out.println("姓名:" + name + "、年齡:" + age);
}
}
異常信息 NullPointerException (空指向異常),這種異常只會在引用數據類型上產生,並且只要是進行項目的開發,都有可能出現此類異常,而唯一的解決辦法就是:查找引用數據類型,並觀察其是否被正確實例化。