一:方法的定義和方法的調用
方法的定義:修飾符 方法的返回值 方法名(參數列表){
方法體
}
若是沒有方法的返回值就寫成:void
參數列表:參數類型 參數名
方法的調用:方法名(參數值)java
次日:
目標: 1. 標識符、關鍵字和類型介紹;
2. 如何構建類?
------------------------------------------------------------
第二章: Identifiers, Keywords and Types
目標:1. 註釋做用:使部份內容只爲程序員可見,
不爲編譯器所編譯、虛擬機所執行;增長程序的可讀性
位置:類聲明先後、方法聲明先後、屬性聲明先後、方法體中。
幾乎能夠在一個源文件任意位置,但不能在一個關鍵字字
符中插入註釋。
類型:1) 單行註釋://text——從"//"到本行結束的全部字符均做爲註釋而被編譯器忽略
2) 多行註釋:/*text*/——從"/*"到"*/"間的全部字符會被編譯器忽略
3) 文檔註釋:/** text */——從"/**"到"*/"間的全部字符會被編譯器忽略。
當這類註釋出如今任何聲明(如類的聲明、類的成員變量的聲明或者類的
成員方法的聲明)以前時,會做爲JavaDoc文檔的內容;
示例:1) //package declaration
package ch01; //容許;
2) package /*package declaration*/ch01; //容許;
3) class /*class declaration*/ FirstJavaProgram { //容許;
...}
4) System.out./*out content to console*/println("Hello Java"); //容許;
5) System.out.print/*out content to console*/ln("Hello Java"); //不容許;程序員
javadoc -d doc -author -version *.java編程
2. 分號、塊和空格
1) 每一個語句短語以;結束 ;
2) 代碼段以{}結束;
3) 空白處(空格、tab鍵、新行和回車(幾個語句短語鏈接在一塊兒))是可有可無的。數組
3. 標識符:類、方法和變量的名字
1) java標識符以字母、_和$開頭,不能以數字開頭,後跟字母、數字、「_」和「$」的組合;
2) 大小寫敏感
3) 沒有長度限制。
4) 不能使用java的關鍵字
舉例: 合法標識符 非法標識符
try try#
GROUP_7 7GROUP
openDoor open-door
boolean1 boolean
4. 關鍵字
Java語言的關鍵字是程序代碼中的特殊字符。包括:
. 類和接口的聲明——class, extends, implements, interface
. 包引入和包聲明——import, package
. 數據類型——boolean, byte, char, double, float, int, long, short
. 某些數據類型的可選值——false, true, null
. 流程控制——break, case, continue, default, do, else, for, if, return, switch, while
. 異常處理——catch, finally, throw, throws, try
. 修飾符——abstract, final, native, private, protected, public, static, synchronized, transient, volatile
. 操做符——instanceof
. 建立對象——new
. 引用——this, super
. 方法返回類型——void
Java語言的保留字是指預留的關鍵字,它們雖然如今沒有做爲關鍵字,但在之後的升級版本中有可能做爲關鍵字。
. 全部關鍵字都是小寫;
. friendly, sizeof不是Java語言的關鍵字,這有別於C++;
. 程序中標識符不能以關鍵字命名;學習
5. 基本類型:程序的基本功能是處理數據,程序用變量來表示數據;
程序中必須先定義變量才能使用;
定義變量是指設定變量的數據類型和變量的名字,
定義變量的基本語法爲:
數據類型 變量名;this
Java語言把數據類型分爲基本類型和引用類型。
基本數據類型
數值類型
整數類型:byte,short,int,long
浮點數類型:float,double
布爾類型:boolean
字符類型:char
引用數據類型
類類型:好比String
接口類型
數組類型編碼
接下來,咱們主要關注基本數據類型,關注各類基本數據類型
有什麼樣的取值範圍?佔用多少內存空間? 操作系統
6. boolean類型指針
位置 boolean類型變量取值
------------------------------------------------------------
Java源程序 只能是true或false
class文件 用int或byte表示boolean
虛擬機中 用整數0來表示false, 有任意一個非零整數表示truecode
強調,在Java源程序中不容許把整數或null賦給boolean類型的變量,
這是有別於其它語言(如c語言)的地方. 例:
boolean isMarried = 0; //編譯出錯,提示類型不匹配
boolean isMarried = null; //編譯出錯,提示類型不匹配
7. 文本數據類型——char和String
1) 字符編碼:Java語言對文本字符
採用Unicode字符編碼。
因爲計算機內存只能存取二進制數據,
所以必須爲各個字符進行編碼。
所謂字符編碼,是指用一串二進制數據來表示特定的字符。
常見的字符編碼包括:
a. ASCII字符編碼
ASCII--
Amecian Standard Code for Information Interchange(
美國信息交換標準代碼).
主用於表達現代英語
和其餘西歐語言中的字符。
它是現今最通用的單字節編碼系統,
它只用一個字節的7位,
一共表示128個字符。
b. ISO-8859-1字符編碼,又稱爲Latin-1, 是國際標準化組織(ISO)爲西歐語言中的字符制定的編碼,
用一個字節(8位)來爲字符編碼,與ASCII字符編碼兼容。所謂兼容,是指對於相同的字符,它的ASCII字符編碼
和ISO-8859-1字符編碼相同。
c. GB2312字符編碼
它包括對簡體中文字符的編碼,
一共收錄了7445個字符(6763個漢字+682個其餘字符. 它與ASCII字符編碼兼容。
d. GBK字符編碼
對GB2312字符編碼的擴展,
收錄了21886個字符(21003個字符+其它字符), 它與GB2312字符編碼兼容。
e. Unicode字符編碼:
由國際Unicode協會編制,
收錄了全世界全部語言文字中的字符,是一種跨平臺的字符編碼。
UCS(Universal Character Set)是指採用Unicode字符編碼的通用字符集。
Unicode具備兩種編碼方案:
. 用2個字節(16位)編碼,被稱爲UCS-2, Java語言採用;
. 用4個字節(32位)編碼,被稱爲UCS-4;
f. UTF字符編碼
有些操做系統不徹底支持16位或32位的Unicode字符編碼,UTF(UCS Transformation Format)字符編碼可以把
Unicode字符編碼轉換爲操做系統支持的編碼,常見的UTF字符編碼包括UTF-8, UTF-7和UTF-16.
2) char的幾種可能取值
Java語言採用UCS-2字符編碼,字符佔2個字節。
字符a的二進制數據形式爲 0000 0000 0110 0001
十六進制數據形式爲 0x0061
十進制數據形式爲 97
如下4種賦值方式是等價的:
char c = 'a';
char c = '\u0061'; //設定"a"的十六進制數據的Unicode字符編碼
char c = 0x0061; //設定"a"的十六進制數據的Unicode字符編碼
char c = 97; //設定"a"的十進制數據的Unicode字符編碼
3) 轉義字符
Java編程人員在給字符變量賦值時,一般直接從鍵盤輸入特定的字符,
而不會使用Unicode字符編碼,由於很難記住各類字符的Unicode
字符編碼值。對於有些特殊字符,好比單引號,如不知道它的
Unicode字符編碼,直接從鍵盤輸入編譯錯誤:
char c = '''; //編碼出錯
爲了解決這個問題,可採用轉義字符來表示單引號和其餘特殊字符:
char c = '\'';
char c = '\\';
轉義字符以反斜槓開頭,經常使用轉義字符:
\n 換行符,將光標定位到下一行的開頭;
\t 垂直製表符,將光標移到下一個製表符的位置;
\r 回車,將光標定位到當前行的開頭,不會移到下一行;
\\ 反斜槓字符
\' 單引號字符
8. 整數類型
byte, short, int和long都是整數類型,而且都是有符號整數。
與有符號整數對應的是無符號整數,二者的區別在於
把二進制數轉換爲十進制整數的方式不同。
. 有符號整數把二進制數的首位做爲符號數,
當首位是0時,對應十進制的正整數,
當首位是1時,對應十進制的負整數。
對於一個字節的二進制數, 它對應的十進制數的取值範圍是-128 - 127。
. 無符號整數把二進制數的全部位轉換爲正整數。
對於一個字節的二進制數, 它對應的十進制數的取值範圍是0 - 255。
在Java語言中,爲了區分不一樣進制的數據,八進制數以「0」開頭,十六制以「0x」開頭。舉例:
一個字節的二進制數 八進制數 十六進制數 有符號十進制數 無符號十進制數
-------------------------------------------------------------------------------------------------
0000 0000 0000 0x00 0 0
1111 1111 0377 0xFF -1 255
0111 1111 0177 0x7F 127 127
1000 0000 0200 0x80 -128 128
若是一個整數值在某種整數類型的取值範圍內,就能夠把它直接賦給這種類型的變量,不然必須進行強制類型的轉換。
byte = 13;
如129不在byte類型的取值範圍(-128-127)範圍內,則必須進行強制類型的轉換。
byte b = (byte)129; //變量b的取值爲-127.
若是一個整數後面加上後綴——大寫"L"或小寫"l", 就表示它是一個long類型整數。如下兩種賦值是等價的:
long var = 100L; //整數100後面加上大寫的後綴"L",表示long型整數;
long var = 100l; //整數100後面加上大寫的後綴"l",表示long型整數;
Java語言容許把八進制數(以"0"開頭), 十六進制數(以"0x"開頭)和十進制數賦給整數類型變量,例如:
int a1 = 012; //012爲八進制數,變量a1的十進制取值爲10
int a2 = 0x12; //0x12爲十六進制數,變量a2的十進制取值爲18
int a3 = 12; //12爲十進制數,變量a3的十進制取值爲12
int a4 = 0xF1; //0xF1爲十六制數,變量a4的十進制取值爲241
byte b = (byte)0xF1 //0xF1爲十六制數,變量b的十進制取值爲-15
注意:
數據類型的轉換:
1)強制類型轉換:精度高向精度低的轉換
byte b = (byte)129;
2)隱式類型轉換:精度低向精度高的轉換
byte<short<int<long<float<double
9. 浮點類型
浮點類型表示有小數部分的數字。Java中有兩種浮點類型:
. float: 佔4個字節,共32位,稱爲單精度浮點數;
. double: 佔8個字節,共64位,稱爲雙精度浮點數;
float和double類型都遵循IEEE754標準,該標準分別爲32位和64位浮點數規定了二進制數據表示形式。
float=1(數字符號)+8(指數,底數爲2)+23(尾數)
double=1(數字符號)+11(指數,底數爲2)+52(尾數)
在默認狀況下,小數及採用十進制科學計數法表示的數字都是double類型,
能夠把它直接賦值給double類型變量。
double d1 = 1000.1;
double d2 = 1.0001E+3; //採用十進制科學計數法表示的數字,d2實際取值爲1000.1
double d3 = 0.0011;
double d4 = 0.11E-2; //採用十進制科學計數法表示的數字,d4實際取值爲0.0011
若是把double類型的數據直接賦給float類型變量,有可能會形成精度的丟失,所以必須進行強制類型的轉換,否
則會致使編譯錯誤,例如:
float f1 = 1.0 //編譯錯誤,必須進行強制類型轉換;
float f2 = 1; //合法,把整數1賦值給f2,f2的取值1.0;
float f3 = (float)1.0; //合法,f3的取值爲1.0;
float f4 = (float)1.5E+55; //合法, 1.5E+55超出了float類型的取值範圍,
f4的取值爲正無窮大
System.out.println(f3); //打印1.0;
System.out.println(f4); //打印Infinity
----------------------------------------------------------------------------------------------------
Float.NaN 非數字
Float.POSITIVE_INFINITY 無窮大
Float.NEGATIVE_INFINITY 負無窮大
float f1 = (float)(0.0/0.0); //f1的取值爲Float.NaN
float f2 = (float)(1.0/0.0); //f2的取值爲Float.POSITIVE_INFINITY
float f3 = (float)(-1.0/0.0); //f3的取值爲Float.NEGATIVE_INFINITY
System.out.println(f1); //打印NaN;
System.out.println(f2); //打印Infinity
System.out.println(f3); //打印-Infinity
Java語言之因此提供以上特殊數字, 是爲了提升Java程序的健壯性,而且簡化編程。當數字運算出錯時,能夠用浮
點數取值範圍內的特殊數字來表示所產生的結果。不然,若是Java程序在進行數學運算遇到錯誤時就拋出異常,會影
響程序的健壯性,並且程序中必須提供捕獲數學運算異常的代碼塊,增長了編程工做量。
10. 變量的申明和賦值
程序的基本功能是處理數據
程序用變量來表示數據;
程序中必須先定義變量才能使用;
定義變量是指設定變量的數據類型和變量的名字,定義變量的基本語法爲:
數據類型 變量名;
Java語言要求變量遵循先定義,再初始化,而後使用的規則。變量的初始化是指自從變量定義之後,首次給它賦初始
值的過程。例:
int a; //定義變量a
a = 1; //初始化變量a
a++; //使用變量a
int b=a; //定義變量b, 初始化變量b, 使用變量a;
b++; //使用變量b
11. 推薦命名規則
1) 類名以大寫字母開頭;
2) 接口名以大寫字母開頭;
3) 方法名以小寫字母開頭;
4) 變量名以小寫字母開頭;
5) 常量名所有大寫,多個單詞以"_"鏈接;
12. 理解對象
明白什麼是面向對象編程
面向對象的開發方法把軟件系統當作各類對象的集合,
對象就是最小的子系統,一組相關的對象可以組合成更復雜的
子系統。面向對象的開發方法將軟件系統當作各類對象的集合,
接近人的天然思惟方式。
對象是對問題領域中事件的抽象。對象具備如下特性:
1) 萬物皆爲對象。問題領域中的實體和概念均可以抽象爲對象。
例如學生,成績單、教師、課和教室。
2) 每一個對象都是唯一的。正如世界上不存在如出一轍的葉子。
3) 對象具備屬性和行爲。
例如小張,性別女,年齡22,身高1.6m, 體重40kg, 可以學習,唱歌。
小張的屬性包括姓名、性別、年齡、身高和體重,行爲包括學習、唱歌。
例如一部手機,牌子是諾基亞、價格是2000元,銀白色,可以拍照、打電話和收發短信等。這部手機的屬性包括
品牌類型type、價格price和顏色color,行爲包括拍照takePhoto(),打電話call(),收發
短信receiveMessage()和發短信sendMessage().
4) 對象具備狀態。狀態是指某個瞬間對象的各個屬性的取值。
對象的某些行爲會改變對象自身的狀態,即屬性的取值。
例如小張原本體重爲40kg,經爲減肥後,體重減到45kg.
肥胖狀態: 40kg
|
| 減肥行爲
|
肥胖狀態: 35kg
5) 每一個對象都是某個類的實例。小張和小王都屬於學生類、
中國和美國都屬於國家類、中文和英文都屬於語言類。
類是具備相同屬性和行爲的對象的集合。
同一個類的全部實例都有相同屬性,但屬性取值不一事實上相同,
可是它們的狀態不必定相同。例如小張和小王都屬
於學生類,都有姓名、性別、年齡、身高和體重這些屬性,
可是他們的屬性取值不一樣。
同一個類的全部實例都有相同行爲,意味着它們具備一些相同的功能。
13. 建立類
類是一組具備相同屬性和行爲對象的模板。
面向對象編程的主要任務就是定義對象模型中的各個類。
package sample;
public class Teacher {
/**attributes of a teacher*/
private String name;
private int age;
private double salary;
/** Creates a new instance of Teacher */
public Teacher(String name, int age, double salary) {
this.salary = salary;
this.age = age;
this.name = name;
}
/**operations on properties */
/** get the name of this teacher */
public String getName() { return name; }
/**get the salary of this teacher */
public double getSalary() { return salary; }
/**get the age of teacher teacher */
public int getAge() { return age; }
……
}
代碼解析:
1) package sample;
包聲明語句,將Java類放到特定的包中,便於類的組織、權限訪問和區分名字相同的類。
2) public class Teacher {...}
類的聲明語句,類名爲Teacher,
public修飾符意味着這個類能夠被公開訪問;
聲明類的格式:
class 類名 {
類內容
}
3) private String name;
類的屬性(也稱爲成員變量)的聲明語句;
Teacher類有一個name屬性,字符串類型,
private修飾符意味着這個屬性不能被公開訪問。
4) public String getName() { return name; }
方法的聲明語句和方法體
方法名爲getName,不帶參數,
String代表返回類型爲String。
public代表這個方法能夠被公開訪問。
getName後緊跟的大括號爲方法體,表明getName的具體實現。
聲明方法的格式:
返回值類型 方法名 (參數列表) {
方法體
}
返回值類型是方法的返回數據的類型, 若是返回值類型爲void, 表示沒有返回值。
方法名是任意合法的標識符;
參數列表可包含零個或多個參數,參數之間以逗號","分開。
方法體每一個語句用";"結束;
方法體中使用return語句返回數據或結束本方法的執行;
注:不介紹構造方法。在面向對象章節會提到。
14. 建立實例
public static void main(String[] args) {
Teacher gzhu = new Teacher("George Zhu", 30, 10000);
System.out.println("Teacher: " + gzhu.getName());
System.out.println("\tAge: " + gzhu.getAge());
System.out.println("\tSalary: " + gzhu.getSalary());
}
main()方法是Java應用程序的入口點,
每一個Java應用程序都是從main()方法開始運行的。
做爲程序入口的main()方法必須同時符合如下幾個條件:
. 用public static修飾;
. 返回類型爲void;
. 方法名爲main;
. 參數類型爲String[];
包含main方法的類又叫主程序類。
類建立好以後,經過new關鍵字建立具體對象。它有如下做用:
. 爲對象分配內存空間,將對象的實例變量自動初始化爲其變量類型的默認值;
. 如實例變量顯示初始化,將初始化值賦給實例變量;
. 調用構造方法;
. 返回對象的引用;
注:結合實例,並畫內存分配圖講解。
15. 基本類型和引用類型的區別
1) 基本類型表明簡單的數據類型,好比整數和字符。
引用類型表明複雜數據類型,引用類型所引用的
實例包括操縱這種數據類型的行爲。
經過"."運算符,就能訪問引用變量所引用的實例的方法.
2) 基本類型Java虛擬機會爲其分配數據類型實際佔用的內存空間;
引用類型僅是一個指向堆區中某個實例的指針。
例:public class Counter {
int count = 13;
}
Counter counter = new Counter();
counter引用變量-------------> Counter實例
count變量(佔4個字節,值爲13)
counter引用變量的取值爲Counter實例的內存地址。
counter引用變量自己也佔必定的內存空間,
到底佔用多少內存空間取決於Java虛擬機的實現,這對Java程序是透明的。
注:counter引用變量到底位於Java虛擬機的運行時數據區的哪一個區? 取決於counter變量的做用域, 若是是局部變量,則位於Java棧區; 若是是靜態成員變量,則位於方法區; 若是是實例成員變量,則位於堆區; 面向對象編程的步驟: 1)從需求中尋找名詞性短語,構建class,有相應的屬性和行爲 2)產生對象 3)訪問屬性,方法(.) 一.基本數據類型變量和引用數據類型變量: 1)使用基本數據類型定義的變量叫作基本數據類型變量 int a=10; 保存是數據自己的數值(二進制) 2)使用引用數據類型定義的變量叫作引用數據類型變量 Teacher t=new Teacher(); 保存是堆區開闢的地址 new關鍵字: a)在棧區開闢空間保存對象的引用 b)在堆區開闢空間保存對象自己 c)堆區的地址賦值給棧區的對象的引用二:運行時數據區一個完整的Java程序運行過程會涉及如下內存區域方法區/代碼區:存放類的信息堆區:用來存放動態產生的數據,好比new出來的對象。 注意建立出來的對象只包含屬於各自的成員變量, 並不包括成員方法。由於同一個類的對象擁有各自 的成員變量,存儲在各自的堆中,可是他們共享該 類的方法,並非每建立一個對象就把成員方法複製一次。棧區:保存局部變量的值,包括: 1.用來保存基本數據類型的值; 2.保存類的實例,即堆區對象的引用(指針)。 也能夠用來保存加載方法時的幀常量池:JVM爲每一個已加載的類型維護一個常量池, 常量池就是這個類型用到的常量的一個有序集合。 常量池存在於堆中。PC寄存器:指向下一條須要執行的指令,將該數據傳遞給CPU