Java基礎(chǔ)語法
Eclipse IDE 的使用
創(chuàng)建工程
File -> JavaProject -> 寫工程名字(授課天數(shù)命令) --> Finish 工程創(chuàng)建完畢,可以進(jìn)行程序的開發(fā)
src文件夾, 寫類使用的
在src文件夾,鼠標(biāo)右鍵 -> new -> class -> name對話框?qū)懮项惖拿?/p>
Eclipse的項(xiàng)目目錄結(jié)構(gòu)
默認(rèn)的情況下,工程都放在了 workspace (工作空間)
工作空間中的文件夾就是在eclipse中的工程的名字
工程目錄下:
bin : 存儲編譯后的可運(yùn)行文件 class文件 eclipse自動編譯
src : 存儲是是我們編寫的java文件 (源文件)
好處 : 程序是我們寫的,源代碼是否需要保護(hù), 開發(fā)完了,交付使用,直接提供用戶 class文件!
Eclipse的字體調(diào)整
Ctrl 和加號 以及減號 ,調(diào)整字體大小
window -> Rreferences -> General -> App -> color and Fonts -> java -> java Editor Text Font -> edit
Eclipse的窗口設(shè)置
package Explorer 包資源瀏覽器, 管理我們創(chuàng)建的工程,類
Window -> show view -> package Explorer 開啟包資源瀏覽器
Eclipse的界面,混亂 (故意) 恢復(fù)到初始化狀態(tài)
window -> pers -> reset
Eclipse快捷鍵
萬能提示快捷鍵 alt + / 代碼上的自動提示
-
注釋的快捷鍵
單行注釋 Ctrl + / 要注釋哪行,光標(biāo)在這行內(nèi)即可
多行注釋 Ctrl + Shift + / 必須要選中注釋的行
取消多行注釋 Ctrl + Shift + \ 不需要選中哪一行,只要光標(biāo)在注釋內(nèi)即可
數(shù)據(jù)類型
注意 : Java語言是強(qiáng)制類型語言. 任何的數(shù)據(jù),都是進(jìn)行嚴(yán)格分類的
方便管理數(shù)據(jù),Java語言將數(shù)據(jù)分成了兩大類別.
-
基本數(shù)據(jù)類型 (四類八種)
-
整型
-
字節(jié)型 (關(guān)鍵字 byte)
字節(jié)型在內(nèi)存中,占用1個(gè)字節(jié)(8個(gè)二進(jìn)制位)
字節(jié)型的數(shù)據(jù)的取值范圍 -128 ~ 127
-
短整型(關(guān)鍵字 short)
短整型在內(nèi)存中,占用2個(gè)字節(jié)(16個(gè)二進(jìn)制位)
短整型的數(shù)據(jù)的取值范圍 -32768 ~ 32767
-
整型(關(guān)鍵字 int) Java的默認(rèn)類型
整型在內(nèi)存中,占用4個(gè)字節(jié)(32個(gè)二進(jìn)制位)
整型的數(shù)據(jù)的取值范圍 -2147483648~ 2147483647
-
長整型(關(guān)鍵字 long)
長整型在內(nèi)存中,占用8個(gè)字節(jié)(64個(gè)二進(jìn)制位)
長整型的數(shù)據(jù)的取值范圍 -9223372036854775808~ 9223372036854775807
-
-
浮點(diǎn)
-
單精度(關(guān)鍵字 float)
單精度浮點(diǎn)在內(nèi)存中,占用4個(gè)字節(jié)
單精度浮點(diǎn)的數(shù)據(jù)的取值范圍 1.4E-45~ 3.4028235E38
-
雙精度(關(guān)鍵字 double)Java的默認(rèn)類型
雙精度浮點(diǎn)在內(nèi)存中,占用8個(gè)字節(jié)
雙精度浮點(diǎn)的數(shù)據(jù)的取值范圍 4.9E-324~ 1.7976931348623157E308
-
-
字符 (關(guān)鍵字 char)
類型每次只能存儲1個(gè)字符
字符型在內(nèi)存中,占用2個(gè)字節(jié) (和short一致)
-
布爾 (關(guān)鍵字 boolean)
布爾類型只有true和false
內(nèi)存中占1個(gè)字節(jié)
-
-
引用數(shù)據(jù)類型 (5種)
數(shù)組 (英語 Array)
類 (英語 class 也是關(guān)鍵字)
接口 (英語 interface 也是關(guān)鍵字)
枚舉 (英語 enum 也是關(guān)鍵字)
注解 (英語 Annotation)
變量
變量 : 常量是固定不變化, 變量的數(shù)據(jù)是可以隨時(shí)改變的, 變量方便進(jìn)行運(yùn)算
變量的定義三要素 :
明確數(shù)據(jù)類型
變量的名字
變量的值
變量定義的格式 :
數(shù)據(jù)類型 變量名字 = 值
public static void main(String[] args) {
/*
- 定義出所有的基本數(shù)據(jù)類型變量
- 4類8種
- 定義格式:
- 數(shù)據(jù)類型 變量名字 = 值
*/
?
//定義字節(jié)型,關(guān)鍵字 byte
byte b = 100;
System.out.println(b);
?
//定義短整型,關(guān)鍵字 short
short s = 10000;
System.out.println(s);
?
//定義整型,關(guān)鍵字 int 最常用的類型
int i = 999999;
System.out.println(i);
?
//定義長整型,關(guān)鍵字 long
//注意 : Java語言,任何整數(shù)默認(rèn)都是int類型
//將整數(shù)變成long類型, 數(shù)字后面寫字母L (不分大小寫,建議大寫)
long l = 1234567890123L;
System.out.println(l);
?
//定義浮點(diǎn)數(shù)據(jù),單精度 關(guān)鍵字float
//Java中浮點(diǎn)數(shù)據(jù),默認(rèn)是double
//浮點(diǎn)數(shù)變成float類型,數(shù)字后面寫字母F (不分大小寫,建議大寫)
float f = 3.14F;
System.out.println(f);
?
//定義浮點(diǎn)數(shù)據(jù),雙精度 關(guān)鍵字 double
double d = 3.14;
System.out.println(d);
?
//定義字符類型, 關(guān)鍵字char
char c = '去';
System.out.println(c);
?
//定義布爾類型,關(guān)鍵字 boolean
boolean bool = true;
System.out.println(bool);
}
變量定義的注意事項(xiàng)
-
變量定義,但是沒有賦值,不能使用
public static void main(String[] args) {
int i ;
System.out.println(i);
} 可以先定義變量,再賦值
public static void main(String[] args) {
int i ;
i = 1;
System.out.println(i);
}
-
在同一個(gè)大括號內(nèi),變量名不能相同
public static void main(String[] args) {
int i ;
i = 1;
System.out.println(i);
?
int i = 2;
System.out.printl(i);
} 作用范圍,變量只能作用在定義的一對大括號內(nèi)有效,出去大括號無效
變量定義格式補(bǔ)充
先聲明變量,后賦值
public static void main(String[] args) {
int a;
a = 1;
//一次定義多個(gè)變量名字
int b,c,d,e;
//分別進(jìn)行賦值
b=1;
c=2;
d=3;
e=4;
?
//比較惡心
int f = 1, m=2, n,g;
n=1;
g=2;
}
數(shù)據(jù)類型轉(zhuǎn)換 (有點(diǎn)難)
Java語言是強(qiáng)制類型語言,要求在數(shù)據(jù)進(jìn)行運(yùn)算的時(shí)候,必須保證類型的一致性.
如果數(shù)據(jù)在運(yùn)算的時(shí)候,類型不一致,發(fā)生類型轉(zhuǎn)換現(xiàn)象.
所有的基本數(shù)據(jù)類型中,只有布爾類型不參與轉(zhuǎn)換
自動類型轉(zhuǎn)換
-
轉(zhuǎn)換原則 : 數(shù)據(jù)類型取值范圍小的會自動提升為取值范圍大的類型
-
byte -> short -> int -> long -> float -> double
public static void main(String[] args) {
/*- 字節(jié)byte和整型int 求和
- byte取值范圍小的類型,int取值范圍大
- 求和的時(shí)候,發(fā)生類型的轉(zhuǎn)換!!
*/
byte b = 1;
int i = 2;
int j = b + i; // b+1 類型轉(zhuǎn)換 b轉(zhuǎn)成int
System.out.println(j);
}
類型轉(zhuǎn)換自動.jpg
-
* byte和short的計(jì)算,默認(rèn)轉(zhuǎn)成int
public static void main(String[] args) {
//求和計(jì)算
//1 == Java默認(rèn)int
//1.1 == Java默認(rèn)double
//1 自動轉(zhuǎn)換double 補(bǔ): 1.0
double d = 1+1.1; //計(jì)算后的最終的類型結(jié)果是 double
System.out.println(d);
?
d = 1+0.0;
System.out.println(d);
?
/*
* 求和計(jì)算,認(rèn)真思考
*/
byte b = 1;
short s = 1;
//b+s不能運(yùn)算,數(shù)據(jù)類型不同,類型的轉(zhuǎn)換,計(jì)算結(jié)果的數(shù)據(jù)類型int
//Java規(guī)定 : byte short 進(jìn)行運(yùn)算,都會自動轉(zhuǎn)成int!!
int k = b+s;
System.out.println(k);
}
* char類型計(jì)算的時(shí)候,查詢ASCII編碼表,取出整數(shù)進(jìn)行計(jì)算 (轉(zhuǎn)成int類型)
public static void main(String[] args) {
//char 字符類型,內(nèi)存中占用2個(gè)字節(jié)
char c = 'a';
System.out.println(c);
?
//char字符類型,也可以進(jìn)行計(jì)算
//字符char類型計(jì)算的時(shí)候,轉(zhuǎn)成int類型
//會到ASCII編碼表中查詢數(shù)字出來
System.out.println(c+1);// 98
}
![字符編碼表.jpg](https://upload-images.jianshu.io/upload_images/23942007-0b10b3ef9a7f65a0.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
* char類型是否存在取值范圍
在內(nèi)存中,和short占用2個(gè)字節(jié) 0-65535
強(qiáng)制類型轉(zhuǎn)換
強(qiáng)制 : 程序人員手動的參與轉(zhuǎn)換
強(qiáng)制類型轉(zhuǎn)換 : 取值范圍大的類型,轉(zhuǎn)成取值范圍小的類型
盡量少做,出現(xiàn)數(shù)據(jù)精度丟失問題.
-
浮點(diǎn)數(shù),轉(zhuǎn)成整數(shù)
- 1.5 轉(zhuǎn)成整數(shù) 結(jié)果是1,小數(shù)部分直接丟棄
-
轉(zhuǎn)換的公式 :
被轉(zhuǎn)換后的類型 變量名字 = (被轉(zhuǎn)換后的類型)要轉(zhuǎn)換的數(shù)據(jù);
public static void main(String[] args) {
//浮點(diǎn)數(shù)據(jù),轉(zhuǎn)成整數(shù)
double d = 1.5;
//d取值范圍大的類型,轉(zhuǎn)成int類型 (丟失精度)
//被轉(zhuǎn)換后的類型 變量名字 = (被轉(zhuǎn)換后的類型)要轉(zhuǎn)換的數(shù)據(jù);
int i = (int)d;
System.out.println(i);
} -
整數(shù)之間的類型轉(zhuǎn)換
public static void main(String[] args) {
byte b = 1;int i = 2;
/*- b 1個(gè)字節(jié)
- i 4個(gè)字節(jié)
- b+i 的結(jié)果還是4個(gè)字節(jié)
- 4個(gè)字節(jié)的結(jié)果,復(fù)制到1個(gè)字節(jié)的c中
- b + i 的結(jié)果,強(qiáng)制的轉(zhuǎn)成byte類型
- 被轉(zhuǎn)換后的類型 變量名字 = (被轉(zhuǎn)換后的類型)要轉(zhuǎn)換的數(shù)據(jù);
*/
byte c = (byte) (b + i);
System.out.println(c);
short s = 1 ;
/*- s + 1 int類型,和short類不能計(jì)算
- s 提升為int類型,求和后變成int
- 賦值回變量s ,需要類型的強(qiáng)制轉(zhuǎn)換
- s + 1的結(jié)果,強(qiáng)制轉(zhuǎn)換為short
*/
s = (short) (s + 1);
System.out.println(s);
}
public static void main(String[] args) {
/*- 1 是int類型
- int類型, 賦值到byte了呢
- javac 編譯器 : .java文件,編譯為可以執(zhí)行的class文件
- 編譯的時(shí)候,檢測1是否超過byte的范圍
- 沒有超過byte范圍, javac幫你將int類型的1,轉(zhuǎn)成byte類型
*/
byte b = 1;
System.out.println(b);
byte b2 = (byte)300; //超過byte范圍的300,強(qiáng)制轉(zhuǎn)byte類型
System.out.println(b2);}
計(jì)算中,常量是已經(jīng)確定計(jì)算結(jié)果,(固定不變)
-
變量,在計(jì)算中,不確定結(jié)果,運(yùn)行完畢才可知
short s1 = 1;
short s2 = 1;
?
/*- s1 + s2 == > 變成int
/
short s3 = (short) (s1 + s2);
System.out.println(s3);
/ - s4 = 1+1 是正確的
- 變量計(jì)算和常量計(jì)算的區(qū)別
- s1 + s2 是變量, 編譯的時(shí)候javac, 編譯器不確定的值是什么
- 求和的結(jié)果按照int計(jì)算
- 1 + 1是常量,固定不變 javac編譯,可以確定計(jì)算的結(jié)果
- 判斷出結(jié)果沒有超過short范圍,不會報(bào)錯
*/
short s4 = 1 + 1;
System.out.println(s4);
- s1 + s2 == > 變成int
運(yùn)算符
運(yùn)算符在程序中作用是數(shù)據(jù)之間進(jìn)行運(yùn)算.運(yùn)算符分類
算數(shù)運(yùn)算符
-
+ - * / %
- % 取模, 計(jì)算的結(jié)果要余數(shù)
賦值運(yùn)算符
= 符號右邊的數(shù)據(jù),賦值到左邊的變量
-
+= -= *= /= %= 不能分開
public static void main(String[] args) {
int i = 1;
/*- i+1的結(jié)果,再賦值變量i
*/
i = i + 1;
System.out.println(i);
/*
- += 賦值運(yùn)算符
- j+=1; 本質(zhì)上理解為 j = j+1
*/
int j = 1;
j+=1; // 等價(jià)于 j = j + 1
System.out.println(j);
/*
- += 另一個(gè)問題
- s += 2; 等價(jià)于s = s + 2
- += 是一個(gè)符號,運(yùn)算是一次完成 (javac自動的進(jìn)行強(qiáng)制轉(zhuǎn)換)
*/
short s = 1;
s += 2;
System.out.println(s);
}
- i+1的結(jié)果,再賦值變量i
-
++ 和 --
public static void main(String[] args) {
//++ 符號,含義是變量自增1 -- 變量自減1
int i = 1;
i++;
System.out.println(i);
?
/*++或者--符號,可以出現(xiàn)在變量的前面或者是后面
/
++i;
System.out.println(i);
?
/++在前在后的區(qū)別
*/
int m = 1;
//++在后面,后運(yùn)算
//先將m的值,賦值變量n, m自己在增1
int n = m++;
System.out.println(m); //2
System.out.println(n); //1
//++在前面,先運(yùn)算
//m自己先增1, 增1后的結(jié)果,賦值到n
n = ++m;
System.out.println(m);//3
System.out.println(n);//3
}-
++ 和--的結(jié)論:
變量只有自己的時(shí)候 ++ 寫在前還是后沒有區(qū)別,自己都會增1
-
變量和其他變量做運(yùn)算
寫后面,是先將自己的值賦給其他變量,自己在增1
寫前面,先自己增1,增1后賦值另一個(gè)變量
比較運(yùn)算符
比較運(yùn)算符,是數(shù)據(jù)之間做比較的,特點(diǎn):比較運(yùn)算符的執(zhí)行結(jié)果只能是布爾類型
比較運(yùn)算符的運(yùn)算結(jié)果,要么是true,要么是false,不會出現(xiàn)其他的結(jié)果
== 等等于 比較符號兩邊的數(shù)據(jù)是否相等,如果相等,計(jì)算結(jié)果是true
!= 不等于 比較符號兩邊的數(shù)據(jù)是否不相等,如果不等待,結(jié)算結(jié)果是true
>大于號
比較符號左邊的數(shù)是否大于右邊的數(shù),如果大于結(jié)果是true<小于號
結(jié)果略>=大于等于 <=小于等于
結(jié)果略
邏輯運(yùn)算符
邏輯的運(yùn)算符,計(jì)算結(jié)果也是布爾類型,要么是true,要么是false
& 邏輯與 &符號的兩邊 一邊結(jié)果是false,整體運(yùn)算結(jié)果是false,兩邊都是true,結(jié)果是true
| 邏輯或 |符號的兩邊 一邊結(jié)果是true,整體的運(yùn)算結(jié)果是true,兩邊都是false,結(jié)果是false
! 邏輯非 ! 取反 true取反變false, false取反變true
-
&& 雙與 提高運(yùn)算效率,和單符號的計(jì)算結(jié)果無區(qū)別
- 高效處理 : 左邊是false,右邊不計(jì)算
-
|| 雙或 提高運(yùn)算效率,和單符號的計(jì)算結(jié)果無區(qū)別
- 高效處理 : 左邊是true,右邊不計(jì)算
public static void main(String[] args) {
//&符號的兩邊 一邊結(jié)果是false,整體運(yùn)算結(jié)果是false
System.out.println(2==2 & 2==1);
//System.out.println(false & true );
?
//|符號的兩邊 一邊結(jié)果是true,整體的運(yùn)算結(jié)果是true
System.out.println( 1==1 | 2==3);
?
//! 取反 true取反變false, false取反變true
System.out.println( !false );
?
int i = 1;
int j = 1;
System.out.println( i==2 && ++j==2);
System.out.println(j);
?
System.out.println(i==1 || j==3);
}
位運(yùn)算符
位運(yùn)算,數(shù)字的二進(jìn)制位的運(yùn)算
運(yùn)算之前,先將數(shù)字轉(zhuǎn)成二進(jìn)制后,才能計(jì)算
-
& | ^ << >> >>>
計(jì)算過程中,二進(jìn)制0表示false,1表示true
計(jì)算結(jié)果,和邏輯運(yùn)算符一致
^ (異或)相同結(jié)果是false,不相同結(jié)果是true
<<左移動 >>右移動 數(shù)字的二進(jìn)制進(jìn)行位置移動
>>>
無符號右移動
public static void main(String[] args) {
System.out.println( 6 & 7 );
?
System.out.println(6 | 7);
?
// ^異或 計(jì)算結(jié)果,相同為false,不同為true
System.out.println( 6 ^ 7);
?
//2 向右移動1位 相當(dāng)于原數(shù)字/2
System.out.println(2 >> 1);
//2左移動2位 相當(dāng)于原數(shù)字*2
System.out.println( 2 << 2);
?
//無論數(shù)據(jù)的最高位是1還是0,移動后全部補(bǔ)0
System.out.println(-1 >>> 2);
}
三元運(yùn)算符
三元又稱為三目運(yùn)算
-
運(yùn)算符格式 :
布爾表達(dá)式?結(jié)果1:結(jié)果2
public static void main(String[] args) {
//布爾表達(dá)式?結(jié)果1:結(jié)果2
//布爾表達(dá)式 : 怎么寫都可以,運(yùn)算結(jié)果是true,false即可
//三元運(yùn)算符的計(jì)算結(jié)果 : 布爾表達(dá)式結(jié)果是true,執(zhí)行結(jié)果1,否則執(zhí)行結(jié)果2
int i = 2==2?100:200;
System.out.println(i);
?
System.out.println(1==2?"等于":"不等于");
//System.out.println(1==1?5:1.0);
}
字符串?dāng)?shù)據(jù)的+計(jì)算
字符串和+一起計(jì)算, +變成連接作用,失去的求和的含義
計(jì)算的結(jié)果都是字符串類型.
public static void main(String[] args) {
//"5" 是字符串類型 ,5是int類型
//不計(jì)算,遇到字符串, + 變成連接作用
//計(jì)算的結(jié)果的類型,是字符串
System.out.println("5" + 5);
System.out.println(1+2+"3");
System.out.println(true+"1");
}
Scanner 鍵盤輸入作用
在Java基礎(chǔ)階段 SE技術(shù)平臺中,是有意義
Scanner是Java中,已經(jīng)做好的一個(gè)類,拿來使用即可
注意 : 使用已經(jīng)做好的類Scanner,我們自己創(chuàng)建類,類名不能是Scanner
//1: 導(dǎo)入該類所在的包
import java.util.Scanner;
?
public class ScannerDemo {
public static void main(String[] args) {
//2: 創(chuàng)建Scanner類的對象
Scanner sc = new Scanner(System.in);
//3: 創(chuàng)建好的對象,調(diào)用方法,實(shí)現(xiàn)鍵盤的輸入 (整數(shù),字符串)
int i = sc.nextInt();//接收鍵盤輸入,整數(shù)
System.out.println(i+1);
}
}
Sacnner接收字符串類型
public static void main(String[] args) {
//Scanner鍵盤輸入字符串
Scanner sc = new Scanner(System.in);
//接收字符串, Scanner類中方法 next()
//String s = sc.next(); //字符串中有空格,空格后面不接收
//接收字符串,Scanner類中方法 nextLine()
String s = sc.nextLine(); //接收一行
System.out.println(s+123);
}
Scanner反復(fù)接收數(shù)據(jù)的問題
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//輸入int
int i = sc.nextInt(); // 123 回車
System.out.println(i);
//輸入字符串
String s = sc.nextLine();
System.out.println(s);
}
流程控制語句
現(xiàn)在階段,寫的所有程序,都稱為順序解構(gòu).程序只能從上向下依次執(zhí)行.
實(shí)現(xiàn)更加復(fù)雜的功能,使用流程控制語句
判斷語句 if ,選擇語句 switch ,循環(huán)語句 for while do while
if判斷語句
只有一個(gè)關(guān)鍵字 if (如果)
格式 :
if(條件的判斷){
if語句的執(zhí)行體
}
條件的判斷 : 這里的結(jié)果必須是布爾類型
if的語句體 : 如果條件判斷的結(jié)果是true,執(zhí)行該語句體,判斷的結(jié)果是false,什么也不做
- if的語句實(shí)現(xiàn)
public static void main(String[] args) {
int i = 1;
//if的判斷語句
if( i > 0) {
System.out.println("執(zhí)行了大括號里面程序");
System.out.println("if的條件判斷是true");
}
}
if語句注意事項(xiàng)
if語句是可以省略大括號的 : 0基礎(chǔ),新手,大括號一定要寫
如果不寫大括號, if判斷語句只能控制距離他最近的一行程序!!
public static void main(String[] args) {
int i = 1 ;
if( i == 1)
System.out.println("你好");
System.out.println("我好");
}
if語句: (判斷條件) 有一個(gè)寫法,希望你用, 建議在判斷里面,常量寫在變量的前面.
public static void main(String[] args) {
//定義布爾類型的變量
boolean bool = false;
//System.out.println(false == false);
if(false == bool) {
System.out.println("if的判斷條件是true");
}
}
if...else語句
if是如果,else是否則. 如果怎么樣,就怎么樣. else語句是不能單獨(dú)出現(xiàn),只能跟隨if出現(xiàn)
語句格式 :
if(條件判斷){
if語句的執(zhí)行體
}else{
else語句的執(zhí)行體
}
-
執(zhí)行流程 :
程序先執(zhí)行if中的條件判斷語句,如果判斷語句是true,那么就執(zhí)行if的語句體
如果if中的條件判斷結(jié)果是false,那么就會執(zhí)行else的語句體
-
if語句和else語句,永遠(yuǎn)不會同時(shí)執(zhí)行,不會都不執(zhí)行
- if和else每天雞犬相聞,但是老死不相往來
適合于多個(gè)條件的判斷