《《面向?qū)ο蟪绦蛟O計》第二章教學.ppt》由會員分享,可在線閱讀,更多相關《《面向?qū)ο蟪绦蛟O計》第二章教學.ppt(51頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、第二章 Java基礎,學習目標: 掌握標識符和關鍵字 熟練使用各種數(shù)據(jù)類型的定義、表示和引用 掌握算術(shù)、邏輯和布爾運算符 自動類型轉(zhuǎn)換和強制類型轉(zhuǎn)換,2.1 標識符Java保留字,標識符的命名規(guī)則,一定要牢記啊,類名首字母大寫; 符號常量名全部字母大寫; 變量名、對象名、方法名、包名等標識符全部采用小寫字母;如果標識符由多個單詞構(gòu)成,則首字母小寫,其后單詞的首字母大寫,其余字母小寫;,合法的標識符 identifier userName User_Name_sysval $change A98_23 _abc 非法的標識符 2mailroom# class A- 4 3_1the,Java
2、保留字(又稱關鍵字),關鍵字不能作為標識符; 關鍵字是具有專門的意義和用途,不能當作一般的標識符使用,這些標識符稱為保留字(reserved word),下面列出了java語言中的所有保留字: abstract do implements protected throws boolean double import public transient break else instanceof return true this throw byte extends int short try synchronized case false interface static void contin
3、ue catch final long strictpf volatile goto default char finally native super while package class float new switch const for null if private java中的關鍵字均用小寫字母表示。,數(shù)據(jù)類型與常量、變量,數(shù)據(jù)是計算機程序處理的對象,數(shù)據(jù)的類型決定了數(shù)據(jù)的表示方式、取值范圍以及可進行的操作。 基本類型包括: 整型 byte,short,int和long 浮點型 float和double 字符型 char 邏輯型boolean 引用類型(需要用戶自己定義) 數(shù)組
4、接口 類,基本數(shù)據(jù)類型,存儲沒有小數(shù)部分的數(shù)據(jù)類型Java各整數(shù)類型有固定的表數(shù)范圍和字段長度,而不受具體操作系統(tǒng)的影響,以保證Java程序的可移植性,1、整型,數(shù)值20在內(nèi)存中的存儲形式,00010100 byte(1字節(jié)) 00000000 00010100 short (2字節(jié))高位置0 00000000 00000000 00000000 00010100 int (4字節(jié)) 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00010100 Long (8字節(jié)),2、浮點型,浮點型是帶有小數(shù)部分的數(shù)據(jù)類型,包
5、括兩種不同的數(shù)據(jù)類型:float和double。 float類型的變量占用4個字節(jié)(32位), double類型的數(shù)據(jù)則需要8個字節(jié)(64位)內(nèi)存。 在許多程序中,就其表示的數(shù)值范圍而言,使用float類型來存儲浮點數(shù)已經(jīng)足夠了。,浮點數(shù)據(jù)有兩種表示形式 十進制數(shù)形式,必須含有小數(shù)點,例如: 3.14 314.0 .314 科學記數(shù)法形式,如 3.14e2 3.14E-12 Java浮點數(shù)據(jù)默認為double型,如要聲明一個常量為float型,則需在數(shù)字后面加f或F,如: double d = 3.14; float f = 3.14f;,3、布爾型(boolean),布爾數(shù)據(jù)類型用于表
6、達兩個邏輯狀態(tài)之一的值:true(真)或false(假)。 布爾型數(shù)據(jù)只有兩個值true和false,且它們不對應于任何整數(shù)值。 布爾型變量的定義如: boolean b=true;,4、字符型(char),字符型數(shù)據(jù)類型用于存放單個字符,每個字符占用2個字節(jié)(16位)的存儲空間。 將一個字符放到一個字符變量中,實際上并不是把該字符本身放到內(nèi)存單元中去,而是將該字符的相應的Unicode代碼放到存儲單元中。 char c1=t; char c2=3; char基于Unicode編碼,u前綴標志著這是一個Unicode值 例如,u0061代表字符a。,新術(shù)語,在Java技術(shù)中: 變量=屬性 方法
7、=操作 類仍然稱作類,所謂類就是一類屬性(變量)和操作(方法)的描述。其中,屬性可用一系列的變量表達,而操作用一系列方法表示。 一類人員Person: 抽象出下列屬性:名字、年齡、身高、婚否、性別,分別用變量name、age、height、marriage、sex表示(見名知義), 吃飯,講話,走路等行為可表示為相應的方法eat() , speak() ,walk()等。,用Java語言描述Person類如下:,class Person //以下5個是變量 String name; int age; double height; boolean marriage; char sex; spe
8、ak () //方法 eat () //方法 ,對Person類中某一特定的人,上述變量就有特定的值,如name(張三),age(20),height(1.76),marriage(false),sex(m)。,變量 (屬性),變量是用來存放指定類型的數(shù)據(jù),其值在程序運行過程中是可變的。 在使用Java中的每個變量之前,都必須對它進行聲明。 變量的聲明形式如下: 修飾符類型標識符號 變量名常量; 變量聲明包括指明變量的數(shù)據(jù)類型、變量名和作用域 其中數(shù)據(jù)類型說明了這個變量能存放什么樣的數(shù)據(jù)。變量名是用來標識該變量的,我們存取變量的內(nèi)容(變量的值)都是通過變量名來實現(xiàn)的。,變量名,在
9、Java中用標識符來表示變量名。象Person這個類,我們使用了name、age、tall、marriage、sex這幾個標識符,分別定義了五個變量。 程序員應該為變量取有意義的名稱,以利于程序的閱讀和理解。(見名知義) 但變量取名時還有一些限制: 變量名由字母、數(shù)字、下劃線或美元符“$”組成的 變量名不能以數(shù)字作為第一個字符 區(qū)分大小寫 下面是合法的變量名: Month(不同于month),student_name,class1,dollar$,$abc 而下面的變量名都不合法: 3a46,ab,abc-d,#ef.,變量名,變量名中字母大寫和小寫是有區(qū)別的,name和Name表示兩個不同的
10、變量名。 Java中約定,變量名以小寫字母開頭,若一個變量名由超過一個單詞所組成,則第一個單詞之后的所有單詞都以大寫字母開頭,以便于理解該變量名。 例如:anIntVar表示一個整型變量。,變量的初始化,賦予變量一個初值,稱為變量的初始化??稍诙x變量的同時進行變量的初始化,如: int anIntVar=1; char aCharVar=A; float aFloatVar=1.23f; boolean aBooleanVar=true;,也可定義變量后再單獨初始化,如:,int anIntVar; char aCharVar; float aFloatVar; boolean aBoole
11、anVar; anIntVar=1; aCharVar =A; aFloatVar=1.23f; aBooleanVar=true; 兩種方法都完成了定義變量:anIntVar、aCharVar、aFloatVar、aBooleanVar,并分別給它們賦初值:1、A、1.23、true。,變量的作用域,變量的作用域:變量的使用范圍。 假定在某代碼段中能夠使用一特定變量,則此段代碼即是該變量的作用域。,在類中聲明的類成員變量,可在該類的各個成員方法中使用; 在某個方法體中或參數(shù)表中聲明的變量,只能在該方法體中使用; 在某個語句塊中聲明的變量,只能在該語句塊中使用。,變量的作用域,public c
12、lass VariableLifeTime public static void main(String args) int sum=0; int A=10; for(int x=1;x<=5;x++) int y=0; y=y+A; sum=sum+y; System.out.print(x=+x); System.out.print(y=+y); System.out.println(sum=+sum); System.out.println(sum=+sum); ,查看結(jié)果: VariableLifeTime .java,class Person //以下5個成員變量 String na
13、me; int age; double tall; boolean marriage; char sex;//以下2個方法 eat(String eatwhat) System.out.println(name+” ate up the “+eatwhat); ,Speak(String saywhat,int time) int i; for(i=0;i
14、可以看出,變量name、age、tall、marriage、sex和變量i的作用域是不同的。變量name、age、tall、marriage、和sex的作用域是整個類,在類的方法中也可使用它們。 這種變量稱之為成員變量。確切地講,成員變量是在類當中、但不是在其類的方法中定義的變量。 而變量i是定義在speak方法中,它的作用域僅限于speak方法中。這類定義在某方法中的變量叫做局部變量。 注意:同一作用域中不可有同名的變量。如上面的代碼在speak方法中不能再定義一個名字為i的變量。,在Java中嵌套的程序塊的內(nèi)層和外層,不允許定義相同的變量名,否則將導致編譯錯誤。 public class
15、ScopeError public static void main(String args) int E=999; int E=999; System.out.println(“E=+E); ,常量,常量是指在程序運行過程中其值不變的量。 定義常量的方法有兩種: (1)在定義變量的類型前面加final關鍵字,并同時進行初始化,如下所示: final int aFinalVar=0; final double PI=3.14159; (2)在定義變量的類型前面加final關鍵字,不進行初始化。通過另外的語句進行賦值。如下所示: final int aFinalVar; aFinalVar
16、=0;,常量和變量,常量與變量之間最根本的區(qū)別是:常量在經(jīng)過定義并給它一個值之后,不能再對它進行修改。而變量則無此限制。 對于常量a,進行如下的操作是錯誤的: final int a=1; . a=2; 而對于變量a,如下這段代碼則是正確的。 int a=1; a=2;,示例: public class Assign public static void main (String args) int x; int y; //定義x,y兩個整型變量 float z = 1.234f ; //指定變量z為float型,且賦初值為1.234double w = 1.234 ; //指定變量
17、w為double型,且賦初值為1.234boolean flag = true ; //指定變量flag為boolean型,且賦初值為truechar c ; //定義字符型變量cString str ; //定義字符串變量strString str1 = Hi ; //指定變量str1為String型,且賦初值為Hic = A ; //給字符型變量c賦值Astr = bye ; //給字符串變量str賦值byex = 12 ; //給整型變量x賦值為12y = x; //給整型變量y賦值為12,2.3 運算符和表達式,運算符分類 依據(jù)操作數(shù)的個數(shù):單目運算符(一元運算符)、雙目運算符(二元運
18、算符)、多目運算符。 根據(jù)操作數(shù)和運算結(jié)果分為:算術(shù)、關系、邏輯、位運算符、賦值運算符、條件運算符、括號運算符。,1、算術(shù)運算符:,運算符優(yōu)先級別,優(yōu)先級規(guī)則: ()乘除(從左到右)加減(從左到右) 復雜的表達式: C=25-5*4/2-10+4; 從左到右的規(guī)則求值,結(jié)果是:34 按照優(yōu)先級規(guī)則求值,結(jié)果是:9 用()來表述想要的結(jié)構(gòu),,2、關系運算符:,,3、 邏輯(布爾)運算符:,,邏輯(布爾)運算真值表:,條件與(短路與) 條件或(短路或),4、 位運算符:,位運算是對整數(shù)類型的操作數(shù)按二進制的位進行運算,運算的結(jié)果仍然是整數(shù)類型值。,位運算真值表,位移運算符,位移運算舉例,運算符:將
19、操作數(shù)的二進制位右移,低位溢出,高位補充原來高位的值。 如 int b=60; b=b1;(此時b的值為30,二進制右移一位相當于該數(shù)除?)考慮若b=-60,b=b1,b? 運算符:將操作數(shù)的二進制位右移,低位溢出,高位補0。,5、 賦值運算符及條件運算符:,賦值運算符的形式: 變量名=表達式; 復合賦值運算符 x+=y x=x+y x/=y x=x/y 條件運算符的形式: 表達式1?表達式2:表達式3 舉例 int min,x=4,y=20; min=(x
20、性進行;到遇到圓括號時,先進行括號內(nèi)的運算,再將括號內(nèi)的運算結(jié)果與括號外運算符和操作數(shù)進行計算。 運算符號的優(yōu)先級:.、、()單目運算符算術(shù)運算位移運算關系運算按位邏輯運算邏輯運算條件運算賦值運算,升級和類型轉(zhuǎn)換,賦值和表達式可能引起計算的數(shù)據(jù)類型與保存結(jié)果的存儲位置之間的不匹配。,右邊的數(shù)據(jù)類型小于左邊的數(shù)據(jù)類型: byte num1=53; byte num2=47; long num3; num3=num1*num2; 右邊的數(shù)據(jù)類型大于左邊的數(shù)據(jù)類型: int num1=53; int num2=47; byte num3; num3=num1+num2; 右邊的數(shù)據(jù)類型和數(shù)據(jù)大于左邊
21、的數(shù)據(jù)類型: int num1=53; int num2=47; byte num3; num3=num1*num2;,注意: Java是強類型語言,因此,在進行賦值操作時要對類型進行檢查; 當將占位數(shù)少的類型賦值給占位數(shù)多的類型時,Java自動使用隱式類型轉(zhuǎn)換(升級); 當將占位數(shù)多的類型賦值給占位數(shù)少的類型時,需要由用戶使用顯式的強制類型轉(zhuǎn)換; 其一般形式為: (類型名)(表達式),類型轉(zhuǎn)換,短類型 長類型 :自動升級 長類型 短類型 :強制轉(zhuǎn)換,自動升級規(guī)則,1. (byte或 short) op int int 2. (byte或 short或 int) op long long 3.
22、 (byte或 short或 int或 long) op float float 4. (byte或 short或 int或 long或 float) op double double 5. char op int int 其中,箭頭左邊表示參與運算的數(shù)據(jù)類型 op為運算符(如加、減、乘等) 右邊表示運算結(jié)果的數(shù)據(jù)類型。 如:3+4.5,因為4.5是float型,所以3先被轉(zhuǎn)換為float型,然后再于4.5相加,其結(jié)果也為float型。,例: 自動升級實例,public class Promotion public static void main( String args ) byte b
23、= 10; char c = a; int i = 90; float f = 3.5f; double d = 1.234; float f1; f1 = f * b; int i1; i1 = c+i; double d1; d1 = f1 / i1 d; 查看結(jié)果:Test.java,查看結(jié)果:Promotion.java,強制類型轉(zhuǎn)換,類型轉(zhuǎn)換可縮小值的范圍 例: int a ; long b ; b = a ; a = ( int ) b ; /*把long型變量b強制轉(zhuǎn)換為int型*/ int x=365; byte y=(byte)x; /*把int型變量i強
24、制轉(zhuǎn)換為byte型*/ // 強制轉(zhuǎn)換后丟失一部分數(shù)據(jù),使得y的值為100。 一般使用強制類型轉(zhuǎn)換可能會導致數(shù)值溢出或精度的下降,應盡量避免。 浮點類型轉(zhuǎn)換為整數(shù)類型將使所有小數(shù)部分丟失。,public class Age public static void main(String args ) int ageYears; int ageDays; long ageSeconds; ageYears=Integer.parseInt(args0); ageDays=ageYears*365; ageSeconds=(ageYears*365*24L*60*60); System.out.pr
25、int(“You are”+ageDays+”days old.”); System.out.print(“You are”+ageSeconds+”seconds old.”); 查看結(jié)果:Age.java,變量類型轉(zhuǎn)換,短類型 長類型:默認 長類型 短類型:強制 例: int a ; long b ; b = a ; a = ( int ) b ;,不同類型數(shù)據(jù)間的優(yōu)先關系如下:低-------------------------------------------高byte,short,char- int - long - float - double,高級數(shù)據(jù)類型要轉(zhuǎn)換成低級數(shù)據(jù)類型,需要用到強制類型轉(zhuǎn)換。 其一般形式為: (類型名)(表達式) 如: int i; byte b; i = 356; b =(byte)i; // 強制轉(zhuǎn)換后丟失一部分數(shù)據(jù),使得b的值為100。 一般使用強制類型轉(zhuǎn)換可能會導致數(shù)值溢出或精度的下降,應盡量避免。,