大战熟女丰满人妻av-荡女精品导航-岛国aaaa级午夜福利片-岛国av动作片在线观看-岛国av无码免费无禁网站-岛国大片激情做爰视频

Java教程
Java標識符與關鍵字
Java變量
Java數據類型
Java運算符
Java控制語句
Java方法
Java面向對象
Java對象的創建和使用
Java封裝
Java中static和this
Java繼承
Java方法覆蓋和多態
Java super
Java基礎練習題

Java實例變量是一個引用

在以上內容學習的過程當中,其實大家已經接觸過實例變量是引用的情況,不知道吧!例如在Student學生類當中有一個屬性“String name;”,這個屬性/實例變量name描述的是學生的姓名,name變量的數據類型是String類型,String類型不屬于基本數據類型的范疇,也就是說String類型屬于引用數據類型,換句話說String類型應該對應一個String.class文件才對,String是一個類,和我們自己定義的類沒什么區別,是這樣嗎?一起來看看JDK的java源代碼:

jdk java源代碼位置

圖9-25:jdk java源代碼位置

String類源代碼位置

圖9-26:String類源代碼位置

String類源代碼

圖9-27:String類源代碼

通過查看源代碼得知,其實String是一個class,和我們定義的類沒有區別,它和基本數據類型還是不一樣的(int i = 10,i變量是基本數據類型,i變量中存儲的就是10),也就是說String name = “zhangsan”,實際上name變量中存儲的并不是”zhangsan”這個字符串,因為name是一個引用,那name中必然存儲的是”zhangsan”字符串對象的內存地址。因為之前我們說過引用的概念,什么是引用:引用就是一個變量,只不過該變量中存儲的是java對象的內存地址。也就是說,以前所講內容中使用內存圖描述字符串的時候都是有偏差的。我們來修正一下,請看代碼:

public class Student {
	int no;
	String name;
	int age;
	boolean sex;
	public Student(int _no,String _name,int _age,boolean _sex){
		no = _no;
		name = _name;
		age = _age;
		sex = _sex;
	}
}
public class StudentTest {
	public static void main(String[] args) {
		Student s1 = new Student(110 , "zhangsan" , 20 , true);
		System.out.println("學號:" + s1.no);
		System.out.println("姓名:" + s1.name);
		System.out.println("年齡:" + s1.age);
		System.out.println("性別:" + (s1.sex ? "男" : "女"));
	}
}

以上程序的運行結果請看下圖:

Java實例變量

圖9-28:運行結果

將以上內存結構圖畫出來,請看:

修正字符串對象的內存

圖9-29:修正字符串對象的內存

通過上圖可以看到,Student對象當中的name這個“屬性/實例變量”是一個引用,保存的不是”zhangsan”字符串,而是字符串對象的內存地址。(按照實際來說,字符串”zhangsan”是在方法區的字符串常量池當中,這個后期再繼續進行修正)。接下來,我們再來看看當屬性是其他類型引用的時候,請看代碼:

public class Date {
	int year; 
	int month;
	int day; 
	public Date(){
	}
	public Date(int year1 , int month1 , int day1){
		year = year1;
		month = month1;
		day = day1;
	}
}
public class Vip {
	int id;
	String name;
	Date birth;
	public Vip(){
	}
	public Vip(int _id,String _name,Date _birth){
		id = _id;
		name = _name;
		birth = _birth;
	}
}
public class VipTest {
	public static void main(String[] args) {
		Date d = new Date(1983 , 5 , 6);
		Vip v = new Vip(123 , "jack" , d);
		System.out.println("編號=" + v.id);
		System.out.println("姓名=" + v.name);
		System.out.println("生日=" + v.birth.year + "年" + v.birth.month + "月" + v.birth.day + "日");
	}
}

運行結果如下圖所示:

Java應用

圖9-30:運行結果

以上程序main方法的內存結構圖如下所示:

Java應用

圖9-31:Date d = new Date(1983 , 5 , 6);

Java應用

圖9-32:Vip v = new Vip(123 , "jack" , d);

通過以上內容的學習大家掌握當對象的屬性是一個引用的時候內存圖是怎樣的了嗎?其實只要記住一點,任何“引用”當中存儲一定是對象的內存地址,“引用”不一定只是以局部變量的形式存在,例如以上程序,其中Vip類當中的birth屬性就是一個“引用”,它是一個實例變量。當一個對象的屬性是引用的時候應該如何訪問這個引用所指向的對象呢?這里其實有一個規律,大家記住就行:類當中有什么就可以“.”什么,例如:Vip類中有birth屬性,那么就可以v.birth,那么v.birth是Date類型,Date類當中有year屬性,那么就可以v.birth.year,你懂了嗎?

全部教程
主站蜘蛛池模板: 久久综合精品不卡一区二区 | 欧美综合社区 | 中文字幕不卡一区2021 | 女胁师~牝奴隷调教 | 亚洲色图国产精品 | 亚洲免费中文 | 午夜性爽视频男人的天堂在线 | 欧美18videosex护士 | 中文字幕一区二区三 | 羞羞网站在线免费观看 | www.99精品视频在线播放 | 在线视频福利 | 精品久久久久久 | 再猛点深使劲爽日本免费视频 | 性欧美极品xxxx欧美一区二区 | 国产精品99久久久久久宅男 | 色综合合久久天天给综看 | 在线观看精品国产 | 久久在线资源 | 久久综合色婷婷 | 国产一国产一级毛片视频在线 | 亚洲视频欧洲视频 | 狠色狠色狠狠色综合久久 | 欧美日韩一级片在线观看 | 亚洲香蕉| 精品国产品香蕉在线观看 | 国产欧美综合精品一区二区 | 97精品在线 | 老子午夜伦影理论片 | 欧美深度肠交惨叫 | 国产成人久久精品麻豆二区 | 亚洲欧美日韩伦中文 | 欧美日韩中文亚洲v在线综合 | 久久国产热这里只有精品8 久久国产三级 | 久久99热这里只有精品免费看 | 国产操女人| 啪啪99久久综合精品色 | 精品国产综合 | a一级特黄日本大片 s色 | 狠狠色综合久久丁香婷婷 | 一区二区三区网站在线免费线观看 |