JAVA學習筆記(一)

1.Java跨平臺的原理:

1)編譯之后會生成與平臺無關(guān)的字節(jié)碼文件
2)得依賴不同平臺的虛擬機(JVM)
JVM是不跨平臺的

編譯工具:javac
啟動JVM工具:Java

JRE(Java Runtime Environment):Java運行環(huán)境,如果要運行Java程序闷板,就需要JRE的支持院塞,JRE里邊包含JVM
JDK(Java Development Kit):Java開發(fā)工具拦止,包含開發(fā)Java的所有工具,如javac和java等萧求,JDK里包含JRE
Java虛擬機(Java Virtual Machine)夸政,簡稱JVM搁拙,它是運行所有Java程序的虛擬計算機,好比是街機游戲的模擬器朋譬。
JVM是Java語言的運行環(huán)境兴垦,也是Java最具吸引力的特性之一。JVM用于讀取并處理編譯過的與平臺無關(guān)的字節(jié)碼(class)文件狡赐,從而實現(xiàn)Java的可移植性枕屉。但是值得注意的是Java虛擬機是不跨平臺的鲤氢,也就是說在Win下得安裝Win版本的JVM卷玉,在Linux下得安裝Linux版本的JVM
JVM是Java程序的解釋和執(zhí)行器

2.Java安裝后各個文件夾的含義

(1)bin:存放了Java的操作工具,比如編譯工具javac,啟動JVM的java等
(2)db:存放了Java測試的數(shù)據(jù)庫derby威恼,企業(yè)不用
(3)include:存儲C++頭文件
(4)jre:Java的運行環(huán)境箫措,里面有JVM
(5)lib:Java運行和依賴的核心庫
(6)src.zip:Java的源代碼

3.安裝jre運行java程序

(1)jre-8u121-macosx-x64.dmg(下載安裝食茎,在系統(tǒng)偏好設置的面板上)
(2)創(chuàng)建一個空文本别渔,命名為.java文件(比如123.java 文件中有一個名為Hello的類惧互,.java是后綴名或者拓展名)
(3)在終端找到文件路徑執(zhí)行javac 123.java喊儡,對文件進行編譯艾猜,編譯成功后此時路徑下會生成一個Hello.class的字節(jié)碼文件
(4)啟動JVM捻悯,并加載Hello.class這份字節(jié)碼今缚,并解釋執(zhí)行(執(zhí)行命令 java Hello)低淡,注意不要帶后綴.class蔗蹋,就會執(zhí)行字節(jié)碼文件中的代碼
(5)每次修改代碼都需要進行編譯

代碼解釋
// Java程序的開始,表示定義一個公共的類餐塘,類的名字是Hello唠倦,編譯后會生成一個和該名字一樣的class文件
public class Hello {
    // 主方法涮较,Java程序的入口狂票,執(zhí)行Java命令后,程序自動執(zhí)行主方法代碼
    public static void main(String[] args) {
        // 功能執(zhí)行代碼慌盯,表示打印一個文本信息“Hello World”亚皂,最后要以分號結(jié)束灭必,表示語句結(jié)束
        System.out.println("Hello World");
    }
}

4.Java編譯和運行機制

源文件(.java) ->編譯-> 字節(jié)碼文件(.class)->輸出-> Hello World
Java語言編譯型語言

5.CLASSPATH(一般不用配這個環(huán)境變量)一般默認在當前目錄下

環(huán)境變量:指在操作系統(tǒng)中用來指定操作系統(tǒng)運行環(huán)境的一些參數(shù)

JAVA_HOME: 指JDK的安裝根目錄禁漓,如D:\OpenSource\jdk1.8.0
PATH: 指Java開發(fā)工具的位置孵睬,如D:\OpenSource\jdk1.8.0\bin
CLASSPATH: 指JVM在運行時去哪一個目錄路徑加載字節(jié)碼文件

如果在當前路徑下希望把字節(jié)碼文件統(tǒng)一到一個文件夾中掰读,可以新建一個文件夾命名為classes 編譯的時候使用命令javac -d classes 123.java 就可以將123.java的編譯文件放在classes的文件夾下,解釋字節(jié)碼文件的命令此時換成java -classpath classes Hello就可以得到程序執(zhí)行的結(jié)果

6.Java基本語法

