1. 程式人生 > 其它 >JavaSE學習 Day3 - Java基礎語法

JavaSE學習 Day3 - Java基礎語法

今天是2021年5月22號,袁隆平院士於今日13:07逝世,享年91歲。這是一位偉大的科學家,偉大的研究者,幾十年兢兢業業,認認真真搞科研,腳踏實地,長期奮鬥在科研一線,我由衷的傾佩。薪火相傳,新時代的青年要繼承袁老的精神,新時代的科研工作者更要繼承袁老的科研態度,為了國家的發展、社會進步及世界的前景貢獻自己微不足道的力量!後輩仍需努力啊!

基礎語法

建立空專案

  1. 新建工程(工程內部可以是Java,也可以是Android,甚至是其他的檔案型別)。點選empty project,建立空專案,填寫專案名稱,例如JavaSE,選擇專案的位置。相當於新建了一個名為JavaSE的資料夾存放Java工程。
  2. 增加Java模組。選擇files-new-module-java,填寫名稱,例如基礎語法。相當於在javaSE資料夾內部新建了一個名為基礎語法的資料夾,存放工程檔案。
  3. 修改專案結構。一定要執行,不然沒法使用。files-project structure-project,選擇對應的jdk和自己的Java版本
  4. 新建包 package。src-右鍵-新建-package。相當於在基礎語法的資料夾內部新建了資料夾
  5. 在對應的包內新建類 class。右擊-新建class。相當於在包資料夾內部新建class類,可以開始編寫程式碼。

註釋

書寫註釋是一個非常好的習慣。註釋主要分為三種,單行註釋、多行註釋、文件註釋。

  • 單行註釋
    //
  • 多行註釋(大段的文字說明)
    /*
    註釋
    */
  • 文件註釋(裡邊可以加入引數描述、作者資訊、方法說明等)
    /**
    *@deprecated
    *@author
    */

識別符號zhi

Java所有的組成部分都需要命名,那麼這些類名、變數名以及方法名都被稱為識別符號。但是命名是有規則的,Java內部已經存在的關鍵詞不能被重新定義。
識別符號注意點:

  1. 所有的識別符號都應該以字母(大小寫)、美元符號、下劃線開頭
  2. 首字元之後可以是字母(大小寫)、美元字元、下劃線或者數字的任意字元組合
  3. 不能使用關鍵詞作為變數名或者方法名
  4. 識別符號是大小寫敏感
  5. 可以用中文命名,但是一般不建議這樣使用,也不建議用拼音

資料型別

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);