Java已經賦予了特殊含義的單詞,特色是都是小寫字母.(Java 關鍵字是區分大小寫的)java
目前見到的關鍵字:bash
public :公共的,公開的.權限修飾符,說明後面的類或者是方法誰均可以用.jvm
class :定義類的.編碼
static :靜態的,說明這個方法能夠屬於類,可使用類名直接調用.spa
void :空.說明當前的方法沒有返回值.3d
main : 不是關鍵字.約定俗成的程序的入口點.code
編譯的時候一個類編譯成一個.class文件,多個類生成多個.class文件對象
/* 演示:文件名和類名不必定保持一致 類前邊若是加public,那麼類名和文件名必須保持一致. 不然,文件名和類名能夠不一致. 此時,編譯成功的結果,字節碼文件的名稱和類名一致. */ // public class Demo4{ //沒有public修飾,代表權限是default(默認權限:包權限) //沒有定義包的話,代表都在默認包中. class Demo4{ public static void main(String[] aa){ System.out.println("hello"); } } //想要被jvm虛擬機直接運行的類必須包含main方法,不然不用定義. class Demo5{ public static void main(String[] aa){ System.out.println("hello"); } }
總結:blog
通常狀況下:一個源文件中只定義一個類,並且這個類是public修飾的,類名和文件名保持一致.接口
一個源文件中能夠包含多個類定義,可是public修飾的只能有一個.此源文件被編譯後,類分別生成本身的.class字節碼文件.
用於給方法、變量、接口等命名的字符序列
大小寫英文字母、下劃線、數字、$組成
不能以數字開頭
不可使用關鍵字,但能夠包含關鍵字
java嚴格區分大小寫
類名、接口名:
多單詞組成時,全部單詞首字母大寫
包名:
多單詞組成時,全部字母小寫
變量名、方法名:
多單詞組成時,第一個單詞首字母小寫,第二個單詞開始每一個單詞首字母大寫
final變量名:
全部字母都大寫,多單詞時單詞之間用下劃線分割
如:AAA_BBB_CCC
Java中常量分兩種: 字面量:在程序中直接出現的值 final變量:也稱爲final常量,這種變量一旦賦值,就不能改變.(常量名通常使用大寫字符)
語法:final 常量名 = 值;
字面量:程序中直接出現的數值:
六種:
1.整數常量:直接出現的數字,不帶小數點
2.小數常量:直接出現的小數.必須帶小數點
3.字符常量:用單引號('')引發的 數字, 字母 ,字符. 注意:'' 不是空字符
4.字符串常量:用雙引號引發的單個字符或者是多個字符."" 也是字符串,空串.
5.布爾常量:true false TRUE FALSE 嚴格區分大小寫.
6.null常量:全部的引用數據類型的一個空值. 備註:Null不能直接打印
其中:整型常量有四種表示方式:
十進制:每位上的數只能是1-9,滿10進1,默認的數值表示方式.
二進制:每位上的數只能是0,1,滿2進1,以0b或者0B開頭.
八進制:每位上的數只能是0-7,滿8進1,以0開頭.
十六進制:每位上的數只能是0-9,A-F,滿16進1,以0x 或者是0X開頭.
備註:進制的本質是權重, 如十進制數531,5的權重是100,3的權重是10,1的權重是1,
針對正數,三者相同. 10 -> 0000 1010 原碼,反碼,補碼一致.
負數用補碼錶示: 補碼是反碼+1獲得: 反碼是原碼數值位取反獲得.
原碼轉換爲反碼:符號位不變,數值位分別「按位取反」
原碼轉換爲補碼:符號位不變,數值位按位取反,末位再加1
補碼轉換爲原碼:符號位不變,數值位按位取反,末位再加1。
即補碼的補碼等於原碼
變量類型,變量名,變量值
(1)定義和賦值一塊兒進行:
變量類型 變量名 = 初始值;
(2)先定義,後賦值.
變量類型 變量名;
變量名 = 初始值;
變量就是一塊內存空間,裏面的值能夠隨時發生變化
在 Java 的領域裏,基本數據類型變量存的是數據自己,而引用類型變量存的是保存數據的空間地址。
整型: 字節數 byte 1 short 2 int 4 long 8 浮點型: float 4 double(默認) 8 字符型: char 2 布爾型: boolean 1
public class VariableDemo2{ public static void main(String[] args){ //定義變量 //整型數值,若是是在前面的類型的表數範圍內,能夠直接賦值.!!! //系統會自動的將字面量int型轉換成和前面類型匹配的類型. /* byte b = 127; short s = 128; int i = 21245487; */ //快速的獲取到int型的最大值 System.out.println(Integer.MAX_VALUE);//2147483647 System.out.println(Long.MAX_VALUE);//9223372036854775807 long l = 2147483648L; long l2 = 10; //默認的類型轉換 : 從小範圍到大範圍. //字面量的int值不能超過int的表數範圍,若是超過int型最大值,加L/l後綴,代表是一個long /* //程序中出現的浮點型字面量默認是double類型 //在數值後加後綴,f/F ,明確說明數值是float類型 float f = 3.14f; double d = 3.14; char ch = 'a'; boolean bool = true; */ //變量如何使用??? // System.out.println(b);//b // System.out.println(s);// // System.out.println(i);// } }
區別:
基本數據類型:
數據直接保存在變量名所在的內存空間. 引用數據類型: 數據不是直接保存在變量名所在的內存空間,而是在另外的內存空間中. 變量名所在的內存空間保存的是一個地址值. 好比: Scanner s = new Scanner(System.in); 變量s中保存的就是等號右邊的對象所在的內存地址的地址值!!!
類型轉換: 隱式類型轉換:(自動類型轉換),不須要特殊的格式. 從表數範圍小的到表數範圍大的. 顯式類型轉換:(強制類型轉換) 從表數範圍大的到表數範圍小的 特殊的格式: 變量名 = (目標類型)被轉換的值; int a = (int)3.14; 強制類型轉換: 針對小數:取整 針對整數:高位截斷!!! double a = 128.5; byte b = (byte)a; b -> -128 先取整,在高位截斷!!!
自動:由圖可知byte不會自動轉換爲char,同時在只有byte.char.short(也能夠有int型數據參與運算)類型數據參與運算時,都會自動轉換成int型進行計算,char是用unicode碼(int類型)參加運算,而不參加運算時則不會自動轉換.
強制:
public class TypeConvertDemo{ public static void main(String[] args){ /* //自動類型轉換 int a = 10; long l = a;//int -> long System.out.println(l); //強制類型轉換 double d = 3.14; int b = (int)d;//截斷 : 只保留整數部分 System.out.println(b);//3 */ // byte b; // b = (byte)128; // 4 個字節. /* 0000 0000 0000 0000 0000 0000 1000 0000 int型的128 截斷: 從高位截斷! 1000 0000 -> 被保留的結果:負數-128 */ // System.out.println(b); // // double d = 128.5; // byte b = (byte)d; // System.out.println(b); //發生了兩次類型轉換 // double -> byte // byte -> int int x = (byte)3.14; System.out.println(x); } }
/* 不一樣類型的變量進行運算,都會自動的往範圍大的類型進行轉型. */ public class TypeConvertDemo2{ public static void main(String[] args){ /* //int -> double double d = 3 + 1.5; //int -> long long l = 3 + 100L; short s1 = 10; short s2 = 20; // short s3 = s1 + s2;//short類型變量只要進行運算,首先無條件轉換成int型. long l = s1 + 100L;//short->int->long //char參與運算實際上使用的是對應的unicode編碼值. char ch = 'a'; System.out.println(ch + 1); char ch1 = (char)97;// int -> char System.out.println(ch1); */ // byte b = 10; short s = b;//ok // char ch = b; //從byte轉換到char可能會有損失 } }
+ - * :和數學中規則同樣 / :當操做數都是整型,結果也是整型,小數部分捨棄 % :結果是除法操做的餘數.結果的符號取決於被模數. ++ -- :針對變量進行操做. 前++ : 先對變量增長,再使用. 後++ : 先使用變量原來的值,再增長. --同理: + : 當 + 兩側任意一側是字符串的時候,+就是鏈接符.
基本賦值運算符: = 擴展賦值運算符: += -= *= /= %= 特色:不改變等號左邊的變量的類型,至關於系統自動加上了類型轉換. short s = 1; s = (short)(s + 1);// int -> short s += 1; //自動類型轉換
結果確定是一個boolean類型
/* 演示邏輯操做符 & :兩個操做數都爲true,結果才爲true,不然就是false | :兩個操做數有一個爲true,結果就爲true.兩個操做數都爲false,結果是false. && :短路與:當左側操做數爲false時,總體的結果已是false,右側就不參與運算了. || :短路或:當左側操做數爲true時,總體的結果已是true,右側就不參與運算了. ^ :異或:兩個操做數不一樣,結果才爲true.雙true,雙false 結果都是false. ! :取反,單操做數,true -> false ,false->true. */ public class LogicDemo{ public static void main(String[] args){ /* //布爾常量進行邏輯運算 System.out.println(true && true); //布爾類型的變量進行運算 boolean b1 = true; boolean b2 = false; boolean b3 = true; System.out.println(b1 & b2); System.out.println(b1 | b2); System.out.println(b1 && b2); System.out.println(b1 || b2); System.out.println(b1 ^ b3); System.out.println(b1 ^ b2); System.out.println(!b1); */ //短路操做 // int a = 1; // boolean b = true && (a++) > 1; // System.out.println(a);//2 // System.out.println(b);//false // && 左側爲false,右側不參與運算. int a = 1; boolean b = false && (a++) > 1; System.out.println(a);//1 System.out.println(b);//false } }
格式:
(條件表達式) ? 表達式1:表達式2;
若條件表達式值爲true,總體是表達式1的值.不然是表達式2的值.
System.out.println(2>1?2:1.0); 2.0
三元運算符中表達式1和表達式2的類型不一樣時,總體結果將自動轉型到表數範圍大的類型.
級別爲 1 的優先級最高,級別 11 的優先級最低