目錄
1、Java程式基礎
1.1 JDK和JRD
1.2 命令列操作
1.3 pubilic+class
1.4 位元組碼檔案
2、識別符號
2.1 識別符號的組成
2.2 遵守駝峰命名方式
2.3 類名、介面名:
2.4 變數名、方法名:
2.5 常量名:
3、關鍵字
4、變數與常量
4.1 變數
4.2 常量
5、boolean型別
5.1 布爾型別的值
5.2 布爾型別占用的位元組數
5.3 布爾型別的底層表示和定義
6、byte型別
7、char型別
7.1 char型別占有位元組數
7.2 char型別與short型別
8、float型別與double型別
9、型別轉換
10、類的定義
10.1 語法結構
10.2 基本資料型別
10.3 參考資料型別
11、邏輯運算子(布爾運算子)
11.1 邏輯與&
11.2 短路與&&
12、運算子
12.1 賦值運算子
12.2 字串連接運算子
12.3 三元運算子/三目運算子/條件運算子
13、用戶控制端輸入
13.1 Scanner類中的方法
13.2 System.in和System.out方法
13.3 InputStreamReader和BufferedReader方法
13.4 nextLine( )和next( )的區別
14、方法
14.1 方法的定義,語法結構
14.2 方法在執行程序中,JVM記憶體的分配和變化
14.3 堆疊記憶體的特點
15、方法執行記憶體分析
16、方法多載(overload)
16.1 什么時候考慮使用方法多載?
16.2 構成方法多載的條件
16.3 方法多載的影響因素
16.4 方法多載的應用
17、方法遞回
1、Java程式基礎
1.1 JDK和JRD
JDK=JRE+Java開發工具;
JRD=JVM+Java核心類別庫;
1.2 命令列操作
cd md創建檔案目錄;
cd rd洗掉;
cd del刪檔案;
cd ..回傳上一級;
cd /跳轉目錄;
1.3 pubilic+class
類名-->與檔案名一致;
1.4 位元組碼檔案
編譯后生成位元組碼檔案(.class)有幾個類生成幾個;
2、識別符號
2.1 識別符號的組成
數字、字母、下劃線、美元符號(可以是中文),
與C語言相同首字符不能以數字開頭;
與C語言相比,識別符號的組成多了一個美元符號;
2.2 遵守駝峰命名方式
e.g. SytemService、UserService;
2.3 類名、介面名:
首字母大寫,后面每個單詞首字母大寫;
2.4 變數名、方法名:
首字母小寫,后面每個單詞首字母大寫;
2.5 常量名:
全部大寫;
//與C語言的常量不同 字面值(資料)看見字知其資料;
e.g.10.100,3.14,"abc",'a',ture、false(布爾型);
3、關鍵字
關鍵字要小寫
public、class、static、void......
4、變數與常量
4.1 變數
Java中變數必須宣告再賦值才能訪問(否則記憶體未開辟出來);
變數必須初始化;
4.2 常量
常量有final關鍵字修飾;
5、boolean型別
5.1 布爾型別的值
boolean型別只有ture false 沒有其他值;
5.2 布爾型別占用的位元組數
boolen型別只占用1個位元組;
5.3 布爾型別的底層表示和定義
不像C語言有0、1表示假和真;
底層false為0,ture為1;
定義:boolean i = true;
6、byte型別
byte型別表示8位帶符號的二進制數;
7、char型別
7.1 char型別占有位元組數
char型別在java中占2個位元組;
7.2 char型別與short型別
char和short可表示的種類數量相同,但char可取更大的正整數;
8、float型別與double型別
java中無float型別,定義float型別時,在浮點數后+f;
否則認為是double型別,編譯失敗;
9、型別轉換
1、布爾型別無法強制轉換;
2、Java:高精度賦值給低精度時需要強制轉換,否則編譯錯誤,顯示不兼容的型別,高精度到低精度會造成損失精度;e.g.long-->int
3、C語言:高精度賦值給低精度時,會有精度缺失,但不會造成編譯失敗;
4、Java和C語言:低精度賦值給高精度(小容量-->大容量) 自動轉換,不存在精度損失;e.g. int-->long
5、當整數字面值未超過byte、short、char的取值范圍可以直接賦值給byte、short、char;
6、byte、short、char混合運算時,先各自轉換成int;
byte b=10;
b=b+5;
System.out.println(b);
編譯報錯,因為(b+5自動轉換成了int型別,所以要想通過編譯,需要加強制轉換)
byte b=10;
b=(byte)(b+5);
System.out.println(b);
7、多種資料型別混合運算時,先轉換成容量最大的型別;

