1. 程式人生 > >Java基礎(適合新學者和架構師閱讀)

Java基礎(適合新學者和架構師閱讀)

近日為了複習CoreJava故自己收集了很多書籍彙編成以下java最核心的內容:參考出處(Java從入門到精通,Java學習手冊(app))備註:我不留對別人毫無用處的博文,所以如果對你有用處請評論。否則,一個月過後沒有超過500我會自行刪除。

Java誕生與發展歷史

Java的出生地:SUN Microsystems Inc.

SUNStanford University Network

Java之父:James Gosling(詹姆斯·高斯林)

1995年釋出Java第一版

Java發展歷史中的幾個重要版本:

l Java 1.2  從該版本開始,把Java分成Java SE

Java MEJava EE三部分。

l Java 5  200493018:00PMJ2SE 1.5釋出,成為Java語言發展史上的又一里程碑。為了表示該版本的重要性,J2SE 1.5更名為Java SE 5.0

l Java 6  Java的各種版本更名,以取消其中的數字"2"J2EE更名為Java EEJ2SE更名為Java SEJ2ME更名為Java ME

20090420日,甲骨文74億美元收購Sun。取得java的版權。

1.2  Java技術體系

Java技術分為三個體系:

l Java SEJ2SE)(Platform Standard Edition

java平臺標準版)開發桌面應用程式

l Java EEJ2EE)(Java 2 Platform,Enterprise Editionjava平臺企業版)開發面向Internet的應用程式

l Java MEJ2ME)(Java 2 Platform Micro Editionjava平臺微型版)開發運行於智慧裝置的程式。

1.3  Java語言的特點

面向物件(OOP

跨平臺

安全健壯

沒有指標操作

垃圾自動回收機制

多執行緒

分散式

1.4  Java程式的執行機制

1.4.1  JVM與跨平臺

Java程式不是直接在作業系統之上執行,而是運行於JVM

java虛擬機器)之上。

針對不同的作業系統開發相應的JVMJava程式運行於不同的JVM之上,因此Java程式可以在不同修改的情況下運行於不同的作業系統之上,從而實現了所謂的跨平臺。

Java原始碼(.java檔案)經編譯器編譯成位元組碼(.class檔案),JVM本質上就是一個負責解釋執行Java位元組碼的程式。

JVM執行Java程式的過程:

載入.class檔案

管理並分配記憶體

執行垃圾收集

1.4.2  JVMJREJDK

JVMJava虛擬機器

JREJava執行時環境(JVM+類庫)  //後面編寫程式碼時在強調類庫

JDKJava開發工具包(JRE+編譯工具)

JDK的全稱:Java  Development  kit

提示:

執行Java程式只需要安裝JRE,開發Java程式則需要安裝JDK

1.5  java開發環境安裝、配置

1.5.1  安裝JDK

1.5.2  配置環境變數

1.5.2.1  PATH

目的:在任意路徑下能夠直接執行相關命令。

原理:在命令列中執行某個命令時,首先在當前路徑下查詢,如果找不到則到PATH配置的各個路徑下查詢。

配置細節:

JAVA_HOMEC:\Program Files\Java\jdk1.6.0

PATH%JAVA_HOME%\bin;    

C:\Program Files\Java\jdk1.6.0\bin;  //bin = binary(二進位制)

環境變數之間使用;分割

1.5.2.2  CLASSPATH

1)目的:在任意路徑下能夠找到要執行的.class檔案。

2CLASSPATH

.;

C:\Program Files\Java\jdk1.6.0\lib\dt.jar;  //lib = library()

C:\Program Files\Java\jdk1.6.0\lib\tools.jar;

從其他目錄下找class檔案

3)注意:Java1.4之後不需要配置上述CLASSPATH環境變數,預設從上述路徑下查詢.class檔案。

1.6  java開發流程

1.6.1  結構化程式設計與面向物件程式設計

結構化程式設計:函式

面向物件程式設計:類

java類的基本結構:變數 +方法

1.6.2  編寫和執行Java程式的三個步驟

編寫原始碼,儲存到原始碼檔案中,例如 HelloWorld.java

編譯原始碼,例如javac  HelloWorld.java

執行位元組碼,例如java  HelloWorld

案例1.1  HelloWorld

1.6.3  原始檔class檔案

Java原始檔的名稱必須是檔案中主類的名稱,副檔名必須為.java。原始檔中可以包含多個類,但是最多隻能有一個類使用public修飾,使用public修飾的類就是主類。在Java中,原始檔還被作為編譯單元,即一個原始檔就是一個編譯單元。

