Java語言基礎(chǔ)一(變量海蔽、數(shù)據(jù)類型共屈、運(yùn)算符、流程控制党窜、數(shù)組)

初識java語言

Java SE -- Java Platform, Standard Edition 是 Java 平臺的基礎(chǔ)

  • Java SE 以前稱為 J2SE, 可以編寫桌面應(yīng)用和基于 web 的應(yīng)用程序拗引。

  • JDK > JRE > JVM。

  • Javac.exe -- 編譯器, 主要用于將高級 Java 源代碼翻譯成字節(jié)碼文件幌衣。

  • Java.exe -- 解釋器, 主要用于啟動 JVM 對字節(jié)碼文件進(jìn)行解釋并執(zhí)行矾削。

  • 不同的操作系統(tǒng)提供了 JVM 規(guī)范的實(shí)現(xiàn), 達(dá)成跨平臺的目的壤玫。

  • JVM 解釋 Java 字節(jié)碼文件為具體平臺能夠執(zhí)行的機(jī)器指令。

Java EE -- Java Platform, Enterprise Edition

  • J2EE 是 1999 年到 2003 年 Java EE 的抽象規(guī)范的版本名稱哼凯。

  • Java EE 構(gòu)建在 Java SE 基礎(chǔ)之上, 用于構(gòu)建企業(yè)級應(yīng)用欲间。

  • Java EE 是一個抽象的規(guī)范, 具體實(shí)現(xiàn)稱為應(yīng)用服務(wù)器。

  • EJB 遵循 Java EE 的規(guī)范, 所以 EJB 屬于 Java EE断部。

注釋
 // 單行注釋

 /* 
   多行注釋 
*/


 /** 
    多行或文檔注釋, 支持提取的注釋
 */

變量與數(shù)據(jù)類型

變量

Java 是強(qiáng)類型語言, 變量在使用前必須聲明來指明其數(shù)據(jù)類型猎贴;

  • 變量在使用之前必須初始化;

  • 變量不能重復(fù)聲明 蝴光;

標(biāo)識符命名

  • 由數(shù)字, 字母, 下劃線以及$等等, 不能數(shù)字開頭她渴;

  • 不能使用 Java 語言的關(guān)鍵字 ;

  • 區(qū)分大小寫, 長度沒有限制但不宜過長蔑祟;

  • 支持中文, 但不推薦使用 趁耗;

  • 標(biāo)識符可以給 類/變量/屬性/方法/包 起名字;

數(shù)據(jù)類型

  • 基本類型: byte(1字節(jié)), short(2字節(jié)), int(4字節(jié)), long(8字節(jié)), float(4字節(jié)), double(8字節(jié)), boolean(1字節(jié)), char(2字節(jié))疆虚。

  • 引用類型: 數(shù)組, 類, 接口, 枚舉, 標(biāo)注 苛败。

基本數(shù)據(jù)類型之間的轉(zhuǎn)換

  • 自動類型轉(zhuǎn)換 --從小到大類型的轉(zhuǎn)換:byte->short,char->int->long->float->double。

  • 強(qiáng)制類型轉(zhuǎn)換 -- 從大到小類型的轉(zhuǎn)換:目標(biāo)類型 變量名 = (目標(biāo)類型)源類型變量名径簿。

//比如實(shí)現(xiàn) double類型(3.12) 向 float類型 著拭,即大類型向小類型轉(zhuǎn)換
float a = 3.12F;
float a = (float)3.12;

注:成員變量和局部變量的區(qū)別:
  • 區(qū)別一:定義的位置不同。
    (1)成員變量定義在類中牍帚,整個類全都可以通用儡遮。
    (2)局部變量定義在方法中,只有方法當(dāng)中才可以使用,出了方法就不能再用暗赶。

  • 區(qū)別二:在內(nèi)存中的位置不同鄙币。
    (1)成員變量存儲在堆內(nèi)存的對象中。
    (2)局部變量存儲在棧內(nèi)存的方法中蹂随。

  • 區(qū)別三:聲明周期不同:
    (1)成員變量隨著對象的出現(xiàn)而出現(xiàn)十嘿,隨著對象的消失而消失。
    (2)局部變量是隨著方法的運(yùn)行而出現(xiàn)岳锁,隨著方法的彈棧而消失绩衷。

  • 區(qū)別四:初始化不同:
    (1)成員變量因?yàn)樵诙褍?nèi)存中,所以有默認(rèn)的初始化值激率。
    (2)局部變量沒有默認(rèn)初始化值咳燕,必須初始化后才可以使用。


