開發(fā)環(huán)境
1.Linux:
開源的操作系統(tǒng)、免費、服務(wù)器
目錄、掛載點、高
pwd,ls,cd
絕對:根 相對:當(dāng)前目錄 .(當(dāng)前目錄) ..(上一級目錄)
2.java開發(fā)環(huán)境:
1)編譯運行過程:
1.1)編譯期:.java,經(jīng)過編譯,生成.class字節(jié)碼文件
1.2)運行期:JVM加載.class并運行.class
跨平臺,一次編程到處使用
2)名詞:
2.1)JVM:java虛擬機(jī)
加載.class并運行.class
2.2)JRE:java運行環(huán)境
除了包含JVM以外還包含運行java程序所必須的環(huán)境
JRE=JVM+java系統(tǒng)類庫
2.3)JDK:java開發(fā)工具包
除了包含JRE以外還包含開發(fā)java程序所必須的命令工具
JDK=JRE+編譯、運行等工具
運行的最小環(huán)境為JRE,開發(fā)的最小環(huán)境為JDK
3)配置環(huán)境變量:
3.eclipse:
1)新建java項目
2)新建java包
3)新建java類,main()中:
System.out.println("Hello");
變量、基本數(shù)據(jù)類型
1.變量:存數(shù)的,代詞,指代的就是它所存的那個數(shù)
1)聲明:
int a; //聲明一個整型的變量,名為a
int b,c,d; //聲明三個整型的變量,名為b,c,d
2)命名:
2.1)只能包含字母、數(shù)字、_和$符,并且不能以數(shù)字開頭
2.2)嚴(yán)格區(qū)分大小寫
2.3)不能使用關(guān)鍵字
2.4)可以中文命名,但不建議
建議:"見名知意"、"駝峰命名法"
3)初始化:第一次賦值
3.1)聲明的同時初始化
int a = 5; //聲明整型變量a并賦值為5
3.2)先聲明后初始化
int a; //聲明整型變量a
a = 5; //給變量a賦值為5
4)使用:
4.1)對變量的使用就是對它所存的那個數(shù)的使用
4.2)變量的使用要與數(shù)據(jù)類型匹配
int a = 3.14; //編譯錯誤,數(shù)據(jù)類型不匹配
4.3)變量在用之前必須聲明并初始化
System.out.println(m); //編譯錯誤,m未聲明
int m;
System.out.println(m); //編譯錯誤,m未初始化
2.基本數(shù)據(jù)類型:
1)int:整型,只能裝整數(shù),4個字節(jié),-21個多億到21個多億
1.1)整數(shù)直接量默認(rèn)為int型,但不能超范圍,超范圍則編譯錯誤
1.2)兩個整數(shù)相除,結(jié)果還是整數(shù),小數(shù)位無條件舍棄
1.3)整數(shù)運算時超出范圍則發(fā)生溢出,溢出是需要避免的
2)long:長整型,只能裝整數(shù),8個字節(jié),很大很大很大
2.1)長整型直接量需要數(shù)字后加L或l
2.2)運算時若有可能溢出,建議在第1個數(shù)字后加L,不溢出可以不加L
2.3)System.currentTimeMillis()用于獲取自
1970.1.1零時到此時此刻的毫秒數(shù)
3)double:浮點型,只能裝小數(shù),8個字節(jié),很大很大很大
3.1)浮點數(shù)直接量默認(rèn)為double型,若想表示float需要數(shù)字后加F或f
3.2)double型數(shù)據(jù)參與運算時,會出現(xiàn)舍入誤差,所以精確運算場合不能用
4)boolean:布爾型,1個字節(jié)
4.1)只能取值為true和false
5)char:字符型,2個字節(jié)
5.1)java中的char采用Unicode編碼格式,
一個字符char對應(yīng)一個碼int
表現(xiàn)的形式是char字符,但實質(zhì)上存儲的是int碼
碼只能在0到65535之間
ASCII碼:'a'--97 'A'--65 '0'--48
5.2)字符直接量必須放在單引號中,有且僅有一個
5.3)特殊字符需要通過\來轉(zhuǎn)義
3.基本數(shù)據(jù)類型間的轉(zhuǎn)換:
基本數(shù)據(jù)類型從小到大依次為:
byte,short,int,long,float,double,char,
1)兩種方式:
1.1)自動類型轉(zhuǎn)換:從小類型到大類型
1.2)強制類型轉(zhuǎn)換:從大類型到小類型
語法: (要轉(zhuǎn)換為的類型)變量
強轉(zhuǎn)有可能會溢出或精度丟失
2)兩點規(guī)則:
2.1)整數(shù)直接量可以直接賦值給byte,short,char,
但不能超范圍
2.2)byte,short,char型數(shù)據(jù)參與運算時,
先一律轉(zhuǎn)換為int再運算
4.Scanner的用法:
1)在package下:
import java.util.Scanner;
2)在main()方法中:
Scanner scan = new Scanner(System.in);
3)在第2步之下:
System.out.println("請輸入年齡:");
int age = scan.nextInt();
System.out.println("請輸入單價:");
double price = scan.nextDouble();
運算
運算符:
1)算術(shù):+,-,,/,%,++,--
2)關(guān)系:>,<,>=,<=,==,!= boolean
3)邏輯:&&,||,! boolean
4)賦值:=,+=,-=,=,/=,%=
5)字符串連接:+
6)條件(三目)運算:boolean?數(shù)1:數(shù)2
分支結(jié)構(gòu):
1)if結(jié)構(gòu):1條路
2)if...else結(jié)構(gòu):2條路
3)if...else if結(jié)構(gòu):多條路
4)switch...case結(jié)構(gòu):多條路
優(yōu)點:效率高、結(jié)構(gòu)清晰
缺點:整數(shù)、相等
case中如果沒有break則一直走到完
5)break:退出switch
用switch能實現(xiàn)的,用if...else if都可以實現(xiàn)
用if...else if能實現(xiàn)的,不一定能用switch實現(xiàn)
閏年的判斷公式:
1)能被4整除,并且,不能被100整除,或者能被400整除
(year%4==0 && year%100!=0) || year%400==0
2)輸出系統(tǒng)當(dāng)前時間
long startTime = System.currentTimeMillis();
循環(huán):
1.循環(huán):反復(fù)執(zhí)行一段相同或相似的代碼
2.循環(huán)三要素:
1)循環(huán)變量的初始化
2)循環(huán)的條件(以循環(huán)變量為基礎(chǔ))
3)循環(huán)變量的改變(向著循環(huán)的結(jié)束變)
循環(huán)變量:在循環(huán)過程中所改變的那個數(shù)
3.循環(huán)結(jié)構(gòu):
1)while:先判斷后執(zhí)行,有可能一次都不執(zhí)行
2)do...while:先執(zhí)行后判斷,至少執(zhí)行一次
第1要素與第3要素相同時首選
3)for:應(yīng)用率最高,固定次數(shù)循環(huán)
4.break:退出循環(huán)
continue:跳過循環(huán)體中剩余語句而進(jìn)入下一次循環(huán)
三種循環(huán)的更佳適用情況:
1)while:"當(dāng)..."循環(huán)
2)do...while:"直到..."循環(huán)
第1要素與第3要素相同時首選do...while
3)for:固定次數(shù)循環(huán),應(yīng)用率最高
嵌套循環(huán):
1)循環(huán)中套循環(huán),一般多行多列時使用,
外層控制行,內(nèi)層控制列
2)執(zhí)行規(guī)則:外層循環(huán)走一次,內(nèi)層循環(huán)走所有次
3)建議:嵌套的層數(shù)越少越好,能用一層就不用兩層
若必須超過三層才能實現(xiàn),說明設(shè)計有問題
4)break只能跳出一層循環(huán)
程序=算法+數(shù)據(jù)結(jié)構(gòu)
1)算法:解決問題的流程/步驟(順序、分支、循環(huán))
2)數(shù)據(jù)結(jié)構(gòu):將數(shù)據(jù)按照某種特定的結(jié)構(gòu)來保存數(shù)怎么存
設(shè)計良好的數(shù)據(jù)結(jié)構(gòu)會導(dǎo)致好的算法
任何復(fù)雜的程序邏輯都可以通過三種結(jié)構(gòu)來實現(xiàn):
1)順序結(jié)構(gòu):從上往下,逐行執(zhí)行,每句必走
2)分支結(jié)構(gòu):有條件的執(zhí)行某語句一次,并非每句必走
3)循環(huán)結(jié)構(gòu):有條件的執(zhí)行某語句多次,并非每句必走
數(shù)組
1)相同數(shù)據(jù)類型元素的集合
2)是一種數(shù)據(jù)類型(引用類型)
3)數(shù)組的定義:
int[] arr = new int[4];
4)數(shù)組的初始化:
int[] arr = new int[4]; //0,0,0,0
int[] arr = {1,4,5,8}; //1,4,5,8
int[] arr = new int[]{1,4,5,8}; //1,4,5,8
int[] arr;
arr = {1,4,5,8}; //編譯錯誤
arr = new int[]{1,4,5,8}; //正確
5)數(shù)組的訪問:
5.1)通過(數(shù)組名.length)可以獲取數(shù)組的長度
int[] arr = new int[5];
System.out.println(arr.length); //5
5.2)通過下標(biāo)來訪問數(shù)組中的元素
下標(biāo)從0開始,最大到(數(shù)組.length-1)
int[] arr = new int[3];
arr[0] = 100; //給arr中第1個元素賦值為100
arr[1] = 200; //給arr中第2個元素賦值為200
arr[2] = 300; //給arr中第3個元素賦值為300
arr[3] = 400; //數(shù)組下標(biāo)越界異常
System.out.println(arr[arr.length-1]); //輸出arr中的最后一個元素
6)數(shù)組的遍歷:
(1)直接輸出方法
System.out.println( Arrays.toString(arr))
(2)for循環(huán)輸出方法
int[] arr = new int[10];
for(int i=0;i<arr.length;i++){
arr[i] = (int)(Math.random()*100);
}
for(int i=0;i<arr.length;i++){ //正序
System.out.println(arr[i]);
}
for(int i=arr.length-1;i>=0;i--){ //倒序
System.out.println(arr[i]);
}
7)數(shù)組的復(fù)制:
7.1)
7.2)
a = Arrays.copyOf(a,a.length+1); //擴(kuò)容```
8)數(shù)組的排序:
8.1)Arrays.sort(arr); //升序,效率高
8.2)冒泡排序:
8.2.1)四個數(shù)冒三輪
8.2.2)每一輪都是從第1個元素開始冒
每一次都是和它的下一個元素比
8.2.3)冒出來的就不帶它玩了
```for(int i=0;i<arr.length-1;i++){ //控制輪
for(int j=0;j<arr.length-1-i;j++){ //控制次
if(arr[j]>arr[j+1]){ //和它下一個元素比
int t=arr[j]; //若滿足則交換
arr[j]=arr[j+1];
arr[j+1]=t;
}
方法:函數(shù)、過程
1.方法:函數(shù)、過程
1)用于封裝一段特定的業(yè)務(wù)邏輯功能
2)方法應(yīng)盡可能的獨立,一個方法只干一件事
3)方法可以被反復(fù)調(diào)用多次
4)減少代碼重復(fù),便于程序的維護(hù),便于團(tuán)隊的協(xié)作開發(fā)
2.方法的定義:
修飾詞 返回值類型 方法名(參數(shù)列表){
方法體
}
3.方法的調(diào)用:
1)無返回值: 方法名(有參傳參);
2)有返回值: 數(shù)據(jù)類型 變量 = 方法名(有參傳參);
后期還需要用到方法中的某個數(shù)據(jù)----有返回值
后期不再需要用到方法中的某個數(shù)據(jù)--無返回值
4.return:
1)return 值; //1.1)結(jié)束方法的執(zhí)行 1.2)返回結(jié)果給調(diào)用方
2)return; //2.1)結(jié)束方法的執(zhí)行
5.其他
double d = Math.sqrt(25);//求(25)的平方跟```