編譯器會為原始碼中的每個類生成一個.class檔案,.class檔案的名稱是類的名稱,副檔名為.class

1.6.4  main()方法

方法名:只能是main,不能是Main等形式。

修飾符:public  static  void 三個缺一不可,多一個不行

引數:

1、引數型別為字串陣列

2、引數名稱只要符合Java中識別符號命名要求即可

3、引數宣告的兩種方式:String[]  args,或  String  args[]

案例1.2  列印輸出

1、列印:個人資訊

姓名:xxx

年齡:xx

性別:x

2、列印一首古詩

1.7  常用命令

1.7.1  Dos命令

命  令

功    能

碟符

轉換到指定分割槽

cd 目錄

進入指定的目錄

dir

檢視當前路徑下的目錄和檔案

cd..

進入上一級目錄,..表示上一級目錄

cls

清屏

1.7.2  Java命令

javac   //後跟檔名稱,需要包含副檔名.java

javac  -d  //指明存放類檔案的位置

java       //後跟類名

javadoc    //生成註釋文件

2單元  識別符號、關鍵字、資料型別

2.1  註釋

註釋的三種形式:單行註釋、多行註釋、文件註釋

文件註釋(documentation comment)以“/**”開始,以“*/”結束。使用文件註釋可以將關於程式的資訊嵌入到程式自身中。

javadoc命令可以文件註釋中的內容提取出來,將其放入到一個HTML檔案中。文件註釋方便了程式的文件化。

2.2  分隔符、程式碼塊

每行功能程式碼以;作為結束符號

空格沒有實際意義,可以利用空格無意義,將程式碼合理縮排,易讀

{}包含的程式碼稱之為程式碼塊, 例如類if(){}、方法{}、類{}等等

2.3  識別符號

2.3.1  識別符號的概念

Java中類、方法和變數的名稱,稱之為識別符號。

2.3.2  識別符號的語法要求

1)以字母、數字、_$組成

2)不能以數字開頭

3)不能使用java的關鍵字和保留字

注意:

1、識別符號的長度沒有限制

2Java是大小寫敏感的,所有識別符號區分大小寫

2.3.2  識別符號的命名規範(駝峰)

Java中的識別符號通常是由多個英文單詞構造,每個單詞除了首字母外其他字母小寫。

2.3.2.1  大駝峰

第一個單詞的首字母大寫。以大寫字母開頭,用於類名、介面名

class  Accoun {}  //類名

class  HelloWorld{}  //類名

interface  AccountBase {}  //介面名

2.3.2.2  小駝峰

第一個單詞的首字母是小寫,其他單詞的首字母大寫。以小寫字母或單詞開頭,用於變數名、方法名

String  studentName;  //變數名

String  getStudentName() {}  //方法名

2.3.2.3  常量命令規範

常量是使用final修飾的儲存單元。(最終的)

全部為大寫字母表示

final  public  int  DAYS_WEEK = 7;

final  public  double  PI = 3.1415926;

2.3.3  識別符號案例

演示識別符號的要求、規範、常量的定義

abc    a+b   my_city   $money    class     _78

myName    _come   my&bb    2name   public

name#1    age-     name3   class5    _$     $a

2.4  Java的關鍵字

2.4.1  Java中的全部關鍵字

目前定義了50個關鍵字

abstract

continue

for

new

switch

assert

default

goto

package

synchronized

boolean

do

if

private

this

break

double

implements

protected

throw

byte

else

import

public

throws

case

enum

instanceof

return

transient

catch

extends

int

short

try

char

final

interface

static

void

class

finally

long

strictfp

volatile

const

float

native

super

while

Java保留了constgoto關鍵字,但是沒有使用。Java還保留了下面這些關鍵字:truefalsenull。這些關鍵字是Java定義的數值。

2.4.2  目前已經接觸到的關鍵字

public  static  void  class

2.5  基本資料型別

2.5.1  資料型別的分類

注意:基本資料型別也可以分成兩大類:數值型、布林型

2.5.2  整型

Java不支援無符號的、只是正值的整數。

2.5.2.1  型別、寬度、範圍

名 稱

寬 度

範    圍

long

64/8

-9 223 372 036 854 775 8089 223 372 036 854 775 807

int

32/4

-2 147 483 6482 147 483 647     大約21

short

16/2

-32 76832 767

byte

8/1

-128127

2.5.2.2  字面值

1)整數字面值預設是int型別

2)將字面值賦給byteshort變數時,如果字面值位於目標型別的範圍之內,就不產生錯誤。

