Java初學(xué)導(dǎo)入
導(dǎo)言:
? java作為一門面向?qū)ο蟮恼Z言,雖然語法相對簡單,沒有C中的指針等繁瑣概念,但因為庫多,初學(xué)者可能對類與對象等概念覺得比較陌生,本文將以介紹Java的語言為主,附帶簡單介紹一些面向?qū)ο蟮母拍詈推渌恍┕δ堋?/p>
Java概念
Java——Sun公司于1995年5月23日推出
Java特點:簡單性、面向?qū)ο蟆踩?、平臺獨立(java源程序運行于JVM中,執(zhí)行字節(jié)碼文件)
test.java——>javac——>test.class——>java——>字節(jié)碼
語言基礎(chǔ)
標(biāo)志符與關(guān)鍵字
- 標(biāo)志符:字母、下劃線、美元符、數(shù)字組成——規(guī)定第一個字符不能是數(shù)字(注:標(biāo)志符也區(qū)分大小寫)
- 關(guān)鍵字:全小寫 不可作為普通標(biāo)志符
數(shù)據(jù)類型
- 基本類型:
整數(shù)類型:長整型(后綴L/l) 短整型 基本int
浮點數(shù)類型:float型(后綴F/f) double型
字符類型:char
布爾類型 - 引用類型:數(shù)組 接口 類
常量
? 符號常量——先申明后使用
final [修飾符] 類型標(biāo)志符 常量名=(直接)常量
變量
以實際設(shè)置變量為例子
int a;double b;char c;
運算符與表達式
運算符
- 算數(shù)運算符:
單目:++、--、-等
雙目:+、-、*、/、%int j=5,x; 情況一 x=j++; //x=5;j=6; 情況二 x=++j; //x=6;j=6; - 算數(shù)運算符:> < >= <= == !=
- 邏輯運算符:&& || !
- 位運算:~ & | ^ >> << >>>
- 賦值運算符:= += 等
- 條件運算符: _ ? _ : _
- 括號運算符
表達式
- 優(yōu)先級 :僅僅單目操作、條件運算符、賦值運算符從右到左
- 數(shù)據(jù)類型轉(zhuǎn)換:byte -> short -> int -> long -> float -> double
低類型到高類型:自動 反之則需要強制轉(zhuǎn)換
基本控制結(jié)構(gòu)
順序
選擇
if語句
if() ____ ;
[else _____;]
嵌套if
if() ____ ;
[else if() _____;]
switch語句
switch()
{
case _ : _____; [break;]
```
[default:____;]
}
循環(huán)
while語句
while(){ }
do while
do{
___;
}while();
for語句
for(;;) _;
跳轉(zhuǎn)語句
break; //跳出此循環(huán),并中斷
continue; //跳出此循環(huán),并跳入下一個循環(huán)
方法
聲明:[修飾符] 類型標(biāo)識符 方法名([參數(shù)表]){
聲明部分;
語句部分;}
注意:方法不能嵌套,即不能在方法中再聲明其他方法。
參數(shù)傳遞:傳數(shù)組時,傳遞地址;傳單個數(shù)字時,僅傳值(改變形參時,不改變實參)
遞歸:自身調(diào)用自身結(jié)構(gòu);
數(shù)組
一維數(shù)組:聲明+初始化
1.先聲明再初始化
int[] score;
score=new int[10];
2.聲明同時初始化
int[] score=new int[10];
3.賦初值類型
int[] score={1,2,10};
多維數(shù)組:
同一維數(shù)組
int[][] score;
score=new int[][];
另一種方法
int[][] score=new int[3][4];
求數(shù)組的列數(shù)/行數(shù)
求行數(shù):數(shù)組名.length
求列數(shù):數(shù)組名[行數(shù)].length
非矩陣化數(shù)組:允許各個行列元素個數(shù)不一致
例如:
int[][] c=new int[3][];
c[0]=new int[1]; //c[0]有一個元素
c[1]=new int[3]; //c[0]有三個元素
c[3]=new int[5]; //c[0]有五個元素
數(shù)組的基本操作
- 引用
- 復(fù)制(for循環(huán),單值復(fù)制;整體復(fù)制)
- 輸出:for循環(huán)單值輸出
數(shù)組參數(shù)
java中,允許方法的參數(shù)是數(shù)組。
- 形參中,數(shù)組名后的括號不能省略,括號個數(shù)和數(shù)組的維數(shù)相等。形參里可不用給出具體的數(shù)字。
- 實參中,數(shù)組名后不用括號。
- 數(shù)組名做實參時,傳地址,而非值,即形參和實參具有相同的存儲單元。
//例子
class test{
main(){
int c[]={1,2,3};
sum(c);
}
public int sum(int x[]){
函數(shù)體;
}
}
字符串
字符串使用
字符數(shù)組
char[] country={'C','h','i','n','a'};
字符串
String country="China";
聲明
String s;s=new String("China");
String s="China";
字符串操作
求字符串長度
int length(); //s.lenth()==5 數(shù)組的length不用加()
某個下標(biāo)對應(yīng)的字符
char charAt(int index);
//比如:s.charAt(0)=='C',s.charAt(3)=='n'
求某個字符第一次出現(xiàn)的位置
int indexOf(char ch);
//比如:s.indexOf('i')==2
從index位開始,子串str第一次出現(xiàn)的位置;無對應(yīng)字串則return -1。
int indexOf(String str,int index);
截取子串
subString(int index1,int index2);
//例如:s.subString(1,3)=='hin'
比較
equals(object obj);
equalsIgnoreCase(String str);
CompareTo(String str);//對比,返回0則二者相等;返回正值則str大;(|返回值|=|不對等的字符差|)
轉(zhuǎn)換:其他數(shù)據(jù)類型轉(zhuǎn)換成字符串
String.valueOf(123)=>"123"
字符串=>其他數(shù)據(jù)類型
Boolean.parseBoolean("true")=>true
Integer.paeseInt("123")=>123
類與對象
面向?qū)ο?/h4>
? 類:封裝性、繼承性、多態(tài)性
? 對象:類的實例化
類的聲明
[修飾符] class 類名 [extends 父類名][implements 接口]{ }
class——關(guān)鍵字;
extends——繼承;
implements——接口;
修飾符——訪問權(quán)限(public)、final或者abstract
對象的創(chuàng)建和使用
? <u>類名 對象名</u> = <u>new 類名(參數(shù)表)</u>
? 聲明 實例化
使用:對象名.成員變量
? 對象名.方法名(參數(shù)表)
構(gòu)造方法:類中的成員方法名和類名相同
特點:
? 1.無返回值,不能有void
? 2.不可直接調(diào)用,僅在new時調(diào)用
? 3.類中可聲明多個構(gòu)造方法,但各構(gòu)造方法的參數(shù)表不能相同
class Traingle{
int x,y,z;
public Traingle(int i,int j,int k){
x=i;y=j;z=k;
}
}
對象銷毀
finalize()方法,基本格式:
public void finalize(){方法體}
類的封裝
| 訪問權(quán)限 | 本類 | 本類所在的包 | 其它包中的子類 | 其它包中的非子類 |
|---|---|---|---|---|
| public | √ | √ | √ | √ |
| protected | √ | √ | √ | × |
| 缺省 | √ | √ | × | × |
| private | √ | × | × | × |
類成員——有static
1、類成員變量——有static修飾
實例成員變量——無static修飾
2、每個對象的每個成員變量有各自的存儲單元,而系統(tǒng)為類成員變量分配一個存儲單元,所有對象共享一個類成員變量。
3、實例成員僅僅通過對象引用;類成員變量屬于類,可通過類名和對象名訪問。
類成員方法——同上。
類的繼承與多態(tài)機制
類的繼承
? 父類/超類
? 子類
一個子類只能繼承一個超類——單繼承
聲明子類
[修飾符] class 類名 extends 父類名{ }
原則:1、子類繼承父類的成員變量(實例/類)
2、繼承父類出構(gòu)造方法外的成員方法。
3、不能繼承構(gòu)造方法。
4、子類可重申父類成員。
對父類成員的訪問權(quán)限:
子類對父類:private——無訪問權(quán)限
public、protected——√
缺省——同一包中 √ 其他包中 ×
習(xí)慣:
public void setXXX(int a){x =a ;} //給成員變量賦值
public int getXXX(){return xxx ;} //取值
引用父類成員:當(dāng)且僅當(dāng)子類聲明與父類同名的成員才可使用
supper.成員變量名; supper.成員方法名(參數(shù)表)
supper(參數(shù))——子類首句,引用父類的構(gòu)造方法
引用當(dāng)前對象:this
多態(tài)
重載——同類中多個方法有相同方法名,卻有不同參數(shù)表。
覆蓋——子類可重新定義父類方法體。
final類/成員
final類:不允許被繼承
final方法——子類不可重寫
final成員變量
接口與包
接口
定義:一組常量和抽象方法的集合,抽象方法只聲明方法類,而無方法體。
抽象類和方法:
1、聲明抽象方法
[權(quán)限] abstract 類型 方法名(參數(shù));
注意:構(gòu)造方法不能聲明為抽象方法
2、聲明抽象類
[權(quán)限] abstract class 類名{類體}
注意:1、抽象類中可以不含抽象方法,但類中有抽象方法的類必聲明為抽象類。
2、抽象類不能實例化,即不能創(chuàng)建對象。
3.抽象類的子類必須覆蓋每個抽象方法后才可實例化,否則應(yīng)該聲明為抽象類。
接口聲明:
[public] interface 接口 [extends 父接口]{
(常量)成員變量表;
(抽象)成員方法表;
}
成員變量聲明
[public] [static] [final] 類型 成員變量名=常;
成員方法聲明
[public] [abstract] 類型 成員方法名(參數(shù)表);
實現(xiàn)
[public] class 類名 implements 接口名表{ 類體 } //多個接口間用“,”
包
聲明:package 包名(或 包名.子包名) //聲明自身所在的包
使用包中的類:
包名.類名 或 包名.接口名
導(dǎo)入包中的類:
import 包.類名/接口名/*
異常處理
? 計算機直接檢測
? 程序員加入處理異常的功能
處理方式
try...catch...finally 對異常捕獲處理
throws和throw拋出異常
try{可能出現(xiàn)異常的代碼}
catch(異常類名1 異常的對象名1){
異常類名1 對應(yīng)的異常處理代碼
}
[finally{必須執(zhí)行的代碼}]
throw new 異常類名(信息) ——語句
拋出異常選項:
[修飾符] 類型 方法名([參數(shù)表]) throws{
聲明語句
}
自定義異常類
class 自定義異常類名 extends Exception{異常類體}
輸入輸出
java.io包
1、輸入/輸出類庫
以流的方式來處理,流是輸入輸出的數(shù)據(jù)序列
輸入輸出流類:
InputStream:繼承方法:read()、定位指針、close()
OutputStream:write()、flush()、close()
非流類:Reader、Writer
2、標(biāo)準(zhǔn)輸入
System.in——inputStream類的對象
3、標(biāo)準(zhǔn)輸出
System.out——PrintStream類對象
4、標(biāo)準(zhǔn)錯誤
各類錯誤信息輸出到標(biāo)準(zhǔn)錯誤設(shè)備,即顯示器。
多線程
生命周期
新生:new,Thread類及其子類創(chuàng)建線程對象后即處于新生狀態(tài)
↓調(diào)用start()
就緒:等待分配CPU
↓run()
運行:執(zhí)行代碼
↓
阻塞:sleep()等方法讓出CPU,并且暫時中止自己的運行,靜茹阻塞狀態(tài)
↓
死亡:調(diào)用stop()或destroy()
兩種實現(xiàn)多線程的方法
1、用Thread類實現(xiàn)多線程
2、用runnable接口實現(xiàn)多線程
線程等待
join():一個線程結(jié)束,再運行其他線程
線程同步
共享內(nèi)存變量的方法,再前面加synchronized修飾符
例:對sub()加上synchronized同步限制,所以在1線程結(jié)束sub()方法前,2線程無法進入sub()方法。