1)Java語言嚴格區(qū)分大小寫烁试,好比main和Main是完全兩個不同的概念廓潜。
2)一個Java源文件里可以定義多個Java類辩蛋,但其中最多只有一個類被定義成public類。若源文件中包含public類伤为,源文件必須和該public類同名
3)一個源文件中包含N個Java類時绞愚,成功編譯后會生成N份字節(jié)碼文件颖医,即每個類都會生成一份單獨的class文件熔萧,且字節(jié)碼文件名和其對應的類名相同
4)若一個類必須運行,則必須擁有main方法贮缕,因為main方法是程序的入口

編程建議:
一個Java源文件只定義一個類感昼,不同的類使用不同的源文件定義定嗓;
將每個源文件中單獨定義的類定義成public的爹殊;
保持Java源文件的主文件名與源文件中的類名一致梗夸;

7.標識符

在寫代碼的時候為了增強代碼的閱讀性會自定義很多名字,比如類名,方法名,變量名等.這些自定義的名稱,成為標識符
標識符命名規(guī)則:
(1)由字母、數(shù)字号醉、下劃線反症、$組成辛块,但不能以數(shù)字開頭(注:此處的字母可以是中文、日文等铅碍,類名首字母大寫)
(2)大小寫敏感
(3)不能使用Java的關(guān)鍵字和保留字
(4)不用Java API里的類名作為自己的類名

8.變量分類-作用域-使用規(guī)則:

變量的分類:
隨著變量定義在類中的位置的不同,故把變量分為兩類:
(1)成員變量:直接定義在類里的變量,又稱為全局變量或字段.
(2)局部變量:變量除了成員變量以外,其他就是局部變量.根據(jù)定義位置不同有3種表現(xiàn)形式:方法形參,方法內(nèi)變量,代碼塊變量

變量的作用域:
根據(jù)變量的存在范圍,只有在這個范圍內(nèi),程序代碼才能訪問它.當一個變量被定義時,他的作用域就被確定了
作用域是定義開始到定義所在的花括號結(jié)束;

變量的使用規(guī)則:
(1)變量必須先聲明,并且初始化后才能使用;
(2)聲明變量必須有數(shù)據(jù)類型
(3)同一作用域內(nèi)變量名不能重復定義
先聲明賦值后使用,并且可重復使用

//變量分類-作用域-使用規(guī)則
public class VarDemo2{
    //成員變量,字段(不叫屬性)
    static int age=17;
    public static void main(String[] args){
        /*
         變量的分類:
         變量依據(jù)定義的位置的不同,分為兩大類:
         1.成員變量/字段(Field):直接定義在類的{}中的變量(在方法外)
         --報錯:無法從靜態(tài)上下文中引用非靜態(tài)變量

         2.局部變量(定義在方法中的變量)
         變量除了成員變量,就是局部變量.

         3.變量的作用域:可以起作用的領(lǐng)域.
         1.成員變量:在所定義的類中起作用
         2.局部變量:從定義的那個地方開始,到緊跟著結(jié)束的"}"之間
         */

        int age=18; // 局部變量
        System.out.println(age);/*輸出18,當成員變量和局部變量同名時,編譯不會出錯,得到的結(jié)果采取就近原則*/
    }
}

9.表達式(expression):是由數(shù)字润绵、運算符、數(shù)字分組符號(括號)胞谈、變量尘盼、常量等以能求得結(jié)果的有意義排列的組合烦绳。

用運算符號連接的變量/常量可稱為表達式.那么也就是說表達式是由常量卿捎、變量钳榨、運算符沾谜、括號組成能求得之的有意義結(jié)果的語句传睹。
如:
a+b
3.14+a
(x+y)*z+100
表達式中操作數(shù)進行運算得到的最終結(jié)果就是表達式的結(jié)果
表達式的運算順序(大多和數(shù)學一樣,參照后面的運算符操作優(yōu)先級);
a + 110 -->表達式
操作數(shù) 運算符 操作數(shù)

10.在JAVA中數(shù)據(jù)類型整體上分為兩大類:

   1):基本數(shù)據(jù)類型/原生數(shù)據(jù)類型:共8個
        1>:數(shù)值型
            1/:整數(shù)類型: byte short int long;(不同正數(shù)類型在內(nèi)存中占用空間大小是不一樣的,整數(shù)常量默認是int類型)
            2/:小數(shù)類型:float double;
        2>:字符型:char (字符:字母/符號)
        3>:布爾型:boolean,表示對錯:ture false;

   2):引用數(shù)據(jù)類型/對象數(shù)據(jù)類型:
        類 / 接口 / 數(shù)組