3)大寫或小寫的L明確地標識其型別為long

3)在字面值可以包含下劃線,例如1_000_000_000

4)十進位制、八進位制(0)、十六進位制(0X/0x)、二進位制(0B/0b

案例2.1  整型案例

2.5.3  浮點型

浮點數,也稱為實數(real number),當計算需要小數精度的表示式時使用。

2.5.3.1  型別、寬度、範圍

名稱

寬度()

大致範圍

double(雙精度)

64/8

4.9e-3241.8e+308

float (單精度)

32/4

1.4e-045~3.4e+038

2.5.3.2  浮點數字面值

1)預設為double型別,為了指定float字面值,需要使用字尾Ff

2)科學計數法。例如6.022E23314159E-52e+100

案例2.2  浮點型案例

2.5.4  字元型

2.5.4.1  char型別與字元編碼

1char16位,Java在內部使用16位的整數表示字元(Unicode編碼),char型別的範圍065536//全世界基本的語言符號基本都包含了

2char也可以用作整數型別,可以將整型字面值賦給char型別的變數,可以在char型別上執行算術運算。

326個小寫字母、26個大寫字母、以及10個數字0-9,其編碼是連續的。

2.5.4.2  char型別字面值

1)字元型字面值使用單引號中的字元表示,例如’a’

2)轉義字元

轉義序列

描    述

\ddd

八進位制字元(ddd)

\uxxxx

十六進位制Unicode字元(xxxx)

\’

單引號

\”

雙引號

\\

反斜槓

\r

回車符

\n

新行符(也稱為換行符)

\f

換頁符

\t

製表符

\b

回格符

字串型別:

字串型別是StringString是類,所以是引用型別。字串字面值是使用雙引號包圍起來的內容。

案例2.3  字元型案例

2.5.5  布林型

1boolean型別表示邏輯值,它只能是truefalse

2boolean型別的值與整數01沒有任何關係

案例2.4  boolean型別

2.6  變數與常量

2.6.1  變數的宣告與賦值

說明:變量表示儲存單元,變數名就是儲存單元的名稱,變數初始化之後就可以通過變數名訪問儲存單元。

1、變數宣告    int i;   String str;  //還沒有分配儲存空間

2、初始化(賦初值)  i=10;   str=”abc”;  //初始化之後就分配了儲存空間

3、宣告並賦值  int i = 10;   String str=”abc”;  //宣告的同時進行初始化

注意:變數在使用之前必須先初始化(賦初值)。

2.6.2  常量的宣告與賦值

宣告常量需要使用final關鍵字,如,final double PI = 3.1415926

常量通常在宣告時賦值,並且賦值之後其值不能改變

常量識別符號通常全部為大寫。

案例 2.5  常量案例

2.6.3  例項變數與區域性變數

根據變數宣告的位置,變數可以分為例項變數和區域性變數。

2.6.3.1  例項變數及作用範圍

在類的{}內直接定義的變數,稱為例項變數或成員變數。

作用範圍:整個類中都可以使用

例項變數在建立物件時會自動初始化,並有初始值(預設值)

byte/short/int0

long0L

float0.0f

double0.0

booleanfalse

引用型別:null

2.6.3.2  區域性變數及作用範圍

在方法中或程式碼塊{}中定義的變數,稱之為區域性變數。

作用範圍:直接包含它的{}內有效

區域性變數不會自動初始化,沒有預設值,使用之前必須要初始化。

案例2.6  變數案例

2.7  型別轉換

當將一種型別的變數或字面值賦給另外一種型別的變數時,就會發生型別轉換。

Java中型別轉換分自動型別轉換和強制型別轉換。

總結:對於數值型別,如果目標型別的範圍包含了原型別的範圍,則可以自動轉換,否則就需要強制轉換。

2.7.1  自動型別轉換

型別相容、小型別轉換為大型別

byte-->int   short--->int  int--->long

long--->float   float--->double

String--->Object  (子類--->父類)

2.7.2  強制型別轉換

大型別轉換為小型別

int-->byte  int--->short   long--->int  

float--->long  double--->float

Object--->String

案例2.7  型別轉換案例

2.8  面向物件初步(瞭解)

2.8.1  瞭解類和物件

2.8.2  建立物件

2.9  原始型別和引用型別(瞭解)

原始型別變數的賦值

       int x = 10; int y = x;  (x的值10賦給yxy沒有任何關聯關係,改變值互不影響)

引用型別變數的賦值

       Teacher teacher = new Teacher(John Smith, 30, 10000);

   or

        Teacher teacher1, teacher2;

        teacher1= new Teacher(John Smith, 30, 10000);

        teacher2 = teacher1;

