黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

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

Java實例變量是一個引用

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

jdk java源代碼位置

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

String類源代碼位置

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

String類源代碼

圖9-27:String類源代碼

通過查看源代碼得知,其實String是一個class,和我們定義的類沒有區(qū)別,它和基本數據類型還是不一樣的(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”是在方法區(qū)的字符串常量池當中,這個后期再繼續(xù)進行修正)。接下來,我們再來看看當屬性是其他類型引用的時候,請看代碼:

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屬性就是一個“引用”,它是一個實例變量。當一個對象的屬性是引用的時候應該如何訪問這個引用所指向的對象呢?這里其實有一個規(guī)律,大家記住就行:類當中有什么就可以“.”什么,例如:Vip類中有birth屬性,那么就可以v.birth,那么v.birth是Date類型,Date類當中有year屬性,那么就可以v.birth.year,你懂了嗎?

全部教程
主站蜘蛛池模板: 久久亚| 久久天堂视频 | 日韩欧美一区二区三区中文精品 | 欧美大成色www永久网站 | 色婷婷狠狠久久综合五月 | 国产三级大片 | 国产高清一区二区三区四区 | 美女私密福利第一导航 | 亚洲一级免费毛片 | 欧美日本在线三级视频 | 丁香色综合 | 亚洲导航深夜福利 | 91国语精品自产拍在线观看性色 | 日韩欧美h | 黄色片大全在线观看 | 一个人看的www日本高清视频 | 西西人体大胆77777视频 | 久久精品8 | 国产香蕉久久精品综合网 | 可以在线看黄的网站 | 日韩在线天堂免费观看 | 欧美亚洲日本国产 | 国产视频你懂的 | 国产伦精品一区二区免费 | 亚洲大香伊人蕉在人依线 | 成人私人影院在线观看网址 | 国产一级一片免费播放刺激 | 欧美精品福利在线视频 | 欧美日韩一区二区亚洲 | 第一页在线播放 | 狠狠色婷婷狠狠狠亚洲综合 | 日韩专区亚洲精品欧美专区 | 日本成人福利视频 | 日韩免费一区 | 国产午夜在线观看视频播放 | 国产小视频免费观看 | 五月网 | 黄视频网站大全 | 92看片淫黄大片欧美看国产片 | 99爱在线精品视频网站 | 久久久午夜视频 |