續(xù)上期《程序是什么械哟?何為程序疏之?》本文以Java為例分析一下數(shù)據(jù)是什么?何為數(shù)據(jù)暇咆?
數(shù)據(jù)
數(shù)據(jù)是什么锋爪?數(shù)據(jù)在計(jì)算機(jī)內(nèi)都是以二進(jìn)制的形式存在的,對(duì)于我們常人來(lái)說(shuō)爸业,操作起來(lái)十分困難其骄,當(dāng)然,大家都知道人類是有創(chuàng)造力的扯旷,為了方便操作數(shù)據(jù)拯爽,高級(jí)語(yǔ)言引進(jìn)了“數(shù)據(jù)類型”和“變量”的概念。
數(shù)據(jù)類型
數(shù)據(jù)類型用于對(duì)數(shù)據(jù)的歸類钧忽,方便理解和操作毯炮,Java語(yǔ)言提供了八種基本類型(六種數(shù)字類型(四個(gè)整數(shù)型,兩個(gè)浮點(diǎn)型)耸黑,一種字符類型桃煎,還有一種布爾型):
整數(shù)類型:
byte:
- byte數(shù)據(jù)類型是8位、有符號(hào)的大刊,以二進(jìn)制補(bǔ)碼表示的整數(shù)为迈;
- 最小值是 -128(-2^7);
- 最大值是 127(2^7-1)缺菌;
- 默認(rèn)值是 0曲尸;
- byte 類型用在大型數(shù)組中節(jié)約空間,主要代替整數(shù)男翰,因?yàn)?byte 變量占用的空間只有 int 類型的四分之一另患;
- 例子:byte a = 100,byte b = -50蛾绎。
short:
- short 數(shù)據(jù)類型是 16 位昆箕、有符號(hào)的以二進(jìn)制補(bǔ)碼表示的整數(shù);
- 最小值是 -32768(-2^15)租冠;
- 最大值是 32767(2^15 - 1)鹏倘;
- Short 數(shù)據(jù)類型也可以像 byte 那樣節(jié)省空間。一個(gè)short變量是int型變量所占空間的二分之一顽爹;
- 默認(rèn)值是 0纤泵;
- 例子:short s = 1000,short r = -20000镜粤。
int:
- int 數(shù)據(jù)類型是32位捏题、有符號(hào)的以二進(jìn)制補(bǔ)碼表示的整數(shù)玻褪;
- 最小值是 -2,147,483,648(-2^31);
- 最大值是 2,147,483,647(2^31 - 1)公荧;
- 一般地整型變量默認(rèn)為 int 類型带射;
- 默認(rèn)值是 0 ;
- 例子:int a = 100000, int b = -200000循狰。
long:
- long 數(shù)據(jù)類型是 64 位窟社、有符號(hào)的以二進(jìn)制補(bǔ)碼表示的整數(shù);
- 最小值是 -9,223,372,036,854,775,808(-2^63)绪钥;
- 最大值是 9,223,372,036,854,775,807(2^63 -1)灿里;
- 這種類型主要使用在需要比較大整數(shù)的系統(tǒng)上;
- 默認(rèn)值是 0L程腹;
- 例子: long a = 100000L钠四,Long b = -200000L。("L"理論上不分大小寫跪楞,但是若寫成"l"容易與數(shù)字"1"混淆缀去,不容易分辯。所以最好大寫甸祭。)
小數(shù)類型 :
float:
- float 數(shù)據(jù)類型是單精度缕碎、32位、符合IEEE 754標(biāo)準(zhǔn)的浮點(diǎn)數(shù)池户;
- float 在儲(chǔ)存大型浮點(diǎn)數(shù)組的時(shí)候可節(jié)省內(nèi)存空間咏雌;
- 默認(rèn)值是 0.0f;
- 浮點(diǎn)數(shù)不能用來(lái)表示精確的值校焦,如貨幣赊抖;
- 例子:float f1 = 234.5f。
double:
- double 數(shù)據(jù)類型是雙精度寨典、64 位氛雪、符合IEEE 754標(biāo)準(zhǔn)的浮點(diǎn)數(shù);
- 浮點(diǎn)數(shù)的默認(rèn)類型為double類型耸成;
- double類型同樣不能表示精確的值报亩,如貨幣;
- 默認(rèn)值是 0.0d井氢;
- 例子:double d1 = 123.4弦追。
字符類型:
char:
- char類型是一個(gè)單一的 16 位 Unicode 字符;
- 最小值是 \u0000(即為0)花竞;
- 最大值是 \uffff(即為65,535)劲件;
- char 數(shù)據(jù)類型可以儲(chǔ)存任何字符;
- 例子:char letter = 'A';。
真假類型:
boolean:
- boolean數(shù)據(jù)類型表示一位的信息零远;
- 只有兩個(gè)取值:true 和 false苗分;
- 這種類型只作為一種標(biāo)志來(lái)記錄 true/false 情況;
- 默認(rèn)值是 false遍烦;
- 例子:boolean one = true。
實(shí)例
public class Test { static boolean bool; static byte by; static char ch; static double d; static float f; static int i; static long l; static short sh; static String str; public static void main(String[] args) { System.out.println("Bool :" + bool); System.out.println("Byte :" + by); System.out.println("Character:" + ch); System.out.println("Double :" + d); System.out.println("Float :" + f); System.out.println("Integer :" + i); System.out.println("Long :" + l); System.out.println("Short :" + sh); System.out.println("String :" + str); } }
Bool :false
Byte :0
Character:
Double :0.0
Float :0.0
Integer :0
Long :0
Short :0
String :null
基本數(shù)據(jù)類型都有對(duì)應(yīng)的數(shù)組類型躺枕,數(shù)組表示固定長(zhǎng)度的同種數(shù)據(jù)類型的多條記錄服猪,這些數(shù)據(jù)在內(nèi)存中挨在一起存放。
比如說(shuō)拐云,一個(gè)自然數(shù)可以用一個(gè)整數(shù)類型數(shù)據(jù)表示罢猪,100個(gè)連續(xù)的自然數(shù)可以用一個(gè)長(zhǎng)度為100的整數(shù)數(shù)組表示。一個(gè)字符用一個(gè)char表示叉瘩,一段文字可以用一個(gè)char數(shù)組表示膳帕。
Java是一個(gè)面向?qū)ο蟮恼Z(yǔ)言,除了基本數(shù)據(jù)類型薇缅,其他都是對(duì)象類型 危彩,對(duì)象到底是什么呢?
簡(jiǎn)單的說(shuō)泳桦,對(duì)象是由基本數(shù)據(jù)類型汤徽、數(shù)組和其他對(duì)象組合而成的一個(gè)東西,以方便對(duì)其整體進(jìn)行操作灸撰。
比如說(shuō)谒府,一個(gè)學(xué)生對(duì)象,可以由如下信息組成:
- 姓名:一個(gè)字符數(shù)組
- 年齡:一個(gè)整數(shù)
- 性別:一個(gè)字符
- 入學(xué)分?jǐn)?shù):一個(gè)小數(shù)
對(duì)象是根據(jù)類創(chuàng)建的浮毯。在Java中完疫,使用關(guān)鍵字new來(lái)創(chuàng)建一個(gè)新的對(duì)象。創(chuàng)建對(duì)象需要以下三步:
- 聲明:聲明一個(gè)對(duì)象债蓝,包括對(duì)象名稱和對(duì)象類型壳鹤。
- 實(shí)例化:使用關(guān)鍵字new來(lái)創(chuàng)建一個(gè)對(duì)象。
- 初始化:使用new創(chuàng)建對(duì)象時(shí)饰迹,會(huì)調(diào)用構(gòu)造方法初始化對(duì)象器虾。
例子
public class Puppy{ public Puppy(String name){ //這個(gè)構(gòu)造器僅有一個(gè)參數(shù):name System.out.println("小明的名字是 : " + name ); } public static void main(String[] args){ // 下面的語(yǔ)句將創(chuàng)建一個(gè)Puppy對(duì)象 Puppy myPuppy = new Puppy( "tommy" ); } }
小明的名字是 : tommy
日期在Java中也是一個(gè)對(duì)象,內(nèi)部表示為整形long蹦锋。
就像世界萬(wàn)物的組成兆沙,都是由元素周期表中的108個(gè)基本元素組成的,基本數(shù)據(jù)類型就相當(dāng)于化學(xué)中的基本元素莉掂,而對(duì)象就相當(dāng)于世界萬(wàn)物葛圃。
變量
Java語(yǔ)言支持的變量類型有:
1.類變量:獨(dú)立于方法之外的變量,用 static 修飾。
- 類變量也稱為靜態(tài)變量库正,在類中以 static 關(guān)鍵字聲明曲楚,但必須在方法之外。
- 無(wú)論一個(gè)類創(chuàng)建了多少個(gè)對(duì)象褥符,類只擁有類變量的一份拷貝龙誊。
- 靜態(tài)變量除了被聲明為常量外很少使用。常量是指聲明為public/private喷楣,final和static類型的變量趟大。常量初始化后不可改變。
- 靜態(tài)變量?jī)?chǔ)存在靜態(tài)存儲(chǔ)區(qū)铣焊。經(jīng)常被聲明為常量逊朽,很少單獨(dú)使用static聲明變量。
- 靜態(tài)變量在第一次被訪問(wèn)時(shí)創(chuàng)建曲伊,在程序結(jié)束時(shí)銷毀叽讳。
- 與實(shí)例變量具有相似的可見(jiàn)性。但為了對(duì)類的使用者可見(jiàn)坟募,大多數(shù)靜態(tài)變量聲明為public類型岛蚤。
- 默認(rèn)值和實(shí)例變量相似。數(shù)值型變量默認(rèn)值是0懈糯,布爾型默認(rèn)值是false灭美,引用類型默認(rèn)值是null。變量的值可以在聲明的時(shí)候指定昂利,也可以在構(gòu)造方法中指定届腐。此外,靜態(tài)變量還可以在靜態(tài)語(yǔ)句塊中初始化蜂奸。
- 靜態(tài)變量可以通過(guò):ClassName.VariableName的方式訪問(wèn)犁苏。
- 類變量被聲明為public static final類型時(shí),類變量名稱一般建議使用大寫字母扩所。如果靜態(tài)變量不是public和final類型围详,其命名方式與實(shí)例變量以及局部變量的命名方式一致。
- 實(shí)例變量:獨(dú)立于方法之外的變量祖屏,不過(guò)沒(méi)有 static 修飾助赞。
- 實(shí)例變量聲明在一個(gè)類中,但在方法袁勺、構(gòu)造方法和語(yǔ)句塊之外雹食;
- 當(dāng)一個(gè)對(duì)象被實(shí)例化之后,每個(gè)實(shí)例變量的值就跟著確定期丰;
- 實(shí)例變量在對(duì)象創(chuàng)建的時(shí)候創(chuàng)建群叶,在對(duì)象被銷毀的時(shí)候銷毀吃挑;
- 實(shí)例變量的值應(yīng)該至少被一個(gè)方法、構(gòu)造方法或者語(yǔ)句塊引用街立,使得外部能夠通過(guò)這些方式獲取實(shí)例變量信息舶衬;
- 實(shí)例變量可以聲明在使用前或者使用后;
- 訪問(wèn)修飾符可以修飾實(shí)例變量赎离;
- 實(shí)例變量對(duì)于類中的方法逛犹、構(gòu)造方法或者語(yǔ)句塊是可見(jiàn)的。一般情況下應(yīng)該把實(shí)例變量設(shè)為私有梁剔。通過(guò)使用訪問(wèn)修飾符可以使實(shí)例變量對(duì)子類可見(jiàn)虽画;
- 實(shí)例變量具有默認(rèn)值。數(shù)值型變量的默認(rèn)值是0憾朴,布爾型變量的默認(rèn)值是false狸捕,引用類型變量的默認(rèn)值是null喷鸽。變量的值可以在聲明時(shí)指定众雷,也可以在構(gòu)造方法中指定;
- 實(shí)例變量可以直接通過(guò)變量名訪問(wèn)做祝。但在靜態(tài)方法以及其他類中砾省,就應(yīng)該使用完全限定名:ObejectReference.VariableName。
- 局部變量:類的方法中的變量混槐。
- 局部變量聲明在方法编兄、構(gòu)造方法或者語(yǔ)句塊中;
- 局部變量在方法声登、構(gòu)造方法狠鸳、或者語(yǔ)句塊被執(zhí)行的時(shí)候創(chuàng)建,當(dāng)它們執(zhí)行完成后悯嗓,變量將會(huì)被銷毀件舵;
- 訪問(wèn)修飾符不能用于局部變量;
- 局部變量只在聲明它的方法脯厨、構(gòu)造方法或者語(yǔ)句塊中可見(jiàn)铅祸;
- 局部變量是在棧上分配的。
- 局部變量沒(méi)有默認(rèn)值合武,所以局部變量被聲明后临梗,必須經(jīng)過(guò)初始化,才可以使用稼跳。
例子public class Variable{ static int allClicks=0; // 類變量 String str="hello world"; // 實(shí)例變量 public void method(){ int i =0; // 局部變量 } }
為了操作數(shù)據(jù)盟庞,需要把數(shù)據(jù)存放到內(nèi)存中,所謂內(nèi)存在程序看來(lái)就是一塊有地址編號(hào)的連續(xù)的空間汤善,放到內(nèi)存中的某個(gè)位置后茫经,為了方便地找到和操作這個(gè)數(shù)據(jù)巷波,需要給這個(gè)位置起一個(gè)名字。編程語(yǔ)言通過(guò)變量這個(gè)概念來(lái)表示這個(gè)過(guò)程卸伞。
聲明一個(gè)變量抹镊,比如 int a其實(shí)就是在內(nèi)存中分配了一個(gè)空間,這個(gè)空間存放int數(shù)據(jù)類型荤傲,a指向這個(gè)內(nèi)存空間所在的位置垮耳,通過(guò)對(duì)a操作即可操作a指向的內(nèi)存空間,比如a=5這個(gè)操作即可將a指向的內(nèi)存空間的值改為5遂黍。
之所以叫變量终佛,是因?yàn)樗硎镜氖莾?nèi)存中的位置,這個(gè)位置存放的值是可以變化的雾家。
雖然變量的值是可以變化的铃彰,但名字是不變的,這個(gè)名字應(yīng)該代表程序員心目中這塊內(nèi)存位置的意義芯咧,這個(gè)意義應(yīng)該是不變的牙捉,比如說(shuō)這個(gè)變量int second表示時(shí)鐘秒數(shù),在不同時(shí)間可以被賦予不同的值敬飒,但它表示的就是時(shí)鐘秒數(shù)邪铲。之所以說(shuō)應(yīng)該是因?yàn)檫@不是必須的,如果你非要起一個(gè)變量名叫age但賦予它身高的值无拗,計(jì)算機(jī)也拿你沒(méi)辦法带到。
重要的話再說(shuō)一遍!變量就是給數(shù)據(jù)起名字英染,方便找不同的數(shù)據(jù)揽惹,它的值可以變,但含義不應(yīng)變四康。再比如說(shuō)一個(gè)合同搪搏,可以有四個(gè)變量:
- first_party: 含義是甲方
- second_party: 含義是乙方
- contract_body: 含義是合同內(nèi)容
- contract_sign_date: 含義是合同簽署日期
這些變量表示的含義是確定的,但對(duì)不同的合同箭养,他們的值是不同的慕嚷。
經(jīng)常會(huì)有小伙伴會(huì)使用像a,b,c,hehe,haha這種無(wú)意義的名字,給變量起一個(gè)有意義的名字吧毕泌!
通過(guò)聲明變量喝检,每個(gè)變量賦予一個(gè)數(shù)據(jù)類型和一個(gè)有意義的名字,我們就告訴了計(jì)算機(jī)我們要操作的數(shù)據(jù)撼泛。
給變量起一個(gè)有意義的名字可參考:http://www.reibang.com/p/97e9880aaf4b
有了數(shù)據(jù)之后挠说,該怎么操作數(shù)據(jù)呢?繼續(xù)更新愿题,敬請(qǐng)期待如何操作數(shù)據(jù)损俭?