java的編譯和執(zhí)行指令
HelloWorld.java
javac HelloWorld.java? -> 編譯生成 HelloWorld.class(字節(jié)碼文件)
java HelloWorld? ->? 執(zhí)行HelloWorld類
java的命名規(guī)則和規(guī)范
類,方法,屬性秕豫,變量統(tǒng)稱為標(biāo)識(shí)符
標(biāo)識(shí)符起名規(guī)則
首字符可以是字母,_和$
其余字符可以是字母韩脏,_, $和數(shù)字
名字中間不能出現(xiàn)空格
不能使用關(guān)鍵字和保留字作為標(biāo)識(shí)符
保留字:goto const
關(guān)鍵字:public class static void.....
標(biāo)識(shí)符的起名規(guī)范
類名: 首字符大寫,其余每個(gè)單詞首字母都大寫? ? Studnet? StudentClass
方法名:首字符小寫郑什,其余每個(gè)單詞首字母都大寫? ? student? studentClass
屬性名/變量名:規(guī)則與方法名一致
二進(jìn)制十進(jìn)制轉(zhuǎn)換
二進(jìn)制 -> 十進(jìn)制
10010? = 2*2*2*2 + 2 = 18
十進(jìn)制 -> 二進(jìn)制
20? 0
10? 0?
5? ? 1? ? =>? 10100
2? ? 0
1
數(shù)據(jù)類型的取值范圍?
? ? ? 基本類型? 1Byte = 8bit? ? 1bit = 0/1
byte? ? 1Byte? 7bit? ? -2的7次冪? - 2的7次冪-1? -128 - 127
short? ? 2Byte? 15bit? -2的15次冪 - 2的15次冪-1? -32768 - 32767
int? ? ? 4Byte
long? ? 8Byte
float? ? 4Byte
double? 8Byte
char? ? 2Byte
boolean? 1Byte
字符和字符串的區(qū)別
char c = 'A'? ? -- 字符? 使用單引號(hào)? ? 基本數(shù)據(jù)類型
String str = "ABC"? -- 字符串? 使用雙引號(hào)? 引用數(shù)據(jù)類型
haha('A');? ? -- 傳入的是字符
public void haha(int c)
public void haha(String s)
類型轉(zhuǎn)換
基本數(shù)據(jù)類型的轉(zhuǎn)換
自動(dòng)轉(zhuǎn)換
? byte
? short ->? int -> long -> float -> double
? char
? boolean
? 自動(dòng)轉(zhuǎn)換的規(guī)律
(1)小的范圍向大的范圍自動(dòng)轉(zhuǎn)換
(2)整數(shù)向浮點(diǎn)數(shù)自動(dòng)轉(zhuǎn)換
(3)char向int自動(dòng)轉(zhuǎn)換
(4)boolean不參與任何轉(zhuǎn)換
強(qiáng)制轉(zhuǎn)換
? 語法? double d = 3.14;
? int i = (int)d;
? ? 強(qiáng)制轉(zhuǎn)換丟失精度
(1)浮點(diǎn)數(shù)向整數(shù)強(qiáng)制轉(zhuǎn)換搀愧,丟失小數(shù)部分
(2)大的范圍向小的范圍強(qiáng)制轉(zhuǎn)換,丟失bit位的數(shù)據(jù)
int i = 300;? 100101100
byte b = (byte)i;? 00101100
b?? 44
引用數(shù)據(jù)類型的轉(zhuǎn)換
沒有繼承或?qū)崿F(xiàn)關(guān)系的兩個(gè)類之間是不能進(jìn)行類型轉(zhuǎn)換的
繼承或?qū)崿F(xiàn)關(guān)系的兩個(gè)類之間
上溯造型
? ? 子類可以自動(dòng)轉(zhuǎn)換成父類對(duì)象
? ? class Child extends Parent
? ? Parent p = new Parent();
? ? Child c = new Child();
? ? p = c;
下溯造型
? ? 父類對(duì)象向子類對(duì)象進(jìn)行強(qiáng)制轉(zhuǎn)換(該父類對(duì)象必須是該子類對(duì)象先轉(zhuǎn)過去)
? ? class Child extends Parent
? ? Parent p = new Parent();
? ? Child c = new Child();
? ? c = (Child)p;? ? //編譯通過城侧,執(zhí)行時(shí)會(huì)報(bào)出類型轉(zhuǎn)換異常
? ? ? ? ? ? ? ? ? ? ? ? ? ? Parent p = new Child();
? ? Child c = (Child)p;? //沒有問題 OK的
單目運(yùn)算符++
int x = 3;
int y = x++/2;? 3/2 = 1
int x = 3;
int y = ++x/2;? 4/2= 2
int x = 3;
int y = 5;
? y += x++;? y += 3? 8
邏輯運(yùn)算符的短路
&&? ||
int x = 3;
boolean b = (x++ > 3) && (++x < 5);
? ? ? 3 > 3
? ? ? 4
x? 4
&易遣,|不是短路的,通常用于位運(yùn)算
條件分支和循環(huán)
int x = 0;
while(x>0){
? sysout("xxx");
? x++;
}
結(jié)論:x = 0? 控制臺(tái)什么都不輸出
int x = 0;
do{
? sysout("xxx");
}while(x>0);
結(jié)論:x=0? 控制臺(tái)輸出“xxx”
while與do...while的區(qū)別
while有可能循環(huán)體中的代碼一次都不執(zhí)行
do...while至少會(huì)執(zhí)行一次方法體中的內(nèi)容
數(shù)組的聲明和創(chuàng)建
一維
? int[] a = new int[3];
? int[] a = new int[]{1,2,3};
? int[] a = {1,2,3};
? int a[] = {1,2,3};
二維
? int[][] a = new int[3][4];
? int[][] a = new int[3][];
? int[][] a = new int[][4];? 錯(cuò)誤O佑印豆茫!
? int[][] a = new int[3][4];
? a.length ? 3
? a[0].length ? 4
冒泡排序
類的屬性和方法
屬性:代表類的一個(gè)屬性和狀態(tài),聲明在類中的變量
方法:代表類中的一個(gè)行為
類的聲明和實(shí)例化
構(gòu)造方法來完成實(shí)例化
類不寫構(gòu)造方法 -- 系統(tǒng)默認(rèn)提供無參構(gòu)造方法
類寫明了構(gòu)造方法? -- 系統(tǒng)不再提供了
構(gòu)造方法是可以重載的
this的使用
1.解決方法中同名變量/同名參數(shù)與屬性沖突
? private String name;
? public Haha(String name){
this.name = name;
? }
2.在構(gòu)造方法中調(diào)用本類的其他構(gòu)造方法(必須寫在構(gòu)造方法的第一行)
? private String name;
? public Haha(){
this("張三");
? }
? public Haha(String name){
this.name = name;
? }
方法重載
重載:同名屋摇,不同參數(shù)陪踩,返回值類型無關(guān)的方法
繼承?
一般(父類)與特殊(子類)的關(guān)系
ISA原則? XXX是一種YYY 成立? ? XXX就是YYY的子類
super
? 1.調(diào)用繼承來的父類的屬性和方法(可以被this替代)
Class Parent{
public String name;
}
Class Child extends Parent{
public Child(String name){
super.name = name;? ? <=>? this.name = name;
}
}
? 2.調(diào)用父類的構(gòu)造方法
Class Parent{
public String name;
public Parent(String name){
this.name = name;
}
}
Class Child extends Parent{
public Child(String name){
super(name);? // 此處父類沒有無參構(gòu)造方法,子類必須顯式的調(diào)用父類構(gòu)造方法
}
}
抽象類
abstract類? -- 本質(zhì)上抽象類就是當(dāng)父類
抽象類中可以有普通方法娶吞,也可以有抽象方法奕塑。什么方法都沒有也行
抽象方法:沒有方法體,子類來實(shí)現(xiàn)抽象方法柒啤。
接口
interface? 接口
implements 實(shí)現(xiàn)接口
接口中定義的方法都是抽象方法
哪些關(guān)鍵字可以寫在接口文件中倦挂?
public
abstract
final
extends? ? ? 接口可以繼承其他接口? 多繼承
class? ? 可以寫
implements? ? 不能寫!59方援!
類與接口的關(guān)系
類與類之間? 單繼承關(guān)系
類與接口之間? 多實(shí)現(xiàn)關(guān)系
接口與接口之間? 多繼承關(guān)系
接口與類之間? 沒有關(guān)系
接口與抽象類的區(qū)別
抽象類是class? 接口是interface
抽象類中可以有正常的屬性和普通的方法
接口中的方法必須全部是抽象方法? (可以省略public 和 abstract)
抽象類被其他類單繼承
接口可以被其他類多實(shí)現(xiàn),也可以被其他接口多繼承
封裝?
訪問權(quán)限
private 默認(rèn) protected public
private 私有 類自身的內(nèi)部
默認(rèn)? ? 包? 同包下的其他類
protected 保護(hù) 同包下及不同包的子類
public? 公有 任何類都可以訪問
部分權(quán)限
setter和getter方法
只讀權(quán)限:
屬性私有
只設(shè)置get方法
多態(tài)
重寫
子類改寫父類同名同參同返回值類型的方法涛癌,訪問權(quán)限子類>=父類
重載與重寫的區(qū)別
父類引用子類實(shí)例化
實(shí)例題:參照上次周測(cè)分析題
Class Parent{
public void haha(){
sysout("Parent")
}
}
Class Child extends Parent{
public void haha(){
sysout("Child")
}
}
main(){
Parent p = new Child();
p.haha();? ==>? Child
}
static關(guān)鍵字
靜態(tài)關(guān)鍵字:所有對(duì)象共享一個(gè)內(nèi)容
塊?
static{
//塊
}
當(dāng)?shù)谝淮渭虞d該類時(shí)犯戏,static塊中代碼執(zhí)行一次,以后不再執(zhí)行
在整個(gè)程序運(yùn)行周期中拳话,最多只執(zhí)行一次
屬性? 被稱為類屬性
class Haha{
static int i
所有對(duì)象共享該屬性
}
Haha h1 = new Haha();
Haha h2 = new Haha();
h1.i = 5;
h2.i = 10;
h1.i? 10
正常的調(diào)用方式
Haha.i = 5;
Haha.i = 10;
方法? 被稱為類方法
無需創(chuàng)建對(duì)象即可調(diào)用
class Haha{
static int i;
int j;
所有對(duì)象共享該屬性
static void abc(){
sysout(i);
sysout(j);? --編譯失敗
}
}
Haha.abc();
靜態(tài)方法需要注意:
1.靜態(tài)方法可以直接調(diào)用類中的其他靜態(tài)方法和靜態(tài)屬性
2.靜態(tài)方法不能直接調(diào)用類中的其他普通方法和普通屬性
普通方法:
隨意
一般使用static設(shè)置類方法先匪,不用創(chuàng)建對(duì)象就能用。這種方法都是工具性質(zhì)的
一般配合final聲明常量值
final關(guān)鍵字
最終關(guān)鍵
類:? final類不能被其他類繼承
屬性:final屬性和final變量的值設(shè)定后不能更改
方法:final方法不能被子類重寫
常量的聲明
普通常量
public static final int X = 5;
數(shù)組常量
public static final int[] A = {1,2,3};
數(shù)組本身不能更改
但是數(shù)組中的元素可以重新賦值
單例模式
異常的分類
錯(cuò)誤:硬件問題? ? 硬件損壞弃衍,網(wǎng)絡(luò)掉線...
異常:程序邏輯問題? Exception
運(yùn)行時(shí)異常:編譯不顯示錯(cuò)誤呀非,執(zhí)行時(shí)才會(huì)發(fā)生? ? RuntimeException
檢查性異常:強(qiáng)制在編譯時(shí)處理異常
異常的處理
throw? 在某行人為拋出一個(gè)異常對(duì)象
throw new Exception();
throws
方法上表示該方法拋出哪些異常需要被使用者處理
public void haha() throws ParseException, IOException{
? ? throw new ParseException();? //檢查性異常
? ? throw new IOException();? //檢查性異常
}
//強(qiáng)制處理
try{
haha();
}catch(ParseException p){
}catch(IOException e){
}
try...catch...finally
try...catch...finally...
try...catch...
try...catch...catch...? 順序? 小catch在大catch
try...finally...
main(){
try{
haha();
sysout("1")
}catch(Exception e){
sysout("2")
}finally{
sysout("3")
}
sysout("4");
}
public void haha(){
int x = 5/3;
}
結(jié)果:134
main(){
try{
haha();
sysout("1")
}catch(Exception e){
sysout("2")
}finally{
sysout("3")
}
sysout("4");
}
public void haha(){
int x = 5/0;
}
結(jié)果: 234
20180108 練習(xí)-下午.txt? 沒有三角形
有一分?jǐn)?shù)序列:2/1,3/2笨鸡,5/3姜钳,8/5,13/8形耗,21/13...求出這個(gè)數(shù)列的前20項(xiàng)之和哥桥。
分子:斐波拉切數(shù)列
分母:前一個(gè)數(shù)的分子
1.Object類: 類的默認(rèn)父類
equals()方法
? ? ? ? ? ? Object的equals方法相等于==? ? ? ? ? ? ==比較的是兩個(gè)對(duì)象的內(nèi)存地址
? ? String的equals方法重寫了Object的equals方法? 比較的是內(nèi)容
String str1 = "abc";
String str2 = "abc";
str1 == str2 ?? true
str1.equals(str2) ?? true
String str3 = new String("abc");
str1 == str3 ? false
toString()方法
2.字符串類
字符串常量? String? ? ? final類:不能被其他類繼承
字符串變量
? ? StringBuffer? ? 線程安全
? ? StringBuilder? 線程不安全
它們?nèi)叩膮^(qū)別
3.日期類
java.util.Date
java.sql.Date
Calendar
三者是如何創(chuàng)建并實(shí)例化的
創(chuàng)建當(dāng)前時(shí)間的Date
創(chuàng)建特定時(shí)間的Date
java.util.Date -> java.sql.Date
字符串與日期之間的類型轉(zhuǎn)換
SimpleDateFormat類? ? yyyy-MM-dd HH:mm:ss
4.Math類
四舍五入操作round(),小數(shù)截取操作ceil(),floor()等等
生成隨機(jī)數(shù)? Math.random()? [0,1)隨機(jī)浮點(diǎn)數(shù)
Random類的用法
5.包裝類
包裝類的作用:某些場(chǎng)合不能使用基本數(shù)據(jù)類型激涤,使用包裝類代替基本數(shù)據(jù)類型
8個(gè)基本數(shù)據(jù)類型包裝類? byte-Byte
int-Integer? ? char-Character
場(chǎng)合:泛型
字符串與基本數(shù)據(jù)類型的轉(zhuǎn)換
int i = Integer.parseInt("35");
double d = Double.parseDouble("3.14");
String s = 35+"";
6.集合
集合的分類
線性集合? Collection接口? ---? List接口
---? ArrayList類
---? LinkedList類
---? Vector類
? ? ---? Set接口
--- HashSet類
--- TreeSet類
鍵值集合? Map接口
-- HashMap類
-- HashTable類
-- TreeMap類
(1)集合的分類有哪些拟糕?(常見)
線性集合和鍵值集合
線性集合有氛圍List和Set
(2)線性集合和鍵值集合的區(qū)別判呕?(常見)
從集合的存儲(chǔ)結(jié)構(gòu)來說明
(3)List與Set的區(qū)別?(常見)
List:有序(序號(hào))可重復(fù)
Set:無序不重復(fù)
(4)List與Map的區(qū)別送滞?(少見)
參照(2)回答侠草,加上List自身的特點(diǎn)
(5)ArrayList與LinkedList的區(qū)別?(重要)
本質(zhì):數(shù)組與鏈表的區(qū)別
(6)ArrayList與Vector的區(qū)別?(少見)
ArrayList是線程不安全
Vector是線程安全
(7)HashMap與HashTable的區(qū)別?(少見)
HashMap是線程不安全
HashTable是線程安全
Iterator迭代器
迭代器在內(nèi)存中的運(yùn)作方式:List和Set都可以通過迭代器進(jìn)行迭代訪問
next()方法
集合的初始化長(zhǎng)度
集合沒有裝滿時(shí)犁嗅,就會(huì)擴(kuò)容(集合的底層實(shí)現(xiàn)边涕,永遠(yuǎn)是沒有裝滿的)
集合的具體應(yīng)用
掌握集合的各個(gè)API方法
7.文件與流
包? java.io包
文件類: File類? 文件自身的屬性,不操作內(nèi)容
getName(); 得到文件名? 字符串截取的方式可以得到文件的擴(kuò)展名
getPath(); 得到文件的完整路徑
文件夾
exists();? 判斷路徑是否存在
mkdirs();? 創(chuàng)建目錄
delete();? 刪除目錄
文件
exists();? 判斷文件是否存在
createNewFile();? 創(chuàng)建文件
delete();? 刪除文件
流類:
流向:輸入 輸出? 針對(duì)的是內(nèi)存
單位:字節(jié) 字符? 文本文檔操作內(nèi)容--字符流? ? 其余都是字節(jié)流
功能:原始 處理? 處理流中修飾的是原始流
具體的API應(yīng)用
序列化? 特殊的處理流? ObjectInputStream和ObjectOutputStream
將對(duì)象序列化至其他介質(zhì)中實(shí)現(xiàn)java.io.Serializable接口
系統(tǒng)中的類大部分都實(shí)現(xiàn)了序列化接口:String褂微,包裝類功蜓,日期類,集合類....
transient關(guān)鍵字:修飾屬性宠蚂,表示該屬性不參與序列化過程
8.多線程
Java中線程的實(shí)現(xiàn)方式式撼?
繼承java.lang.Thread類,并重寫它的run方法
實(shí)現(xiàn)java.lang.Runnable接口? 并實(shí)現(xiàn)它的run方法
Java中的線程啟動(dòng)方式求厕?
繼承java.lang.Thread類
xxx.start();
實(shí)現(xiàn)java.lang.Runnable接口
Thread t = new Thread(xxx);
t.start();
線程的生命周期
參照?qǐng)D片理解
----------------------------------------
sleep與wait的區(qū)別
sleep是線程休眠:不會(huì)釋放CPU的占用權(quán)著隆,占用著CPU睡覺
wait是線程等待: 會(huì)釋放CPU的占用權(quán)
9.Socket套接字
理解套接字就是用于連接兩臺(tái)計(jì)算機(jī)的端口
ServerSocket
Socket
的主要API
10.JDBC
JDBC的步驟
加載驅(qū)動(dòng)
數(shù)據(jù)庫(kù)基本信息:連接字符串,用戶名和密碼
獲取數(shù)據(jù)庫(kù)連接
創(chuàng)建SQL語句
創(chuàng)建預(yù)加載Statement加載SQL
綁定變量
執(zhí)行SQL
查詢:得到結(jié)果集并遍歷
DML:得到影響了數(shù)據(jù)庫(kù)中的行數(shù)
關(guān)閉連接
Statement與PreparedStatement的區(qū)別
Statement加載SQL不安全呀癣,執(zhí)行效率略低
PreparedStatement是預(yù)加載的程序美浦,使用?進(jìn)行參數(shù)綁定避免了SQL注入项栏,在數(shù)據(jù)庫(kù)服務(wù)器提升執(zhí)行效率
JDBC的主要API