8、long型別在后面+'L',long 10L,L用來判斷是否為long型別;
9、float表示離散、有限、舍入誤差、大約、接近不等于、0.1!=0.1,c=c+1;
需要完全避免用浮點數比較大小;
10、
int i = 128;
byte b=(byte) i;
輸出為-127(因為有溢位);
11、JDK新特性
數字之間可以用下劃線分隔,更清楚分辨位數;
e.g.10_0000_0000
10、類的定義
10.1 語法結構
[修飾符串列] class 類名{
}
String不屬于基本資料型別,是一個字串型別,也是一個參考型別;
參考資料型別還包括:類,介面,陣列;
String是SUN在JavaSE中提供的字串型別;
String.class位元組碼檔案;
重點:
1、屬性通常是采用一個變數的形式來完成定義的;
2、在類體當中,方法體之外定義的變數被稱為"成員變數",成員變數沒有賦值,系統賦默認值:一切向0看齊;
10.2 基本資料型別
byte、short、int、long、float、double、boolean、char;
10.3 參考資料型別
String.class SUN提供的;
System.class SUN提供的;
Student.class 程式員自定義的(是一個類,型別,參考資料型別);
11、邏輯運算子(布爾運算子)
& 邏輯與
| 邏輯或
!邏輯非(取反)
^ 邏輯異或(兩邊的算子只要不一樣,結果就是ture)
&& 短路與
|| 短路或
1、邏輯運算子要求兩邊的算子都是布爾型別,并且邏輯運算子最終的運算結果也是一個布爾型別;
2、“短路與(或)”和“邏輯與(或)”最終的結果相同,只不過“短路與(或)”存在短路現象
11.1 邏輯與&
&左邊無論是true還是flase都會計算右邊;
int x=10;
int y=8;
System.out.println(x < y & ++x < y);
System.out.println(x);
運行結果為11
11.2 短路與&&
&&左邊若為false則直接短路,右邊不再計算(短路現象);
int x=10;
int y=8;
System.out.println(x < y && ++x < y);
System.out.println(x);
運行結果為10
從某個角度來看,短路與更智能,效率更高;
12、運算子
12.1 賦值運算子
+=、-=、*=、/=、%=;
byte、short、char混合運算時,先各自轉換成int;
byte b=10;
b=b+5;
System.out.println(b);
編譯報錯,(b+5自動轉換成了int型別,所以要想通過編譯,需要加強制轉換或者使用b+=5)
byte b=10;
b=(byte)(b+5);
b+=5;
System.out.println(b);
以上述例子為例
b+=5和b=b+5并不等同;
b+=5與b=(byte)(b+5)是等同的;
結論:
擴展類的賦值運算子不改變運算結果型別,假設最初這個變數的型別是byte型別,無論怎么進行追加或追減,最終該變數的資料型別還是byte型別,但有可能會損失;
12.2 字串連接運算子
關于java中"+"運算子:
1、+運算子在java語言當中有兩個作用:
*加法運算,求和;
*字串的連接運算;
2、"+"兩邊的資料都是數字的話一定是加法運算;
3、"+"兩邊的資料只要有一個資料是字串,一定會進行字串的連接運算,連接運算之后的結果還是一個字串型別;
靜態輸出
e.g.System.out.println(10+20);//30
System.out.println(10+20+"30");//"3030"
System.out.println(10+(20+"30");//"102030"
System.out.println("10+20="+a+b);
"10+20="是字串;
"10+20="+a先運算字串+a等于個字串"10+20=10";
"10+20="+a+b再運算+b等于個字串"10+20=1020";
System.out.println("10+20="+(a+b));
此時先運算(a+b)=30,在進行字串"10+20="+30="10+20=30";
動態輸出
System.out.println(a+"+"+b+"="+(a+b));
12.3 三元運算子/三目運算子/條件運算子
e.g.1
10,'男'不是一個完整的java陳述句;
boolean sex=false;
sex ? '男' : '女';
編譯會報錯;
修改如下:
boolean sex=false;
char c = sex ? '男' : '女';
System.out.println(c);
e.g.2
boolean sex=false;
char c = sex ? "男" : '女';
System.out.println(c);
編譯報錯,型別不兼容,但可以直接用
System.out.println(sex ? "男" : '女');
13、用戶控制端輸入
第一步:創建鍵盤掃描器物件
java.util.scanner s = new java.util.Scanner(System.in);
第二步:呼叫Scanner物件的next()方法開始接收用戶鍵盤輸入
敲完回車鍵 鍵入的資訊會自動賦值給識別符號
String userInputContent = s.next();【以字串的形式接收】
int num = s.nextInt();【以整型的形式接收】
//識別符號的命名規范:見名知意
13.1 Scanner類中的方法
-
優點一: 可以獲取鍵盤輸入的字串 ;
-
優點二: 有現成的獲取int,float等型別資料,非常強大,也非常方便;
Scanner s = new Scanner(System.in);
System.out.println("ScannerTest, Please Enter Name:");
String name = sc.nextLine(); //讀取字串型輸入
Scanner s = new Scanner(System.in);
System.out.println("ScannerTest, Please Enter Age:");
int age = sc.nextInt(); //讀取整型輸入
Scanner s = new Scanner(System.in);
System.out.println("ScannerTest, Please Enter Salary:");
float salary = sc.nextFloat(); //讀取float型輸入
Scanner s = new Scanner(System.in); System.out.println("Your Information is as below:");
System.out.println("Name:" + name +"\n" + "Age:"+age + "\n"+"Salary:"+salary);
13.2 System.in和System.out方法
-
缺點一: 該方法能獲取從鍵盤輸入的字符,但只能針對一個字符的獲取
-
缺點二: 獲取的只是char型別的,如果想獲得int,float等型別的輸入,比較麻煩,
try{
System.out.print("Enter a Char:");
char i = (char)System.in.read();
System.out.println("Yout Enter Char is:" + i);
}
catch(IOException e){
e.printStackTrace();
}
13.3 InputStreamReader和BufferedReader方法
-
優點: 可以獲取鍵盤輸入的字串
-
缺點: 如何要獲取的是int,float等型別的仍然需要轉換
System.out.println("ReadTest, Please Enter Data:");
InputStreamReader is = new InputStreamReader(System.in); //new構造InputStreamReader物件
BufferedReader br = new BufferedReader(is); //拿構造的方法傳到BufferedReader中
try{ //該方法中有個IOExcepiton需要捕獲
String name = br.readLine();
System.out.println("ReadTest Output:" + name);
}
catch(IOException e){
e.printStackTrace();
}
13.4 nextLine( )和next( )的區別
nextLine( )方法回傳的是Enter鍵之前的所有字符,它是可以得到帶空格的字串的, next( )會自動消去有效字符前的空格,只回傳輸入的字符,不能得到帶空格的字串,
14、方法
14.1 方法的定義,語法結構
[修飾符串列] 回傳值型別 方法名(形式引數串列){
方法體;
}
注意:
1)修飾符串列可選項,不是必須的,目前統一寫成public static;
2)方法內的修飾符串列當中有static關鍵字時,呼叫方法:類名.方法名(實際引數串列);當方法在該類中時,"類名."可以省略;
3)方法名:首字母小寫,后面每個字母大寫,遵循駝峰規則;
4)建議一個源檔案當中只定義一個class,比較清晰;
14.2 方法在執行程序中,JVM記憶體的分配和變化
14.2.1 方法的定義和執行:
方法只定義,不呼叫是不會執行的,并且在JVM中也不會給該方法分配"運行所屬"的記憶體空間;只有呼叫的時候才會分配所屬的內空間;
14.2.2 JVM記憶體劃分上主要的記憶體空間:
方法區記憶體、堆記憶體、堆疊記憶體(還有其他的記憶體空間);
14.2.3 堆疊資料結構 :
*堆疊:stack,是一種資料結構;
*資料結構是資料的存盤形態;
*常見的資料結構:陣列、佇列、堆疊、鏈表、二叉樹、哈希表/散串列;
14.2.4 方法代碼檔案的存盤位置,記憶體的分配位置:
1)方法代碼片段屬于.class位元組碼檔案的一部分,位元組碼檔案在類的加載的時候,將其放到了方法區當中,所以JVM中的三塊主要的記憶體空間中方法區記憶體最先有資料,存在了代碼片段;
2)代碼片段雖然在方法區當中只要一份,但是可以重復呼叫,每一次呼叫這個方法的時候,需要給該方法分配獨立的活動場所,在堆疊記憶體中分配【堆疊記憶體中分配方法運行的所屬空間】;
3)方法在呼叫的瞬間會給該方法分配獨立的記憶體空間,在堆疊中發生壓堆疊動作,方法執行結束之后,給該方法分配獨立的記憶體空間全部釋放,此時發生彈堆疊動作,
壓堆疊:給方法分配記憶體;
彈堆疊:釋放該方法的記憶體空間;
4)區域變數在在“方法體”中宣告,在堆疊中存盤,運行時在堆疊中分配;