teacher2=teacher1; teacher1的引用的地址值賦給teacher2,這樣兩個引用指向同一個堆記憶體地址,所以任何一個修改屬性,另一個也變化

3單元  運算子&表示式&選擇結構

3.1  運算子

可以將大部分Java運算子劃分為四組:算術運算子、位運算子、關係運算符以及邏輯運算子。

3.1.1  賦值運算子

賦值運算子有一個有趣的特性:它允許建立賦值鏈。例如,分析下面的程式碼段:

int x, y, z;

x = y = z = 100;   // set x, y, and z to 100

3.1.2  算術運算子

算術運算子用於數學表示式,其使用方法與在代數中的使用方法相同。

運算子

結  果

+

加法(也是一元加號)

-

減法(也是一元負號)

*

乘法

/

除法

%

求模

+=

加並賦值

-=

減並賦值

*=

乘並賦值

/=

除並賦值

%=

求模並賦值

++

自增

--

自減

需要注意的地方:

1)當將除法運算子用於整數型別時,其結果不會包含小數部分。

2)求模運算子%,返回除法操作的餘數。它既可以用於浮點數也可以用於整數。可以用於判斷一個整數是否是奇數、偶數、是否是某個數的倍數。

案例3.1  基本算數運算子演示

名稱:BasicMathDemo

演示算術運算,特別注意是整除,演示除0效果

案例3.2  求模運算子案例1

專案名稱:ModulusDemo

演示求模運算子的運算規則和應用:

判斷一個數是奇數還是偶數

判斷一個數是否是5的倍數

案例3.3  求模運算子案例2

名稱:GetDigital

輸入一個三位數,分別獲取個、十、百位上的數字。123

3.1.2.1  算術與賦值複合運算子

int  a  = 1;

a += 2;  //相當於a = a+2;

1)對於所有的二元算術運算,都有相應的複合賦值運算子。

2)複合賦值運算子的效率更高。所以在專業的Java程式中,會經常看到複合賦值運算子。

案例3.4  複合運算子案例:

名稱:OpEqualsDemo

演示覆合運算子的規則。

3.1.2.2  自增與自減

1)自增運算子將其運算元加1。自減運算子將其運算元減1

2)自增與自減分字首形式與字尾形式。++--

字首形式:

int  i = 10;

int  a = ++ i;  //等同於 i++;  int a = i;所以a=11i= 11

字尾形式:

int j = 10;

int  b = j++;  //等同於 int b = j;  j++所以b=10j = 11

案例3.5  自增與自減運算子案例

名稱:IncDecDemo

重點演示字首與字尾形式的區別。

3.1.2.3  表示式

1)表示式的概念:由運算元與運算子組成  j++;  a+b;

2)表示式的求值:表示式是有值的,需要注意表示式值的型別

3)表示式中的型別提升規則:

表示式的型別會自動提升為所有運算元的最大型別。

對於運算元全為非long型別整數的表示式,其型別會自動提升為int

案例3.6  表示式求值案例

名稱:ExpressionDemo

演示型別自動提升

3.1.3  關係運算符

關係運算符也稱為比較運算子

運算子

結  果

==

等於

!=

不等於

>

大於

<

小於

>=

大於等於

<=

小於等於

1)關係運算的結果為boolean型數值。

2)關係運算符最常用於if語句和各種迴圈語句中的控制表示式。

案例3.7  關係運算符應用演示

CompareOperatorDemo

判斷一個字元是否是小寫字母、大寫字母、數字

3.1.4  邏輯運算子

布林邏輯運算子,只能操作boolean型運算元。

運算子

結  果

&&

邏輯與(短路形式)

||

邏輯或(短路形式)

^

邏輯異或

!

邏輯一元非

&

邏輯與

|

邏輯或

布林邏輯運算規則:

運算元

邏輯運算及結果

A

B

A || B

A && B

!A

A ^ B

false

false

false

false

true

false

true

false

true

false

false

true

false

true

true

false

true

true

true

true

true

true

false

false

運算規則說明:

對於||,只要有一個運算元為true,則結果為true

對於&&,只要有一個運算元為false,則結果為false

對於^,兩個運算元不同,則結果為true,否則結果為false

注意:&&||

這兩個運算子是所謂短路形式的邏輯運算子。假如單獨根據左運算元就能確定表示式的結果,那麼就不會計算右運算元的值。

案例3.8  邏輯運算案例

BoolLogicDemo

演示邏輯運算子的運算子規則