Java基礎語法 1.註釋 註釋不會被執行,是用來給寫代碼的人看的。 1.1單行註釋 單行註釋只能註釋一行文字 // 註釋 1.2多行註釋 多行註釋可以註釋多行文字 /* 註釋 註釋 註釋*/ 1.3文檔註釋 JavaDoc:文檔註釋 例 /** * @Description HelloWrold ...
1.註釋
1.1單行註釋
單行註釋只能註釋一行文字
// 註釋
1.2多行註釋
多行註釋可以註釋多行文字
/* 註釋
註釋
註釋
*/
1.3文檔註釋
JavaDoc:文檔註釋
例
/**
* @Description HelloWrold
* @Author liyuelian
*/
2.標識符和關鍵字
Java所有的組成部分都需要名字。類名、變數名以及方法名都被稱為標識符。
2.1關鍵字
1)48個關鍵字:abstract、assert、boolean、break、byte、case、catch、char、class、continue、default、do、double、else、enum、extends、final、finally、float、for、if、implements、import、int、interface、instanceof、long、native、new、package、private、protected、public、return、short、static、strictfp、super、switch、synchronized、this、throw、throws、transient、try、void、volatile、while
2)2個保留字(現在沒用以後可能用到作為關鍵字):goto、const
3)3個特殊直接量:true、false、null
2.2標識符註意點
-
所有的標識符都要以字母(A-Z或者a-z)、美元符($)、或者下劃線(_)開始;
-
首字元之後可以是字母(A-Z或者a-z)、美元符($)、下劃線(_)或者數字的四種字元任何組合;
-
不能使用關鍵字作為變數名或者方法名;
-
標識符大小寫敏感;
-
可以使用中文命名,但是不建議使用;
3.數據類型
強類型語言:(C、C++、Java等)
要求變數的使用嚴格符合規定,所有變數必須先定義之後才能使用。
弱類型語言:(VB、JS等)
可以先使用後定義。
Java的數據類型分為兩大類:
-
1. 基本數據類型
-
2. 引用數據類型
類、介面、數組....
3.1基本數據類型
基本數據類型(primitive Type)包括四大類八小種
1、整數型
byte
short
int
long
2、浮點型
float
double
3、布爾型
boolean
4、字元型
char
字元串String屬於引用類,不是關鍵字
3.2引用數據類型
Reference Type
-
類
-
介面
-
數組
3.2什麼是位元組?
-
位(bit):是電腦內部數據存儲的最小單位,1bit表示一位,如1011 0010是一個八位二進位數。
-
位元組(byte):是電腦中數據處理的基本單位,習慣上用大寫B來表示。
-
1B(byte,位元組)=8b(bit,位)
-
字元:是指電腦中使用的字母、數字、字和符號。
4.數據類型拓展以及面試題講解
4.1整數拓展
進位:二進位(0b)、八進位(0)、十進位、十六進位(0x)
public class Hello {
public static void main(String[] args) {
int i=0b10;//二進位0b
int i1=10;
int i2=010;//八進位0
int i3=0x10;//十六進位0x
System.out.println(i);
System.out.println(i1);
System.out.println(i2);
System.out.println(i3);
}
}
運行結果:
2
10
8
16
Process finished with exit code 0
4.2浮點數拓展
例子1 銀行業務怎麼表示錢
public class Hello {
public static void main(String[] args) {
//浮點數拓展? 銀行怎麼表示 錢
//例子1
float f = 0.1f;//0.1
double d=1.0/10;//0.1
System.out.println(f==d);//false
float d1=292929292828282f;
float d2=d1+1;
System.out.println(d1==d2);//true
}
}
運行結果:
false
true
原因:浮點數的位數是有限的,離散的,但是某些運算的結果可能會有無限位小數。浮點數一般會存在舍入誤差,接近但不等於實際數值。因此最好完全避免使用浮點數進行比較。
那麼銀行業務怎麼表示錢?
答案是使用數學工具類BigDecimal
4.3字元拓展
public class Hello {
public static void main(String[] args) {
char c1='a';
char c2='中';
System.out.println(c1);
System.out.println((int)c1);//強制轉換
System.out.println(c2);
System.out.println((int)c2);//強制轉換
}
}
運行結果:
a
97
中
20013
原因:所有的字元本質還是數字--->涉及到編碼問題 Unicode
unicode 表:
97 代表 a
65 代表 A
Unicode編碼範圍從U0000~UFFFF(0~65535)
轉義字元
轉義字元(Escape character),所有的ASCII碼都可以用“\”加數字(一般是8進位數字)來表示。而C中定義了一些字母前加""來表示常見的那些不能顯示的ASCII字元,如\0,\t,\n等,就稱為轉義字元,因為後面的字元,都不是它本來的ASCII字元意思了。簡單來說就是在一些字元前加 “\” 使它具有其他意義。
4.4布爾值拓展
public class Hello {
public static void main(String[] args) {
boolean flag=true;
if(flag==true){}
if(flag){}//與上一行功能一致,預設為true
}
}
5.類型轉換
八種數據類型占用空間大小:
類型描述 | 基本數據類型 | 占用空間大小[位元組] | 取值範圍 | 預設值 |
---|---|---|---|---|
位元組型 | byte | 1 | -128~127 | 0 |
短整型 | short | 2 | -32768~32768 | 0 |
整型 | int | 4 | -2^31~2^31-1 | 0 |
長整型 | long | 8 | -2^63~2^63-1 | 0 |
單精度浮點型 | float | 4 | 3.4e-45~1.4e38 | 0.0f |
雙精度浮點型 | double | 8 | 4.9e-324~1.8e308 | 0.0d |
字元型 | char | 2 | 0~65535 | '\u0000' |
布爾型 | boolean | 1 | true/false | false |
*關於預設值:成員變數沒有手動賦值,系統會預設賦值,局部變數則不會。八種數字類型的預設值是一切向0看齊。
由於Java是強類型語言,所以進行有些運算時需要用到類型轉換
低 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - > 高
byte < short / char < int < long < float < double
小數優先,因此雖然float的位元組數比long小,但long轉換成float仍是自動類型轉換。
運算中,不同類型的數據先轉化為同一類型,然後進行運算。
5.1強制類型轉換
大容量轉換成小容量,叫做強制類型轉換(高—>低)
例子
public class Hello {
public static void main(String[] args) {
int i=128;
byte b=(byte)128;//記憶體溢出
//強制轉換 (類型)變數名
System.out.println(i);
System.out.println(b);
}
}
運行結果:
128
-128
5.2自動類型轉換
小容量向大容量轉換,稱為自動類型轉換(低—>高)
例子
public class Hello {
public static void main(String[] args) {
int i=128;
double b=i;
//強制轉換 (類型)變數名
System.out.println(i);
System.out.println(b);
}
}
運行結果:
128
128.0
int轉成long類型,由低到高,因此會自動轉換。
註意點:
-
不能對布爾類型進行轉換
-
不能把對象類型轉換為不相干的類型
-
再把高容量轉換成低容量時需要強制轉換
-
轉換時可能存在記憶體溢出或者精度問題
例
public class Hello {
public static void main(String[] args) {
System.out.println((int)23.7);//23,預設向0取整
System.out.println((int)-45.89f);//-45,預設向0取整
}
}
public class Hello {
public static void main(String[] args) {
char c='a';
int d=c+1;
System.out.println(d);//98,自動轉換
System.out.println((char)d);//b,強制轉換
}
}
public class Hello {
public static void main(String[] args) {
//操作比較大的數時,註意溢出問題
//JDK7新特性,數字之間可以用下劃線分割
int money =10_0000_0000;
System.out.println(money);//輸出為1000000000
int years=20;
int total=money*years;
System.out.println(total);//-1474836480,溢出
long total2=money*years;//-1474836480
//在賦值給total2之前,由於money和years都是int型,
// 那麼相乘所得的結果也是int類型,已經出現溢出問題,
// 因此賦值之前的值已經為-1474836480,所以這裡的結果也是-1474836480
long total3=money*(long)years;//先把一個數轉換為long
System.out.println(total3);//結果是 20000000000
}
}