運(yùn)算符(部分)

算術(shù)運(yùn)算符 : / 和 %

  • / 表示做除法(商)運(yùn)算乒躺,%表示做取余(模)運(yùn)算招盲。

自增減運(yùn)算符 :++ 和 --

  • a++: 先讓 a 的數(shù)值作為整個表達(dá)式的最終結(jié)果, 然后讓 a 自增 。

  • ++a: 先讓 a 自增, 然后讓 a 的新值作為整個表達(dá)式的最終結(jié)果 嘉冒。

邏輯運(yùn)算符 : && 曹货、 || 咆繁、 !

  • && :表示邏輯與運(yùn)算符顶籽,相當(dāng)于"并且"玩般,同真為真,一假為假(短路特性: 對于邏輯與 運(yùn)算符來說礼饱,若第一個表達(dá)式為假則結(jié)果為假壤短,此時跳過第二個表達(dá)式)。

  • || :表示邏輯或運(yùn)算符慨仿,相當(dāng)于"或者"久脯,一真為真,同假為假镰吆。

  • ! : 表示邏輯非運(yùn)算符帘撰,相當(dāng)于"取反",真為假万皿,假為真摧找。

注:邏輯運(yùn)算符的操作數(shù)均為boolean表達(dá)式。

條件/三目運(yùn)算符 :條件表達(dá)式? 表達(dá)式1: 表達(dá)式2

  • 判斷條件表達(dá)式是否成立牢硅,若成立則執(zhí)行表達(dá)式1蹬耘,否則執(zhí)行表達(dá)式2 。

移位運(yùn)算符**

  • << 左移運(yùn)算符减余,用于將數(shù)據(jù)的二進(jìn)制位向左移動综苔,右邊使用0補(bǔ)充

  • >> 右移運(yùn)算符,用于將數(shù)據(jù)的二進(jìn)制位向右移動位岔,左邊使用符號位補(bǔ)充

  • >>> 表示邏輯右移運(yùn)算符如筛,用于將數(shù)據(jù)的二進(jìn)制位向右移動,左邊使用0 補(bǔ)充

位運(yùn)算符**

  • & 表示按位與運(yùn)算符抒抬,按照二進(jìn)制位進(jìn)行與運(yùn)算杨刨,同1為1,一0為0.

  • | 表示按位或運(yùn)算符擦剑,按照二進(jìn)制位進(jìn)行或運(yùn)算妖胀,一1為1,同0為0.

  • ~ 表示按位取反運(yùn)算符惠勒,按照二進(jìn)制位進(jìn)行取反赚抡,1為0,0為1.

  • ^ 表示按位異或運(yùn)算符捉撮,按照二進(jìn)制位進(jìn)行異或運(yùn)算怕品,同為0妇垢,不同為1.


流程控制語句

局部變量 -- 作用范圍是從聲明開始一直到方法體結(jié)束

塊變量 -- 作用訪問是從聲明開始一直到當(dāng)前語句塊結(jié)束

選擇結(jié)構(gòu)語句:

  • if 條件語句

(1)if 條件語句

if(表達(dá)式1){
語句1巾遭;
}
如果表達(dá)式1的判斷為真(正確/true)就執(zhí)語句1

(2)if else 表達(dá)式

if(表達(dá)式1){
語句1肉康;
}else{
語句2;
}
當(dāng)表達(dá)式1的判斷為真(正確/true)就執(zhí)行語句1灼舍,否則吼和,就執(zhí)行語句2(不執(zhí)行1就執(zhí)行2)。

(3)if else if 表達(dá)式

if else if 表達(dá)式
if(表達(dá)式1){
語句1骑素;
}else if(表達(dá)式2){
語句2炫乓;
}else{
語句3;
}
當(dāng)表達(dá)式1的判斷為真(正確/true)就執(zhí)行語句1献丑,否則 末捣,當(dāng)表達(dá)式2的判斷為真就執(zhí)行語句2,否則就執(zhí)行語句3创橄。

注:字符串的判斷
錯誤的字符串判斷相等(字符串的判斷不能使用 "==" )

public class HelloWorld {
    public static void main(String[] args) {
        String name = new String("張三");
        if( name  == "王五" ){
            System.out.println("yes1");
        } else if( name  == "趙四"){
             System.out.println("yes2");
        } else if( name  == "張三"){
             System.out.println("yes3");
        } else{
            System.out.println("yes4");
        }
    }
}

正確的字符串判斷相等(使用 "equal")