11.小數(shù)的默認常量為double類型厌均,若要聲明小數(shù)常量衛(wèi)float類型考传,就在后面加F或f

float表示單精度
double表示雙精度
但是兩者均不能表示精確的小數(shù)瘩蚪,那么在精度要求很高的系統(tǒng)如銀行系統(tǒng)中湖苞,就需要使用BigDecimal類型筋遭,它表示任意精度的數(shù)據(jù)

Java的浮點類型常量有兩種表現(xiàn)形式:
(1)十進制形式:例如:3.14惧眠,168.0籽懦,.618
(2)科學計數(shù)法形式:例如:3.14e2,3.14E2氛魁,1000E-2
科學計數(shù)法表達式返回的結(jié)果是Double類型的

默認情況下暮顺,一個浮點類型的字面量默認是double類型,若要聲明一個常量為float類型呆盖,則需要在常量后加上f或者F拖云,double常量后面的D或者d可省略。注意:Java只有浮點型的變量才可以接受科學計算數(shù)的結(jié)果

12.字符類型:字符应又、字母和符號

char類型:表示16位的無符號整數(shù)或者Unicode字符宙项,Java對字符占用兩個字節(jié),可以表示一個漢字

什么是編碼株扛?
計算機只能表示0和1兩個數(shù)尤筐,于是規(guī)定使用一個數(shù)字去表示一個特定的字符,比如a使用97表示 char前256個字符和ASICC(美國信息交互標準編碼)碼中的字符重復

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

在8大基本數(shù)據(jù)類型(byte-1字節(jié),short-2字節(jié),int-4字節(jié),long-8字節(jié),double,float,char-2字節(jié),boolean),boolean不屬于數(shù)值類型洞就,不參與轉(zhuǎn)換
字節(jié)數(shù) byte < short(=char) < int < long < float < double (一般的byte short char不參與轉(zhuǎn)換 char雖然也是2字節(jié)但是不包含負數(shù)跟short比起來數(shù)量少盆繁,因此short和char不能相互轉(zhuǎn)換)
轉(zhuǎn)換規(guī)則其實就是各自數(shù)據(jù)類型的空間大小,把不同的數(shù)據(jù)類型看成是不同容量的容器
自動類型轉(zhuǎn)換旬蟋,也稱為“隱式類型轉(zhuǎn)換”(從小到大)

強制類型轉(zhuǎn)換(從大到小 顯式類型轉(zhuǎn)換):當把大范圍類型的數(shù)值賦給另一個小范圍變量時油昂,此時系統(tǒng)不能自動完成轉(zhuǎn)換,需要加上強制轉(zhuǎn)換符,但這樣的操作可能造成數(shù)據(jù)精度的降低或溢出冕碟,所以使用時要格外注意

byte b2 = 125; 把一個int類型常量賦值給byte類型變量拦惋,編譯時,發(fā)現(xiàn)125在byte的范圍之內(nèi)安寺,底層就會轉(zhuǎn)換成byte類型的但是如果設置成byte b2 = 128; 則就會報錯了

14.表達式類型的自動提升

當一個算數(shù)表達式中包含多個基本數(shù)據(jù)類型(boolean除外)的值時厕妖,整個算數(shù)表達式的數(shù)據(jù)類型將在數(shù)據(jù)運算時出現(xiàn)類型自動提升,其規(guī)則是:所有的byte,short,char類型自動提升到int類型 整個表達式的最終結(jié)果類型提升到表達式中類型最高的類型

String和任意數(shù)據(jù)使用挑庶,連接起來就是String(字符串)

double d2 = 123 + 1.1F + 99L + 3.14;
System.out.println(d2); // 輸出226.2400061035156

System.out.println('A' + 1); // 輸出66

byte b4 = 25;
// b4 = b4 + 3; // 表達式運算后已經(jīng)提升到int類型了言秸,在賦值給byte類型,編譯會報錯
// 為了避免這種情況 將會用到賦值運算符
b4 += 3;  // 這里就體現(xiàn)出了+=賦值運算符的好處了
System.out.println(b4); // 28

