Java全部的組成部分都須要名字。類名、變量名以及方法名都被稱爲標識符。javascript
不能使用關鍵字做爲變量名或方法名java
標識符是大小寫敏感的數組
合法標識符舉例:fuck、$abcd、_abcd、__1_abcdide
非法標識符舉例:123abc、-abc、#abc.net
強類型語言3d
弱類型語言code
Java的數據類型分爲兩大類對象
基本數據類型只有8種,可按照以下分類
①整數類型:long、int、short、byte
②浮點類型:float、double
③字符類型:char
④布爾類型:boolean
blog
No. | 數據類型 | 大小/位 | 可表示數據範圍 | 默認值 |
---|---|---|---|---|
1 | byte (字節型) |
8 | -128~127 | 0 |
2 | short (短整型) |
16 | -32768~32767 | 0 |
3 | int (整型) |
32 | -2147483648~2147483647 | 0 |
4 | long (長整型) |
64 | -9223372036854775808~9223372036854775807 | 0 |
5 | float (單精度) |
32 | -3.4E38~3.4E38 | 0.0 |
6 | double (雙精度) |
64 | -1.7E308~1.7E308 | 0.0 |
7 | char (字符) |
16 | 0~255 | '\u0000' |
8 | boolean (布爾) |
- | true或false | false |
引用數據類型很是多,大體包括:類、 接口類型、 數組類型、 枚舉類型、 註解類型、 字符串型接口
什麼是字節
因爲Java是強類型語言,因此要進行某些運算的時候,須要用到類型轉換
1.低轉高的數據類型,能夠自動轉換
例:
public static void main(String[] args) { short i = 128; int j = i; System.out.println(j);//輸出128 }
2.若是由高的數據類型轉換到低的數據類型的話,則須要強制轉換
例:
public static void main(String[] args) { long a = 12800; int b = (int)a; System.out.println(b);//輸出12800 }
注意點:
1.不能對布爾值進行轉換
2.不能把對象類型轉換爲不相干的類型
3.把高容量轉換到低容量的數據類型時,須要強制轉換
4.轉換的時候可能存在內存溢出,或者精度缺失的問題
例:
public static void main(String[] args) { //操做比較大的數時,要注意溢出問題 //JDK7新特性,數字能夠用下劃線進行分割 int money = 10_0000_0000; int year = 20; int total = money*year; System.out.println(total);//輸出-1474836480,是因爲計算的時候溢出了 long total2 = money*year; System.out.println(total2);//也是輸出-1474836480,由於轉換以前就已經溢出 long tatal3 = money*((long)year);//正確寫法應該是先把一個數轉換爲long,再進行計算 System.out.println(tatal3);//輸出20000000000 }
Java變量是程序中最基本的存儲單元,其要素包括變量類型,變量名,做用域
type varName = value //數據類型 變量名 = 值; 也能夠用逗號隔開來聲明多個變量
注意事項:
public static void main(String[] args) { int a=1,b=2,c=3;//爲了程序可讀性,不建議一行建立多個變量 String name = "張三"; int age = 47; char sex = '男'; }
變量是有做用範圍(Scope)的,也即做用域。一旦超出變量的做用域,就沒法再使用這個變量。在程序中,變量必定會被定義在某一對大括號中,該大括號所包含的代碼區即是這個變量的做用域。
1.局部變量
在一個方法或方法內代碼塊中定義的變量稱爲局部變量,局部變量在方法或代碼塊被執行時建立,在方法或代碼塊結束時被銷燬。局部變量在進行取值前必須被初始化,不然會編譯錯誤。
2.實例變量
public class Test { //實例變量:從屬於對象,能夠不初始化值,若是不自行初始化值,則會是默認值 String name; int age; boolean flag; double a; float b; public static void main(String[] args) { Test test = new Test(); System.out.println(test.name);//輸出null System.out.println(test.age);//輸出0 System.out.println(test.flag);//輸出false System.out.println(test.a);//輸出0.0 System.out.println(test.b);//輸出0.0 //布爾值的默認值是false,基本類型的默認值是0或0.0,其他的默認值都是null } }
3.類變量
類變量是隨着類的加載而加載的,和實例變量的區別是類變量不須要實例化
public class Test { static int age = 18;//類變量 public static void main(String[] args) { System.out.println(age);//輸出18,不須要實例化能夠直接輸出 } }
final 常量名 = 值; final double PI = 3.14;
public class Test { static final double PI = 3.14; public static void main(String[] args) { System.out.println(PI);//正常可輸出3.14 final int A = 15000; A = 16000;//會報錯,由於A已經被final定義爲常量,因此不容許改變 } }
//類名 public class GoodMan { //常量名 static final double MAX_VALUE = 30000; //類成員變量 int myAge = 17; public static void main(String[] args) { //局部變量 String myName = "張三"; } //方法名 public void runRun(){} }
Java語言支持以下運算符:
例1:使用算術運算符時要考慮數據類型的轉換,以避免出現精度缺失
public static void main(String[] args) { int a = 10; int b = 20; System.out.println(a+b);//輸出30 System.out.println(a-b);//輸出-10 System.out.println(a*b);//輸出200 System.out.println(a/b);//輸出0,正確得數應該是0.5,因爲int是整數,因此小數點後的數被去掉了 System.out.println(a/(double)b);//輸出0.5,a除以b能夠進行強轉來得出正確得數 }
例2:數據類型的隱式轉換
public static void main(String[] args) { long a = 123456789123L; int b = 123; short c = 10; byte d = 8; System.out.println(a+b+c+d);//輸出是long類型 System.out.println(b+c+d);//輸出是int類型 System.out.println(c+d);//輸出是int類型 //在整數類型中,若是相加數有long類型,則會轉換爲long //在整數類型中,沒有long類型,則全部非int型會轉換爲int類型 }
例:++a和a++的區別(自減同理)
public static void main(String[] args) { int a = 3; System.out.println(a);//輸出3,此時a並未自增 int b = a++;//a++是把a=3賦值給了b再進行自增 int c = ++a;//++a是自增以後再賦值給了c,因爲前面int b = a++的時候,a賦值以後已經自增了,因此等於5 System.out.println(a);//輸出5 System.out.println(b);//輸出3 System.out.println(c);//輸出5 }
例:邏輯運算符的與或非
public static void main(String[] args) { //邏輯運算符: 與&& 或|| 非! boolean a = true; boolean b = false; System.out.println("a && b:"+(a&&b));//輸出爲false,兩個變量爲真,結果才爲true System.out.println("a || b:"+(a||b));//輸出爲true,只要一個變量爲真,結果爲true System.out.println("a && b:"+!(a&&b));//輸出true,若是a&&b的結果爲真,加上非則爲假,反之亦然 }
例:短路運算,&&具備短路功能,即第一個表達式爲false則不會再計算第二表達式
public static void main(String[] args) { //短路運算:&&具備短路功能,即若是第一個表達式爲false則不會再計算第二表達式 int a = 5; boolean b = (a < 4)&&(++a < 4); System.out.println(b);//輸出false System.out.println(a);//輸出5,因而可知第二表達式的++a並無自增 //可是單個&也能夠看成邏輯運算符,但它則不會形成短路運算 int c = 5; boolean d = (c < 4)&(++c < 4); System.out.println(c);//輸出6 }
與&,或|,非~,異或^
位運算符主要針對二進制,逢二進一 A = 0011 1100 B = 0000 1101 ------------------------------------- A&B則是A與B的每位進行比較,能夠把0看成false,1看成true進行比較,兩個數的位都爲1則爲1 其中有一個0則爲0 A&B = 0000 1100 ------------------------------------- A|B則是若是兩位比較都是0則爲0,不然爲1 A|B = 0011 1101 ------------------------------------- A^B = 0011 0001 異或是比較兩個操做數的位中,相同的數則結果爲0,不一樣則結果爲1 ------------------------------------- ~B = 1111 0010 取反則是每位中0則爲1,1則爲0
<<左移 >>右移
public static void main(String[] args) { /* 二進制換算 0 = 0000 0000 1 = 0000 0001 2 = 0000 0010 3 = 0000 0011 4 = 0000 0100 8 = 0000 1000 16 = 0001 0000 */ //左移<<至關於*2,右移>>至關於/2 System.out.println(2<<3);//輸出16,在二進制中則是把1左移3位 }
例:a+=b便是a=a+b,a-=b則是a=a-b,以此類推
public static void main(String[] args) { int a = 10; int b = 20; a+=b;//a+=b至關於a=a+b,-=,*=,/=亦是如此 System.out.println(a);//輸出30 }
例: x ? y : n 的意思是若是x的結果爲true,則結果爲左邊y,不然結果爲右邊n
public static void main(String[] args) { int score = 80; //若是score大於60的結果是true則返回冒號左邊的值,不然返回右邊,賦值給type String type = score > 60 ? "合格" : "不合格"; System.out.println(type);//輸出合格 }