public class HelloWorld {
    public static void main(String[] args) {
        String name = new String("張三");
        if( name.equals("王五")){
            System.out.println("yes1");
        } else if( "趙四".equals(name)){
             System.out.println("yes2");
        } else if( name.equals("張三")){
             System.out.println("yes3");
        } else{
            System.out.println("yes4");
        }
    }
}
  • switch 條件語句

switch(表達(dá)式){
case 表達(dá)式常量1:
語句1箩做;
break;
case 表達(dá)式常量2:
語句2妥畏;
break邦邦;
......
case 表達(dá)式常量n:
語句n;
break醉蚁;
[default:語句n+1燃辖;]
}

其中,一個 case 表達(dá)式常量稱為標(biāo)號网棍,代表一個 case 分支的入口黔龟。switch 語句在運(yùn)行時首先計算 switch 圓括號中“表達(dá)式”的值(注意:這個值必須是整型或字符型的);同時后面各個 case 表達(dá)式常量的值的類型要與 switch 圓括號中“表達(dá)式”的值類型一致滥玷。

一個 case 語句代表一個操作捌锭,當(dāng) switch 表達(dá)式的值與哪一個 case 表達(dá)式常量的值匹配時,執(zhí)行其對應(yīng)的語句罗捎,執(zhí)行完成后遇到 break 輸出观谦;default 子句是可選的,當(dāng)表達(dá)式的值與 case 表達(dá)式常量的值都不匹配時桨菜,就運(yùn)行 default 子句并輸出豁状。

注意:

  1. switch 表達(dá)式的值決定選擇哪個 case 分支,如果找不到相應(yīng)的分支倒得,就直接從”default” 開始輸出泻红;當(dāng)程序執(zhí)行一條 case 語句后,如果 case 分支中沒有 break 和 return 語句霞掺,程序會執(zhí)行緊接于其后的語句谊路。

  2. case 是常量表達(dá)式,也就是說 B 的取值只能是常量或者 int菩彬、byte缠劝、short潮梯、char,如果你需要在此處寫一個表達(dá)式或者變量惨恭,那么就要加上單引號秉馏。

循環(huán)結(jié)構(gòu)語句:

  • for循環(huán)語句

適合于明確循環(huán)次數(shù)的場合, 也可以成為死循環(huán)

for (初始化表達(dá)式; 條件表達(dá)式; 修改初始值表達(dá)式)
{
循環(huán)體 ;
}

案例:連續(xù)輸出十句話
不使用for循環(huán)

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("這是第"+1+"句話");   
        System.out.println("這是第"+2+"句話");
        System.out.println("這是第"+3+"句話");
        System.out.println("這是第"+4+"句話");
        System.out.println("這是第"+5+"句話");
        System.out.println("這是第"+6+"句話");
        System.out.println("這是第"+7+"句話");
        System.out.println("這是第"+8+"句話");
        System.out.println("這是第"+9+"句話");
        System.out.println("這是第"+10+"句話");
    }
}

使用for循環(huán)

public class HelloWorld {
    public static void main(String[] args) {
        for(int i = 0; i < 10; i++){
            System.out.println("這是第"+i+"句話");   
        }
    }
}
  • while循環(huán)

while循環(huán)適合于明確循環(huán)條件, 但不明確循環(huán)次數(shù)的場合
基本格式:

while(判斷條件語句) {
循環(huán)體語句;

}

擴(kuò)展格式

初始化語句;
while(判斷條件語句) {
循環(huán)體語句;
控制條件語句;
}

  • do ... while循環(huán)

do while 循環(huán)主要用于至少執(zhí)行一次循環(huán)體的場合

do {
循環(huán)體;
} while (條件表達(dá)式);

注: do while 循環(huán)格式: 最后要加分號

continue 語句, 結(jié)束本次循環(huán)開始下次循環(huán)

break 關(guān)鍵字, 退出當(dāng)前語句塊, 在循環(huán)體中用于退出循環(huán)

數(shù)組

  • 常見異常:

ArrayIndexOutOfBoundsException 數(shù)組下標(biāo)越界異常

ArithmeticException 算術(shù)異常

  • 內(nèi)存結(jié)構(gòu)之棧區(qū):

用于存放程序運(yùn)行過程中所有的局部變量

  • 內(nèi)存結(jié)構(gòu)之堆區(qū):

用于存儲使用 new 關(guān)鍵字創(chuàng)建的數(shù)組和對象

一維數(shù)組

是相同數(shù)據(jù)類型的多個元素的容器,本質(zhì)上是在空間中申請一段連續(xù)的存儲單元脱羡。 在 Java 語言中體現(xiàn)為一種引用數(shù)據(jù)類型