b4 += 3 等價于 b4 = (byte)(b4 + 3)
查看第16點筆記

15.算術(shù)運算符

取模(求余數(shù)):模數(shù)的符號忽略不計迎捺,結(jié)果的正負取決于被模數(shù)
注意:無窮大和NaN都屬于double浮點類型举畸,但是所有的正無窮大都是相等的,所有的負無窮大也是相等的破加,NaN永遠不相等俱恶,也不等于自己

public class ArithmeticOperatorsDemo {
    public static void main(String[] args) {
        // 操作數(shù)字
        System.out.println(10 + 2); // 12
        System.out.println(10 - 2); // 8
        System.out.println(10 * 2); // 20
        System.out.println(10 / 2); // 5
        System.out.println("----------------------");
        // 操作字符
        System.out.println('A' + 'B'); // 131
        // 操作字符串
        System.out.println("AAA" + "BBB"); // AAABBB
        System.out.println("----------------------");

        System.out.println(10 / 3); // 3
        System.out.println(9876 / 1000 * 1000); // 9000
        System.out.println("----------------------");
        // System.out.println(100 / 0);  // 報錯  by zero
        System.out.println(100.0 / 0); // Infinity正無窮大
        double d1 = 100.0 / 0;
        double d2 = 200.0 / 0;
        System.out.println("所有的正無窮大都相等嗎?");
        System.out.println(d1 == d2); // true
        double d3 = -100.0 / 0;
        double d4 = -200.0 / 0;
        System.out.println("所有的負無窮大都相等嗎范舀?");
        System.out.println(d3 == d4); // true
        System.out.println("正無窮大和負無窮大相等嗎合是?");
        System.out.println(d1 == d3); // false

        System.out.println(100 / 0.0); // Infinity正無窮大
        System.out.println(-100 / 0.0); // -Infinity負無窮大
        System.out.println(0.0 / 0.0); // NaN Not a Number 自己都不等于自己
        double d5 = 0.0 / 0.0;
        System.out.println(d5 == d5); // false
        // 取模(求余數(shù)):模數(shù)的符號忽略不計,結(jié)果的正負取決于被模數(shù)
        System.out.println(10 % 3); // 1

        // 自增 ++
        /*
        * ++前置情況
        *   ++a
        *   表示a變量自身先加1锭环,再運算
        * ++后置情況
        *   a++
        *   表示a變量自身先加1聪全,把遞增1之前的原始值拿去做運算
        * */
        // --道理一樣
        System.out.println("---------------");
        int a1 = 5;
        int b1 = ++a1;
        System.out.println("a1 = " + a1 + " b1 = " + b1); // a1 = 6 b1 = 6
        System.out.println("---------------");
        int a2 = 5;
        int b2 = a2++;
        System.out.println("a2 = " + a2 + " b2 = " + b2); // a2 = 6 b2 = 5
    }
}

16.賦值運算符

public class AssigningOperatorsDemo {
    public static void main(String[] args) {
        short a = 10;
        //a = a + 5; // 編譯報錯
        a += 5;
        // a += 5 等價于  a = (short)(a + 5);
        System.out.println(a); // 15
    }
}

17.比較運算符

==, !=, >, <, >=, <=, instanceof(檢查是否是類的對象) "Hello" istanceof String true
比較運算符用于比較兩個常量或者變量之間的關(guān)系,比較運算的結(jié)果都是boolean類型

18.三元運算符

三元運算符表示有三個元素參與的表達式辅辩,又稱為三目運算符难礼,其語義表示為if-else。
語法格式為:X ? Y : Z 其中X為boolean類型表達式玫锋,先計算X的值蛾茉,若X計算結(jié)果為true,則整個三目運算表達式的結(jié)果是Y,否則就是Z撩鹿。三目運算符結(jié)果的類型是由Y和Z決定的

19.邏輯運算符

運算符 運算 范例 結(jié)果
& AND(位與) false & true false
OR(或) false 丨 true true
^ XOR(異或) false ^ true true
! NOT(非) 谦炬!true false
&& AND(短路) false && true false
丨丨 OR(短路) false 丨丨 true true

