JavaSE學習 Day3 - Java基礎語法
今天是2021年5月22號,袁隆平院士於今日13:07逝世,享年91歲。這是一位偉大的科學家,偉大的研究者,幾十年兢兢業業,認認真真搞科研,腳踏實地,長期奮鬥在科研一線,我由衷的傾佩。薪火相傳,新時代的青年要繼承袁老的精神,新時代的科研工作者更要繼承袁老的科研態度,為了國家的發展、社會進步及世界的前景貢獻自己微不足道的力量!後輩仍需努力啊!
基礎語法
建立空專案
- 新建工程(工程內部可以是Java,也可以是Android,甚至是其他的檔案型別)。點選empty project,建立空專案,填寫專案名稱,例如JavaSE,選擇專案的位置。相當於新建了一個名為JavaSE的資料夾存放Java工程。
- 增加Java模組。選擇files-new-module-java,填寫名稱,例如基礎語法。相當於在javaSE資料夾內部新建了一個名為基礎語法的資料夾,存放工程檔案。
- 修改專案結構。一定要執行,不然沒法使用。files-project structure-project,選擇對應的jdk和自己的Java版本
- 新建包 package。src-右鍵-新建-package。相當於在基礎語法的資料夾內部新建了資料夾
- 在對應的包內新建類 class。右擊-新建class。相當於在包資料夾內部新建class類,可以開始編寫程式碼。
註釋
書寫註釋是一個非常好的習慣。註釋主要分為三種,單行註釋、多行註釋、文件註釋。
- 單行註釋
// - 多行註釋(大段的文字說明)
/*
註釋
*/ - 文件註釋(裡邊可以加入引數描述、作者資訊、方法說明等)
/**
*@deprecated
*@author
*/
識別符號zhi
Java所有的組成部分都需要命名,那麼這些類名、變數名以及方法名都被稱為識別符號。但是命名是有規則的,Java內部已經存在的關鍵詞不能被重新定義。
識別符號注意點:
- 所有的識別符號都應該以字母(大小寫)、美元符號、下劃線開頭
- 首字元之後可以是字母(大小寫)、美元字元、下劃線或者數字的任意字元組合
- 不能使用關鍵詞作為變數名或者方法名
- 識別符號是大小寫敏感
- 可以用中文命名,但是一般不建議這樣使用,也不建議用拼音
資料型別
Java屬於強型別語言,要求變數的使用嚴格符合規定,所有變數必須先定義然後才能使用。Java安全性好,但是執行速度會受到影響。八大基本資料型別。
位、位元組(8位)、KB(1024位元組)、M(1024KB)
資料型別擴充套件
- 整數擴充套件
二進位制、八進位制、十進位制、十六進位制
Java不支援二進位制的表示,只能通過String類進行表示
八進位制 int x1 = 010; //八進位制以0開頭,010表示8
十進位制 int x2 = 10;
十六進位制 int x3 = 0x10; //十六進位制以0x開頭,0x10表示16
進位制之間的轉換可以使用對應的類方法 - 浮點數擴充套件
浮點數是有限的、離散的、存在舍入誤差、接近但是不相等。因此要避免使用浮點數進行數值比較,可以使用BigDecimal類進行比較。 - 字元擴充套件
所有字元的本質還是數字,可以通過強制型別轉換為數字
每一個字元在Unicode編碼表中都對應一個數字,不過需要注意是Unicode編碼採用十六進位制,而數值轉換輸出的結果為十進位制 - 轉義字元
// \t表示製表符,\n表示換行
System.out.println("Hello\tWorld");
- boolean擴充套件
boolean flag = true;
//以下兩行程式碼是一致的,下一行更加精簡而已。if語句判斷的時候,第一個結構分支預設為true
if(flag==true){}else{}
if(flag){}else{}
資料型別轉換
由於Java是強資料型別語言,所以進行某些運算時,需要用到資料型別轉換。
資料型別由低到高為byte、short、char→int→long→float→double(小數的優先順序一定大於整數)
//資料型別由高到低需要進行強制型別轉換 (型別名)變數名
int i1 = 128;
byte b1 = (byte)i1; //但b1不為128,因記憶體溢位,128超出了byte的範圍
//資料型別由低到高會進行自動的資料型別轉換
int i2 = 128;
double b1 = i2; //自動進行資料型別轉換,b2為128.0
/**
1. 不能對布林值進行型別轉換
2. 不能把物件型別轉換為不相干的型別(例如,String轉int)
3. 高容量轉換為低容量時,強制型別轉換
4. 轉換的時候可能存在記憶體溢位(129轉換為byte型別時,記憶體溢位)或者精度問題(23.7轉換為整數時,輸出值為23)
*/
資料進行計算時,要注意記憶體溢位的問題
//操作比較大的數時,要注意記憶體溢位的問題
int money = 10_0000_0000; //JDK7的新特性,較大的數字可以用下劃線進行分割,便於讀數
int years = 20;
//錯誤的計算方式
int total1 = money*years; //計算的結果超出了int的範圍,記憶體溢位
long total2 = money*years; //先計算,然後進行資料型別轉換,計算結果本身存在記憶體溢位,造成結果依然不正確
//正確的操作,對乘數先進行資料型別轉換,然後再進行相乘,結果以較大的資料型別為準
long total3 = money*((long)years);
變數
Java屬於強型別語言,每個變數都必須宣告其型別。
Java變數是程式中最基本的儲存單元,其要素包括變數型別、變數名和作用域。
- 變數宣告的格式:
資料型別 變數名 = 值; - 變數宣告注意事項:
①每個變數都有型別,型別可以是基本資料型別,也可以是引用資料型別
②變數名必須是合法的識別符號(詳見識別符號命名)
③變數宣告要以分號結束 - 變數作用域★
①區域性變數
區域性變數是指定義在方法或者程式碼塊中的變數,區域性變數必須初始化,在方法或者程式碼塊中有效,之外無效,方法執行開始入棧時建立,執行完畢出棧時銷燬
②例項變數
其作用域受限定符限定,Private的只能在本類中使用,protected子類可用,public任何地方都能用。生命週期從物件建立開始到物件銷燬結束。
③類變數
類變數是指類的static變數,用類名可以直接訪問。生命週期從載入類開始,到銷燬類結束。
package ***;
public class Demo08 {
//③類變數:從屬於類,可以直接呼叫
//類變數命名需要增加修飾符static
static double salary = 2500;
//②例項變數:從屬於物件
//可以不進行初始化。如果不進行初始化,則輸出預設值
//數值型別預設值為0 0.0 u0000,boolean型別預設值為false
//除了基本資料型別,其餘型別的預設值均為null
String name;
int age;
//main方法
public static void main(String[] args) {
//呼叫類變數:可以直接呼叫
System.out.println(salary);
//呼叫例項變數
Demo08 demo08 = new Demo08(); //本質上還是變數的定義格式:變數型別 變數名 = 值;
System.out.println(demo08.age); //結果為0
System.out.println(demo08.name); //結果為null
//②區域性變數:必須宣告和初始化值
int i = 10;
System.out.println(i);
}
//其他方法
public void adds(){
}
}
- 變數命名規範★
①所有的變數、方法和類名都應該做到見名知意
②類成員變數:首字母小寫和駝峰原則:monthSalary
③區域性變數:首字母小寫和駝峰原則
④常量:全部字母大寫和下劃線:MAX_VALUE
⑤類名:首字母大寫和駝峰原則:Man、GoodMan
⑥方法名:首字母小寫和駝峰原則
常量
常量是指初始化後不再變動的值。常量名一般使用大寫字元。常量的本質還是變數,只是數值不允許更改。
final 變數型別 變數名 = 值;
final double PI = 3.14 //final為修飾符
//static、final均為修飾符,不同的是static為類變數定義的修飾符,而final為常量定義的修飾符。
//常見修飾符有static、final、privacy、public,變數定義前的修飾符不存在前後順序問題。
static final double e = 2.71;
運算子
- 算數運算子:+、-、*、/、%、++、--
- 賦值運算子:=
- 關係運算符:<、>、>=、<=、==、!=、instanceof
- 邏輯運算子:&&、||、!
- 位運算子:&、|、^、~、>>、<<、>>>
- 條件運算子: ?:
- 擴充套件運算子: +=、-=、*=、/=
運算子擴充套件
①在進行計算是,要注意資料型別是否發生了變化,要提前進行資料型別轉換整數
int型別相除可能得到小數double型別
②整數型別相加減
整數型別進行加操作時,如果相加項有long型別,則返回值為long型別,否則不論為何種型別則返回int型別,除非進行資料型別轉換;(有高資料型別,結果為高資料型別,否則整數加減必定返回int型別)
如果有double型別則返回double型別
③++、--
int a = 3;
int b = a++;
//這條語句可以分為兩條
//int b = a; //b=3
//int a = a + 1; //a=4;
int c = ++a;
//這條語句可以分為兩條
//int a = a + 1; //a=5;
//int c = a; //c=5
//很多運算會使用一些工具類進行操作
double pow = Math.pow(2, 3) //Math工具類裡邊的冪運算
④關係運算符與if相使用
⑤邏輯運算子
短路運算原則。與或非演算法的執行按照短路運算進行,即如果前半部分為真,則與運算便不執行後半部分
int c = 5;
boolean d = (c<4)&&(c++<6); //前半部分為假,不關心後半部分,結果必為假
System.out.println(d);
System.out.println(c); //c輸出值為5,因為沒有與運算沒有執行後半部分程式碼
⑥位運算子
A&B表示按位與
A|B表示按位或
A^B表示異或,相同為0,不同為1
~B表示按位取反
/*
位運算子簡單應用
<< 每左移一位代表乘以2
>> 每右移一位代表除以2
*/
⑦擴充套件運算子
int a = 10;
int b = 5;
a+=b; //a = a + b;
a-=b; //a = a - b;
//字串連線符 + ,如果+的左右兩邊有String型別,則結果是將字元連線起來
//注意,String型別最好放置在前邊,放置在後邊的話,前邊的數值型別資料仍然按照加法進行計算
System.out.println(""+a+b); //輸出結果為105,表示連線字元
System.out.println(a+b+""); //輸出結果為15,表示計算
⑧條件運算子(三元運算子),可替代較為簡單的條件判斷語句
//x ?y:z;
/如果x==true,則結果返回y的值,否則返回z的值
int score = 50;
String grade = score < 60 ?"Good":"Best";
System.out.println(type);