格式:數(shù)據(jù)類型[] 數(shù)組名稱 = new 數(shù)據(jù)類型[數(shù)組的長度]

數(shù)組名的內(nèi)存空間中存放的是數(shù)據(jù)在堆區(qū)中的內(nèi)存地址信息
通過下標(biāo)訪問數(shù)組每一個元素, 從 0 開始 到 array.length - 1

初始化方式:

基本類型數(shù)組初始值:
byte, short, char, int, long 為 0;
float, double 為 0.0; boolean 為 false;

可以在數(shù)組聲明的同時進(jìn)行初始化:

數(shù)據(jù)類型[] 數(shù)組名稱 = new 數(shù)據(jù)類型[]{value0, value1, value2}

數(shù)據(jù)類型[] 數(shù)組名稱 = {value0, value1, value2} // simplified

優(yōu)缺點(diǎn):
  • 可以通過下標(biāo)快速訪問指定位置的元素

  • 要求所有元素的類型相同

  • 要求內(nèi)存空間連續(xù), 并且長度一旦確定就不能修改

  • 增加和刪除效率低

變長數(shù)組: 主要指變量可以作為數(shù)組的長度, 但絕不是數(shù)組的長度可以改變

數(shù)據(jù)工具類:

java.util.Arrays 類可以實(shí)現(xiàn)對數(shù)組中元素的遍歷, 查找, 排序等操作

常用方法:

Arrays.toString(array):輸出數(shù)組中的內(nèi)容

Arrays.fill(array, val):將參數(shù)指定元素賦值給數(shù)組中所有元素

Arrays.equals(array1, array2):判斷兩個數(shù)組元素內(nèi)容和次序是否相同

Arrays.sort(array):對數(shù)組中的元素進(jìn)行從小到大排序

Arrays.binarySearch(array, val):從數(shù)組中查找參數(shù)指定元素所在的位置

二維數(shù)組

本質(zhì)上由多個一維數(shù)組摞在一起的數(shù)組萝究;每個元素都是一維數(shù)組, 而一維數(shù)組中的每個元素才是數(shù)據(jù)內(nèi)容

格式:數(shù)據(jù)類型[][] 數(shù)組名稱 = new 數(shù)據(jù)類型[行數(shù)][列數(shù)];

初始化方式:

數(shù)據(jù)類型[][] 數(shù)組名稱 = {{element0, element1, ...}, ...};

int[][] arr = new int[3][]; // 每一行列數(shù)不一樣

arr[0] = new int[3];

arr[1] = new int[4];

arr[2] = new int[5];

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市锉罐,隨后出現(xiàn)的幾起案子帆竹,更是在濱河造成了極大的恐慌,老刑警劉巖脓规,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件馆揉,死亡現(xiàn)場離奇詭異,居然都是意外死亡抖拦,警方通過查閱死者的電腦和手機(jī)升酣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來态罪,“玉大人噩茄,你說我怎么就攤上這事「淳保” “怎么了绩聘?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長耗啦。 經(jīng)常有香客問我凿菩,道長,這世上最難降的妖魔是什么帜讲? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任衅谷,我火速辦了婚禮,結(jié)果婚禮上似将,老公的妹妹穿的比我還像新娘获黔。我一直安慰自己,他們只是感情好在验,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布玷氏。 她就那樣靜靜地躺著,像睡著了一般腋舌。 火紅的嫁衣襯著肌膚如雪盏触。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天,我揣著相機(jī)與錄音赞辩,去河邊找鬼雌芽。 笑死,一個胖子當(dāng)著我的面吹牛诗宣,可吹牛的內(nèi)容都是我干的膘怕。 我是一名探鬼主播想诅,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼召庞,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了来破?” 一聲冷哼從身側(cè)響起篮灼,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎徘禁,沒想到半個月后诅诱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡送朱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年娘荡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片驶沼。...
    茶點(diǎn)故事閱讀 38,599評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡炮沐,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出回怜,到底是詐尸還是另有隱情大年,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布玉雾,位于F島的核電站翔试,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏复旬。R本人自食惡果不足惜垦缅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望驹碍。 院中可真熱鬧失都,春花似錦、人聲如沸幸冻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽洽损。三九已至庞溜,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背流码。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工又官, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人漫试。 一個月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓六敬,卻偏偏與公主長得像,于是被迫代替她去往敵國和親驾荣。 傳聞我的和親對象是個殘疾皇子外构,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容