語法格式為:boolean result = 表達式A 邏輯運算符 表達式B
&:表示并且,當操作數(shù)A和B都為true結(jié)果才為true节沦,否則結(jié)果result是false
&&:和&結(jié)果相同键思,具有短路效果,如果左邊操作數(shù)A是false甫贯,result一定是false吼鳞,且不運行B的運算
|:表示或者,當操作數(shù)A和B都為false結(jié)果才為false叫搁,只要有A或者B為true赔桌,結(jié)果result是true
||:和|結(jié)果相同供炎,具有短路效果,如果左邊操作數(shù)A是true纬乍,result一定是true碱茁,且不運行B的運算
^:判斷A和B是否相同裸卫,不同則為true仿贬,相同則為false
!:取反,!true結(jié)果是false墓贿,!false結(jié)果是true

20.位運算符

運算符 描述
& 按位與
按位或
^ 異或(相同為0茧泪,不同為1)
~ 取反
<< 左移位
>> 右移位
>>> 無符號右移位

&:參與運算的兩個數(shù),若相應位數(shù)的值都為1聋袋,則該位結(jié)果值是1队伟,否則是0.
|:參與運算的兩個數(shù)相應位中只要有一個1,結(jié)果就是1.
^:參與運算的兩個數(shù)相應位相同則結(jié)果為0幽勒,否則為1.
~:表示把兩個二進制位的“1”換成“0”嗜侮,把“0”換成1.
<<:將操作數(shù)的二進制碼整體左移指定位數(shù),左移之后的空位用“0”來補充.

:將操作數(shù)的二進制碼整體右移指定位數(shù)啥容,右移之后的空位用“符號位”來補充:
若是正數(shù)用“0”來補充
若是負數(shù)用“1”來補充(操作負數(shù):取反锈颗,求補)

:將操作數(shù)的二進制碼整體右移指定位數(shù),右移之后的空位用“0”來補充:

二進制數(shù)a 二進制數(shù)b 與(&) 或(丨) 異或(^)
0 0 0 0 0
1 0 0 1 1
0 1 0 1 1
1 1 1 1 0

boolean的true和false咪惠,在底層使用一位的1和0表示

public class BitOperatorsDemo {
    public static void main(String[] args) {
        System.out.println(3 & 5);
        System.out.println(3 | 5);
        System.out.println(3 ^ 5);
        System.out.println(~3);

        System.out.println(2 << 3);
        System.out.println(16 >> 3);
        System.out.println(-16 >> 3);
        
        // 交換兩個數(shù)
        int a = 10;
        int b = 20;
        System.out.println("a = " + a + " b = " + b);
        a = a ^ b;
        b = a ^ b;
        a = a ^ b;
        System.out.println("a = " + a + " b = " + b);
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末击吱,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子遥昧,更是在濱河造成了極大的恐慌覆醇,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件炭臭,死亡現(xiàn)場離奇詭異永脓,居然都是意外死亡,警方通過查閱死者的電腦和手機鞋仍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進店門常摧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人凿试,你說我怎么就攤上這事排宰。” “怎么了那婉?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵板甘,是天一觀的道長。 經(jīng)常有香客問我详炬,道長盐类,這世上最難降的妖魔是什么寞奸? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮在跳,結(jié)果婚禮上枪萄,老公的妹妹穿的比我還像新娘。我一直安慰自己猫妙,他們只是感情好瓷翻,可當我...
    茶點故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著割坠,像睡著了一般齐帚。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上彼哼,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天对妄,我揣著相機與錄音,去河邊找鬼敢朱。 笑死剪菱,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的拴签。 我是一名探鬼主播孝常,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼篓吁!你這毒婦竟也來了茫因?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤杖剪,失蹤者是張志新(化名)和其女友劉穎冻押,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體盛嘿,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡洛巢,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了次兆。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片稿茉。...
    茶點故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖芥炭,靈堂內(nèi)的尸體忽然破棺而出漓库,到底是詐尸還是另有隱情,我是刑警寧澤园蝠,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布渺蒿,位于F島的核電站,受9級特大地震影響彪薛,放射性物質(zhì)發(fā)生泄漏茂装。R本人自食惡果不足惜怠蹂,卻給世界環(huán)境...
    茶點故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望少态。 院中可真熱鬧城侧,春花似錦、人聲如沸彼妻。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽澳骤。三九已至歧强,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間为肮,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工肤京, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留颊艳,地道東北人。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓忘分,卻偏偏與公主長得像棋枕,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子妒峦,可洞房花燭夜當晚...
    茶點故事閱讀 43,612評論 2 350

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