e.g.下列程式模型就是一個壓堆疊、彈堆疊的程序;
main begin
m1 begin
m2 begin
m3 begin
m3 over
m2 over
m3 over
main over
14.3 堆疊記憶體的特點
1)堆疊幀永遠指向堆疊頂元素
2)堆疊頂元素處于活躍狀態,其他元素靜止
3)術語: 壓堆疊/入堆疊/push
彈堆疊/出堆疊/pop
4)堆疊資料結構存盤資料的特點:
先進后出;
后進先出;

15、方法執行記憶體分析
public class MethodTest01
{
public static void main(String[] args)
{
int a = 10;
int b = 20;
int restValue = sumInt(a,b);
System.out.println("retValue = "+ retvalue);
}
public ststic int sumInt(int i,int j)
{
int result = i + j;
int num = 3;
int reValue = divide (result,num);
return retValue;
}
public static int divide (int x,int y)
{
int z = x / y;
return z;
}
}

16、方法多載(overload)
優點:
功能不相同但相似,像是在使用同一個方法一樣,程式員撰寫代碼更加方便,也不需要記憶更多的方法名,代碼更美觀;
(javascript不支持方法多載機制)
public class MethodTest01
{
public static void main(String[] args)
{
System.out.println(sum(1,2));
System.out.println(sum(1.0,2.0));
System.out.println(sum(1L,2L));
}
public static int sum(int a,int b)
{
return a + b;
}
public static long sum(long a,long b)
{
return a + b;
}
public static double sum(double a,double b)
{
return a + b;
}
}
引數的型別不同,對應呼叫的方法也不同,此時區分方法不再依靠方法名了,依靠的是實參的資料型別,
16.1 什么時候考慮使用方法多載?
*功能相似的時候,盡可能讓方法名相同;
【功能不同/不相似的時候,盡可能讓方法名不同】;
16.2 構成方法多載的條件
1)在同一個類中
2)方法名相同
3)引數串列不同
(數量不同、順序不同、型別不同)
16.3 方法多載的影響因素
1)方法多載和方法名+引數串列有關;
2)方法多載和回傳值型別無關;
3)方法多載和修飾符串列無關;
16.4 方法多載的應用
用戶自定義封裝一段代碼,使得在使用時更加便捷快速呼叫;
public class helloworld
{
public static void main(String[] args)
{
U.v(2.0);
}
}
class U
{
public static void v(long b){
System.out.println(b);
}
public static void v(double b){
System.out.println(b);
}
public static void v(short b){
System.out.println(b);
}
public static void v(char b){
System.out.println(b);
}
public static void v(String b){
System.out.println(b);
}
public static void v(byte b){
System.out.println(b);
}
}
17、方法遞回
缺點:
耗費堆疊記憶體,呼叫一次方法堆疊記憶體就會新分配一塊所屬的記憶體空間;
當沒有結束條件時,堆疊記憶體溢位錯誤,錯誤無法挽回,只要一個結果,就是JVM停止作業;
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/400556.html
標籤:java
上一篇:Java圖形化界面編程
