沒有特殊說明,個人全部學習筆記都是從廖老師那裏摘抄過來的,侵刪java
兜兜轉轉到了大四,學過了C,C++,C#,Java,Python,學一門丟一門,到了最後仍是要把Java撿起來。因此奉勸你們,面向對象仍是要掌握一門,雖然Python好寫舒服,可是畢竟不能徹底面向對象,也沒有那麼多的應用場景,因此,奉勸看到本文的各位,仍是提早學好C#或者Java,話很少說,直接開幹!數組
每一個Java程序只能有一個public修飾的類,而且該類的名字要和該Java程序文件同名。學習
Java入口程序規定的方法必須是靜態方法,方法名必須爲main
,括號內的參數必須是String數組。ui
public static void main(String[] args) { // 方法名是main // 方法代碼... } // 方法定義結束
類名首字母大寫,方法名首字母小寫。編碼
Java的每一行語句必須以分號結束。3d
特殊的多行註釋須要寫在類和方法的定義處,能夠用於自動建立文檔。code
/** * 能夠用來自動建立文檔的註釋 * * @auther liaoxuefeng */ public class Hello { public static void main(String[] args) { System.out.println("Hello, world!"); } }
Eclipse IDE提供了快捷鍵Ctrl+Shift+F
(macOS是⌘+⇧+F
)幫助咱們快速格式化代碼的功能。對象
Java中,變量分爲兩種:基本類型的變量和引用類型的變量。blog
在Java中,變量必須先定義後使用,在定義變量的時候,能夠給它一個初始值。ip
不寫初始值,就至關於給它指定了默認值。默認值老是0
。
不一樣的數據類型佔用的字節數不同,byte
剛好就是一個字節,而long
和double
須要8個字節。
┌───┐ byte │ │ └───┘ ┌───┬───┐ short │ │ │ └───┴───┘ ┌───┬───┬───┬───┐ int │ │ │ │ │ └───┴───┴───┴───┘ ┌───┬───┬───┬───┬───┬───┬───┬───┐ long │ │ │ │ │ │ │ │ │ └───┴───┴───┴───┴───┴───┴───┴───┘ ┌───┬───┬───┬───┐ float │ │ │ │ │ └───┴───┴───┴───┘ ┌───┬───┬───┬───┬───┬───┬───┬───┐ double │ │ │ │ │ │ │ │ │ └───┴───┴───┴───┴───┴───┴───┴───┘ ┌───┬───┐ char │ │ │ └───┴───┘
在Java中的整形,和他們的取值範圍
public class Main { public static void main(String[] args) { int i = 2147483647; int i2 = -2147483648; int i3 = 2_000_000_000; // 加下劃線更容易識別,並且不會有錯 int i4 = 0xff0000; // 十六進制表示的16711680 int i5 = 0b1000000000; // 二進制表示的512 long l = 9000000000000000000L; // long型的結尾須要加L System.out.println(i3); } }
浮點型的數就是小數,由於小數用科學計數法表示的時候,小數點是能夠「浮動」的
float f1 = 3.14f; float f2 = 3.14e38f; // 科學計數法表示的3.14x10^38 double d = 1.79e308; double d2 = -1.79e308; double d3 = 4.9e-324; // 科學計數法表示的4.9x10^-324
布爾類型boolean
只有true
和false
兩個值,布爾類型老是關係運算的計算結果
boolean
表示爲4字節整數。字符類型char
表示一個字符。Java的char
類型除可表示標準的ASCII外,還能夠表示一個Unicode字符。
char
類型使用單引號'
,且僅有一個字符,要和雙引號"
的字符串類型區分開。定義變量的時候,若是加上final
修飾符,這個變量就變成了常量:
final double PI = 3.14; // PI是一個常量 double r = 5.0; double area = PI * r * r; PI = 300; // compile error!
var關鍵字
StringBuilder sb = new StringBuilder(); var sb = new StringBuilder();//類型的名字太長了
變量的做用範圍
遵循四則運算規則,可使用任意嵌套的小括號
整數的數值表示不可是精確的,並且整數運算永遠是精確的,即便是除法也是精確的,由於兩個整數相除只能獲得結果的整數部分:
求餘運算使用%
整數的除法對於除數爲0時運行時將報錯,但編譯不會報錯。
整數因爲存在範圍限制,若是計算結果超出了範圍,就會產生溢出
,而溢出不會出錯,卻會獲得一個奇怪的結果。
自增/自減
++
運算和--
運算,它們能夠對一個整數進行加1和減1的操做:若是對一個負數進行右移,最高位的1
不動,結果仍然是一個負數:
還有一種不帶符號的右移運算,使用>>>
,它的特色是符號位跟着動,所以,對一個負數進行>>>
右移,它會變成正數,緣由是最高位的1
變成了0
。
對byte
和short
類型進行移位時,會首先轉換爲int
再進行位移。
仔細觀察可發現,左移實際上就是不斷地×2,右移實際上就是不斷地÷2。
位運算是按位進行與、或、非和異或的運算。
運算優先級
在Java的計算表達式中,運算優先級從高到低依次是:
()
! ~ ++ --
* / %
+ -
<< >> >>>
&
|
+= -= *= /=
類型自動提高與強制轉型
(類型)
int
的兩個高位字節直接被扔掉,僅保留了低位的兩個字節。int
或long
),沒有必要爲了節省內存而使用byte
和short
進行整數運算。浮點數運算和整數運算相比,只能進行加減乘除這些數值計算,不能作位運算和移位運算。
因爲浮點數存在運算偏差,因此比較兩個浮點數是否相等經常會出現錯誤的結果。正確的比較方法是判斷兩個浮點數之差的絕對值是否小於一個很小的數:
整數運算在除數爲0
時會報錯,而浮點數運算在除數爲0
時,不會報錯,但會返回幾個特殊值:
NaN
表示Not a NumberInfinity
表示無窮大-Infinity
表示負無窮大double d1 = 0.0 / 0; // NaN double d2 = 1.0 / 0; // Infinity double d3 = -1.0 / 0; // -Infinity
能夠將浮點數強制轉型爲整數。在轉型時,浮點數的小數部分會被丟掉。若是轉型後超過了整型能表示的最大範圍,將返回整型的最大值。
若是要進行四捨五入,能夠對浮點數加上0.5再強制轉型。
整型和浮點型運算時,整型會自動提高爲浮點型。
>
,>=
,<
,<=
,==
,!=
&&
||
!
!
>
,>=
,<
,<=
==
,!=
&&
||
b ? x : y
,它根據第一個布爾表達式的結果,分別返回後續兩個表達式之一的計算結果。在Java中,字符和字符串是兩個不一樣的類型。
字符類型
char
保存一個Unicode字符\u
+Unicode編碼來表示一個字符char
類型表示,它們都佔用兩個字節。要顯示一個字符的Unicode編碼,將char
類型直接賦值給int
類型即便可。char c1 = 'a' char c2 = '中' int n1 = 'a'//65 int n2 = '中'//20013 // 注意是十六進制: char c3 = '\u0041'; // 'A',由於十六進制0041 = 十進制65 char c4 = '\u4e2d'; // '中',由於十六進制4e2d = 十進制20013
字符串類型
\"
表示字符"
\'
表示字符'
\\
表示字符\
\n
表示換行符\r
表示回車符\t
表示Tab\u####
表示一個Unicode編碼的字符字符串鏈接
+
鏈接任意字符串和其餘數據類型
+
鏈接字符串和其餘類型,Java會自動將其餘類型轉換爲字符串類型,再鏈接。多行字符串
"""..."""
表示多行字符串不可變特性
s
變了嗎?其實變的不是字符串,而是變量s
的「指向」s
還在,只是咱們不能再經過s
訪問空值null
String s1 = null; // s1是null String s2; // 沒有賦初值值,s2也是null String s3 = s1; // s3也是null String s4 = ""; // s4指向空字符串,不是null
Java的數組有幾個特色:
0
,浮點型是0.0
,布爾型是false
;引用類型
引用類型
(如String),但數組自己是引用類型
;用數組變量.length
獲取數組大小
int[] ns = new int[] { 68, 79, 91, 85, 62 };//這樣能夠不聲明數組的大小 int[] ns = { 68, 79, 91, 85, 62 };//還能夠進一步簡化爲這樣
字符串數組