第一章 入門
1.1 計算機(jī)發(fā)展史和未來方向
第一代語言
機(jī)器語言
第二代語言
匯編語言 goto語法
第三代語言
java c c++
1.2 常見語言介紹
C
C++
面向?qū)ο?br> 效率高
Java
最主流
PHP
web開發(fā)害驹、中小型網(wǎng)站開發(fā)
Object-C & Swift
ios開發(fā)
JavaScript
H5開發(fā)核心就是JavaScript媳维,其次HTML5\CSS
Python
圖形處理青责、科學(xué)計算、web變成冰蘑、人工智能
C#
微軟、用來抗衡Java,運行于.Net Framework上
基于windows的桌面軟件骑科,c#是首選
Fortran
世界上第一種高級語言奥吩,IBM1954年提出哼蛆,工程領(lǐng)域仍然廣泛使用
Basic
易學(xué),不夠強(qiáng)大圈驼,已被淘汰
Pascal
僅限于大學(xué)教育人芽,基本淘汰
1.3 Java
1.3.1 Java發(fā)展簡史
1991年,James Goslings绩脆,SUN公司
1998年萤厅,JDK1.2
2004年橄抹,J2SE 5.0(1.5.0)
2014年,JavaSE8.0
趕上互聯(lián)網(wǎng)的發(fā)展而發(fā)展
1.3.2 Java的核心優(yōu)勢
跨平臺惕味,強(qiáng)大的生態(tài)體系楼誓,第一大語言
1.3.3 Java各版本的含義
JavaSE:標(biāo)準(zhǔn)版,個人計算機(jī)應(yīng)用(桌面應(yīng)用)名挥,發(fā)展較差疟羹,不如C#
JavaEE:企業(yè)版,服務(wù)器端的應(yīng)用
JavaME:微型版禀倔,消費型電子產(chǎn)品的應(yīng)用榄融,發(fā)展較差,不如安卓
1.3.4 Java的特性和優(yōu)勢
跨平臺/可移植性
安全性
面向?qū)ο?/p>
簡單性
高性能:虛擬機(jī)的優(yōu)化救湖,某些場景甚至接近C++效率
分布式
多線程
健壯性:不會造成計算機(jī)整體崩潰
1.3.5 Java應(yīng)用程序的運行機(jī)制
高級語言主要有編譯型和解釋型語言愧杯,Java是兩種類型的結(jié)合
首先編寫原程序后綴為.java
再利用編譯器javac編譯成字節(jié)碼文件,后綴為.class
最后利用虛擬機(jī)(解釋器,java)解釋執(zhí)行
1.3.6 JVM鞋既、JRE和JDK
JVM Java虛擬機(jī)力九,與操作系統(tǒng)打交道
JRE 包含Java虛擬機(jī)、庫函數(shù)邑闺、運行Java所必須的程序
JDK 包含JRE跌前、編譯器、調(diào)試器等應(yīng)用程序開發(fā)的文件
1.4. JAVA安裝
1.4.1 JDK下載和安裝
略
1.4.2 環(huán)境變量Path的配置
略
JAVA_HOME:略
PATH: %JAVA_HOME%\bin
JDK1.5之后不需要配置classpath陡舅,JRE會自動搜索目錄下類和jar文件
1.4.3 測試安裝
略
1.5 編寫
1.5.3 編碼注意事項總結(jié)
1.Java對大小寫敏感
2.public 是訪問修飾符抵乓,控制其他部分對這段代碼的訪問級別
3.class類,java面向?qū)ο笳Z言蹭沛,代碼都必須位于類中
4.一個源文件最多生命一個public類臂寝,其他類個數(shù)不限,且public 類名必須與源文件名一致
5.一個源文件可以包含多個類摊灭,編譯后一個類對應(yīng)一個class文件
6.main方法是入口咆贬,固定書寫格式,public static void main(String[] args){……}
7.每句以分號結(jié)束
1.5.4 常用DOS命令
略
1.6 常用開發(fā)工具
eclipse
Intellij IDE
NetBeans
1.7 eclipse入門
1.7.1 eclipse下載和安裝
下載版本要與JDK一致帚呼,64位eclipse支持64位JDK與32位JDK掏缎,32位eclipse支持32位JDK
1.7.2 eclipse中創(chuàng)建Java項目
1.8 桌球小游戲demo
略
第二章 數(shù)據(jù)類型和運算符
2.1 注釋
單行//
多行/* /
文檔/* */,說明及JavaDoc標(biāo)簽煤杀,可以生成API
2.2 標(biāo)識符
字母眷蜈、下劃線、美元符號開頭
其他部分可以使用字母沈自、下劃線酌儒、美元符號和數(shù)字任意組合
大小寫敏感、長度不限制
不可以是Java關(guān)鍵字
使用規(guī)范
類名:首字母大寫
方法和變量名:第一個單詞小寫枯途,第二個單詞開始首字母大寫
Java不采用ASCII字符集忌怎,二是采用Unicode國際字符集籍滴,包括漢字,但是吧建議用漢字來定義標(biāo)識符
2.3 Java中的關(guān)鍵字(保留字)
略
2.4 變量 variable
2.4.1 變量的本質(zhì)
“可操作的存儲空間”
基本類型 引用類型
一行中可以聲明多個變量榴啸,但不建議這么寫
int i,j;
2.4.2 變量的分類
局部變量 local variable:【從屬:方法/語句塊】先聲明孽惰、再初始化,才能使用
成員變量 member variable:【從屬:對象】類內(nèi)部方法外部定義鸥印,從屬對象勋功,生命周期伴隨對象始終;不初始化库说,會自動初始化成該類型的默認(rèn)初始值狂鞋。
數(shù)據(jù)類型 | 默認(rèn)初始值 |
---|---|
int | 0 |
double | 0.0 |
char | '\u0000' |
boolean | false |
靜態(tài)變量 static variable:【從屬:類】生命周期伴隨類始終
2.5 常量 constant
通常指一個固定的值
一般用大寫字母
利用final來定義
final double pi = 3.14;
2.6基本數(shù)據(jù)類型
三大類八小類(數(shù)字表示字節(jié)數(shù)):
- 數(shù)值型
1.1. 整數(shù)類型:1 byte,2 short璃弄,4 int要销,8 long
1.2. 浮點類型:4 float,8 double - 字符型
2.1. 字符型:2 char - 布爾型
3.1. 布爾型:1 boolean
2.6.1 整型變量/常量
1個字節(jié)8位
類型 | 占用空間 | 范圍 |
---|---|---|
byte | 1字節(jié) | -27 到 27-1 |
short | 2字節(jié) | -215 到 215-1 約±3w |
int | 4字節(jié) | -231 到 231-1 約21億 |
long | 8字節(jié) | -263 到 263-1 |
十進(jìn)制
八進(jìn)制夏块,0開頭,例如015
十六進(jìn)制纤掸,0x或0X開頭脐供,例如0x15
二進(jìn)制,0b或0B開頭借跪,例如0b110
long默認(rèn)后面加L
long a = 2000000000L;
2.6.2 浮點型
類型 | 占用空間 | 范圍 |
---|---|---|
float | 4字節(jié) | |
double | 8字節(jié) |
小數(shù)默認(rèn)是double政己,如果是float需要加F:
float a =3.14F;
浮點數(shù)不精確:
例1:
float a = 0.1f;
double b = 0.1;
System.out.println(a==b);
結(jié)果
false
例2:
float f1 = 423432423f;
float f2 = f1+1;
if(f1==f2) {
System.out.println("f1==f2");
}else {
System.out.println("f1!=f2");
}
結(jié)果
f1==f2
所以浮點數(shù)一定不能用來比較
如果要比較浮點數(shù),需要用java.math下的BigDecimal和BigInteger
2.6.3 字符型變量/常量
2字節(jié)
unicode掏愁,65535個字符歇由,含漢字
2.6.4 boolean布爾類型變量/常量
1位(不是1個字節(jié)),所以不能用0或非0代替true和false果港,這點和C不同
2.7 運算符
2.7.1 算數(shù)運算符
- 二元運算符(+ - * / %)
1.1 (整數(shù))如果兩個操作數(shù)有一個為Long沦泌,則結(jié)果也為Long
1.2 (整數(shù))沒有Long時,結(jié)果為int辛掠。即使操作數(shù)全部為short谢谦、byte,結(jié)果也是int萝衩。
1.3 (浮點數(shù))如果兩個操作數(shù)有一個為double回挽,則結(jié)果為double
1.4 (浮點數(shù))只有兩個操作數(shù)都是float,結(jié)果才是float
1.5 (取模)操作數(shù)可以是浮點數(shù)猩谊,一般使用整數(shù)千劈,結(jié)果是“余數(shù)”,“余數(shù)”符號和左邊操作數(shù)相同 - 一元運算符(++ --)
2.7.2 賦值及其擴(kuò)展賦值運算符
a+=b;//相當(dāng)于 a = a+b
a*=b+3;//相當(dāng)于 a=a*(b+3)
2.7.3 關(guān)系運算符
注:
- =是賦值運算符牌捷,而真正的判斷兩個操作數(shù)是否相等的運算符是==
- ==墙牌、!=是所有(基本和引用)數(shù)據(jù)類型都可以使用
- ">",">=","<","<="僅針對數(shù)值類型涡驮、char類型;char會自動轉(zhuǎn)為unicode碼數(shù)字(a=97)
int a = 3;
System.out.println(a==3);
char b = 'a';
char b2 = 'c';
System.out.println((int)b);//97
System.out.println(0+b);//97,int+char為int
System.out.println(0+b2);//99,int+char為int
System.out.println(b+0);//97,int+char為int
System.out.println(b<b2);//true
2.7.4 邏輯運算符
& 邏輯與
| 邏輯或
&& 短路與憔古,只要有一個false遮怜,則返回false
|| 短路或,只要有一個true鸿市,則返回true
锯梁! 邏輯非,取反焰情,陌凳!false為true,内舟!true為false
^ 邏輯異或 合敦,相同為false,不同為true
注:
- 邏輯與會計算所有結(jié)果再判斷验游,短路與只要出現(xiàn)一個false即直接返回
- 邏輯或只要出現(xiàn)一個true即直接返回
System.out.println(true&false);//false
System.out.println(true|false);//true
System.out.println(true&&false);//flase
System.out.println(true||false);//true
System.out.println(!true);//false
System.out.println(true^true);//false
System.out.println(false^false);//false
System.out.println(true^false);//true
2.7.5 位運算符
~ 取反
& 按位與
| 按位或
^ 按位異或
<< 左移運算符充岛,左移一位相當(dāng)于乘以2,兩位是乘以2x2,三位是2x2x2
">>" 右移運算符耕蝉,右移一位相當(dāng)于除以2取商
int a = 3;
int b = 4;
System.out.println(a&b);//0 3:0011 4:0100, 3&4 0000=0
System.out.println(a|b);//7 3|4 0111=7
System.out.println(a^b);//7 3^4 0111=7
System.out.println(~a);//-4
System.out.println(a<<1);// a*2 = 6
System.out.println(b>>1);// b/2 = 2
System.out.println(12>>2);// 12/2/2 = 3
2.7.6 字符串連接符
“+”
運算符兩側(cè)只要有一個字符串類型(String)崔梗,系統(tǒng)會自動將一個操作數(shù)轉(zhuǎn)換為字符串然后再進(jìn)行連接
int a = 3;
String b = "4";
int c = 4;
System.out.println(a+b);//34
System.out.println(a+c);//7
System.out.println(a+b+c);//344 ,a+b先轉(zhuǎn)為String
System.out.println(a+c+b);//74 垒在,a+c先計算數(shù)字
注:
- String + 數(shù)字 = String
- char + 數(shù)字 = 數(shù)字
2.7.7 條件運算符
x ? y : z
x為boolean類型表達(dá)式蒜魄,先計算x,若為true則返回y场躯,否則返回z
int score = 80;
String type = score<60?"不及格":"及格";
System.out.println(type);//及格
int x = -100;
System.out.println(x>0?1:(x==0?0:-1));//-1
System.out.println(x<0?1:(x==0?3/0:3/0));//1 谈为,先計算外層,走不到里層括號踢关,所以3/0不會報錯
2.7.8 運算符優(yōu)先級的問題
略
2.8 類型轉(zhuǎn)換
2.8.1 自動類型轉(zhuǎn)換
容量小的可以自動轉(zhuǎn)換為容量大的數(shù)據(jù)類型(不是字節(jié)數(shù)伞鲫,而是范圍,比如float4個字節(jié)可以轉(zhuǎn)換為long8個字節(jié)耘成,因為float范圍大榔昔,但是會損失一定精度)。
整型常量可以直接賦值給byte 瘪菌、short撒会、char等類型變量,而不需要進(jìn)行強(qiáng)制類型轉(zhuǎn)換师妙,只要不超出其表數(shù)范圍即可诵肛。
short a = 12;//合法
short b = 123456;//非法
2.8.2 強(qiáng)制類型轉(zhuǎn)換
(type)var
2.8.3 基本類型轉(zhuǎn)換溢出
操作比較大的數(shù)時,要留意是否溢出
int money = 1000000000;//10億
int years = 20;
int total = money * years;
System.out.println(total);//-1474836480,溢出,int范圍21億
long total2 = money * years;
System.out.println(total2);//-1474836480,溢出怔檩,int計算先溢出褪秀,所以即使total2是long也不行
long total3 = money * (long)years;
System.out.println(total3);//20000000000,先強(qiáng)轉(zhuǎn)其中一個為long,long與int計算還是long
//常用技巧
long total4 = 10L * 1000000000;//10000000000薛训,直接將其中一個數(shù)字強(qiáng)轉(zhuǎn)為long
long total5 = 10 * 1000000000;//1410065408媒吗,溢出
System.out.println(total4);
System.out.println(total5);
2.9 簡單的鍵盤輸入
Scanner
Scanner scanner = new Scanner(System.in);
System.out.println("請輸入名字:");
String name = scanner.nextLine();
System.out.println("請輸入你的愛好:");
String favor = scanner.nextLine();
System.out.println("請輸入你的年齡:");
int age = scanner.nextInt();
System.out.println("#####################");
System.out.println(name);
System.out.println(favor);
System.out.println(age);
結(jié)果
請輸入名字:
pjh
請輸入你的愛好:
coding
請輸入你的年齡:
33
#####################
pjh
coding
33
第三章 控制語句
3.1 選擇結(jié)構(gòu)
任何一個軟件和程序,本質(zhì)都是由“變量乙埃、選擇語句闸英、循環(huán)語句”組成
3.1.1 if單選擇結(jié)構(gòu)
注意,if可以不寫{}介袜,只執(zhí)行下面一句甫何,但是建議即使是一句也要用{}
3.1.2 if-else雙選擇結(jié)構(gòu)
if(布爾表達(dá)式){
語句1
}else{
語句2
}
3.1.3 if-else if-else多選擇結(jié)構(gòu)
if(布爾表達(dá)式1){
語句1
}else if(布爾表達(dá)式2){
語句2
}else{
語句3
}
3.1.4 switch多選擇結(jié)構(gòu)
一般用來做多值判斷
switch(表達(dá)式){
case 值1:
語句1;
[break;]
case 值2:
語句2;
[break;]
……
[default:
默認(rèn)語句;]
}
遇到break結(jié)束switch;
表達(dá)式一般是整數(shù)(long除外)或者枚舉遇伞,JDK1.7之后支持String辙喂;
如果判斷到所需的值后沒有break,會把后續(xù)所有語句執(zhí)行鸠珠;
例如:
int month = (int)(1+12*Math.random());
month = 3;
System.out.println("月份:"+month);
switch(month) {
case 1:
System.out.println("1月份過年了");
// break;
case 2:
System.out.println("2月份開春了");
break;
case 3:
System.out.println("3月開學(xué)了");
// break;
default:
System.out.println("其他月份");
break;
}
結(jié)果:
月份:3
3月開學(xué)了
其他月份
3.2 循環(huán)結(jié)構(gòu)
3.2.1 while循環(huán)
while(布爾表達(dá)式){
循環(huán)體;
}
graph TD
開始 --> 布爾表達(dá)式
布爾表達(dá)式 -- true --> 循環(huán)體
循環(huán)體 --> 布爾表達(dá)式
布爾表達(dá)式 -- false --> 結(jié)束
3.2.2 do-while循環(huán)
do{
循環(huán)體;
}while(布爾表達(dá)式);
3.2.3 for循環(huán)
int sum = 0;
for(int i=1;i<=100;i++) {
sum+=i;
}
System.out.println(sum);
////
int j = 1;
sum = 0;
for(;j<=100;j++) {
sum+=j;
}
System.out.println(sum);
////
int k;
for(k=0,sum=0;k<=100;k++) {
sum+=k;
}
System.out.println(sum);
3.2.4 嵌套循環(huán)
99乘法表
//99乘法表
for(int i=1;i<=9;i++) {
for(int j=1;j<=9;j++) {
if(j<=i){
System.out.print(j + "*" + i + "=" + (i*j<10?" "+i*j:i*j) +" ");
}
}
System.out.println();
}
結(jié)果:
1*1= 1
1*2= 2 2*2= 4
1*3= 3 2*3= 6 3*3= 9
1*4= 4 2*4= 8 3*4=12 4*4=16
1*5= 5 2*5=10 3*5=15 4*5=20 5*5=25
1*6= 6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7= 7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8= 8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9= 9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81
3.2.5 break & continue 語句
break用來退出循環(huán)巍耗,不執(zhí)行循環(huán)中剩余語句
中止本次循環(huán)后續(xù)代碼,繼續(xù)下次循環(huán)
3.2.6 帶標(biāo)簽的break & continue
goto語句渐排,保留關(guān)鍵字芍锦,但java沒有正式使用
break和continue中可以看到一些goto的影子--帶標(biāo)簽的break和continue