創(chuàng)建變量
將介紹一個(gè)簡單的名為Virus的類對象竿开,它活著的唯一目標(biāo)就是盡可能地繁殖屠尊。
為完成其工作棺耍,Virus需要執(zhí)行多種操作虱咧,這些都被實(shí)現(xiàn)為類的行為熊榛。
方法需要的信息將存儲在屬性中。
對象的屬性表示對象為完成其任務(wù)所需的變量腕巡。
這些變量可以為的數(shù)據(jù)類型玄坦,如整數(shù)、字符、浮點(diǎn)數(shù)煎楣,也可以為數(shù)組或類對象豺总,如String和Calendar。
對象的變量可以在對象所包含的任何一個(gè)方法中使用择懂。
按照慣例喻喳,在創(chuàng)建類的class語句之后和在創(chuàng)建方法之前,需要立即創(chuàng)建變量困曙。
Virus對象需要一種方式指出文件已感染病毒表伦。有些計(jì)算機(jī)病毒修改這樣的字段,
即存儲文件最后修改時(shí)間的字段慷丽,例如绑榴,有些病毒可能將時(shí)間從7:41:20改為7:41:61。
由于正常情況下盈魁,文件不可能在一分鐘的第 61 秒修改翔怎,因此該時(shí)間表明文件感染了病毒。
Virus對象在整型變量newSeconds中使用了86這個(gè)數(shù)值(由于秒數(shù)的最大值為60杨耙,
因此在這個(gè)數(shù)值是不正確的)赤套。下面的語句創(chuàng)建一個(gè)名為Virus的類,
它有一個(gè)名為newSeconds的屬性以及其他兩個(gè)屬性:
public class Virus {
? ? public int newSeconds = 86;
? ? public String author = "Sam Snett";
? ? int maxFileSize = 30000;
}
這3個(gè)變量都是類的屬性珊膜,它們是newSeconds容握、maxFileSize和author。
在變量聲明語句中指定public等關(guān)鍵字稱為訪問控制车柠,
因?yàn)樗鼪Q定了其他類對象將如何使用該變量或它們是否可以使用這些變量剔氏。
將變量聲明為public后,使用Virus對象的其他程序也可以來修改該變量的值竹祷。
例如谈跛,如果另外一個(gè)程序?yàn)閿?shù)值92賦予了特別重要的意義,則它可以將newSeconds變量的值改為92塑陵。
下面的語句創(chuàng)建一個(gè)名為influenza的Virus對象感憾,并設(shè)置其變量newSeconds:
Virus influenza = new Virus();
influenza.newSeconds = 92;
在Virus類中,變量author也是public的令花,因此也可以在其他程序中隨意修改它的值阻桅。
另一個(gè)變量masFileSize只能在其所屬的類中使用。
將類中的變量聲明為public時(shí)兼都,該類將無法控制其他程序使用該變量的方式嫂沉。
在很多情況下,這可能不是問題扮碧。例如趟章,可將author變量該為任何表示病毒作者的名字或假名。
如果制造病毒的作者被起訴,則他的名字可能會出現(xiàn)在法庭文件中尤揣,所以不要用一個(gè)很傻的名字搔啊。
通過限制變量的訪問權(quán)限柬祠,可避免因其他程序設(shè)置錯誤的值而導(dǎo)致錯誤北戏。
就Virus類而言,如果newSeconds被設(shè)置為60或更小漫蛔,就不能成為報(bào)告文件是否感染病毒的可靠方式嗜愈。
因?yàn)橛行┪募o論是否感染病毒,都可能在那個(gè)秒數(shù)被保存莽龟。
要避免Virus類出現(xiàn)這樣的問題蠕嫁,需要做下面的兩項(xiàng)工作:
將變量從public該為protected或private,后兩者提供了更嚴(yán)格的訪問限制毯盈;
添加修改變量值的行為以及向其他程序報(bào)告變量的值剃毒。
protected變量只能在其所在的類、該類的子類以及同一個(gè)包(package)的其他類中使用搂赋。
包是一組用于完成相同目標(biāo)的相關(guān)類赘阀。例如,java.util包包含很多有用的工具脑奠,
如日期和時(shí)間編程以及文件歸檔基公。通過在Java程序中使用import和*,如import java.util.*宋欺,
就可以在程序中很容易地引用包中的所有類轰豆。
private變量的訪問限制比protected變量更嚴(yán)格,只能在其所屬的類中使用齿诞。
除非對變量做任何修改都不會影響類的功能酸休,否則應(yīng)將變量聲明為private或protected。
下面的語句將變量newSeconds聲明為private的:
private int newSeconds = 86;
如果要讓其他程序能夠使用變量newSeconds祷杈,必須創(chuàng)建相應(yīng)的行為雨席,