java ==>計算機語言
語言
人類語言 一樣
剛剛出生 ==》哭
剛剛會說一個字==》 飯,媽,爸
會說 短點句子==》媽 我吃飯飯
人類語言 ==》正常溝通了
計算機語言
機器語言(打孔機)==》 0 和1
彙編===》簡單的命令 if ?代表什麼
面向過程==》 c,c# 按部就班
面向對象 ==》java (最接近人類自然)
總結: 我們人和電腦對話
a)java(爪哇)的背景
95年 出現的是jdk 1.0,我們現在用 jdk1.7
98年 更名 j2XXX 版本 j2SE(標準版) j2EE(企業版) j2ME(微小)
sun公司 後來被oracle收購了
java之父 詹姆斯-高斯林
b)java的特點
面向對象,擴平臺,簡單、、、、
命令
1)爲什麼配置環境變量 到 bin 夾?
爲了 window系統能找到 .javac .java命令
2)dos命令
進入某個 盤符
盤符:
進入某個文件夾
cd 文件夾
返回上一層文件夾
cd ..
Java的編譯命令
javac 源文件.java ===》.class
Java的運行命令
java 源文件
d)Java的基本知識點
1)標識符(自己起名的地方)
由字母,數字,_,$組成
不能以數字開頭
不能使用關鍵字
class 後面的名 ==》首字母大寫,駝峯標識,語義化
2) 關鍵字
都是小寫字母 , 有2個 保留關鍵字 goto ,const
3)註釋
// 單行註釋
/* */ 多行
/** */ 文檔註釋
註釋意義: 方便自己,和他人看
4) java的數據類型
基本數據類型 和引用類型
基本數據類型(8)
整型
int ,short,byte,long
int 是默認的類型? 4個字節 1個字節佔8位
byte 類型 存值範圍 -128 到 127
long 是 後面加L
浮點型
double,float
默認是double
float 加 f
字符
char
單引號 引起來的 單個字符
轉移字符
ASII碼
布爾
boolean
只有 true 和false
爲什麼學習數據類型?
引用類型 :
String 存儲字符串的
5) 聲明變量 (三要素)
數據類型 變量名 =初始化值;
變量名的規範: 首字母小寫,駝峯,語義化
6)數據類型轉換
大小順序 byte,short,char,int-long-float-double
1) 數據量小的,向大的轉換 成爲 自動轉換
2) 表數範圍 ,大的向小的轉換,需要強制轉換 ==》 小括號裏面寫要轉換的類型
3) byte,short,char,再做運算的時候,自身先轉換成 int
4)混合運算時,結果爲 最大的類型
5)boolean 不參加轉換
7)運算符
a)算術運算符
+,-,*,/,%,++,--
/ 和%的區別
/ 取商的
%取 餘數
++
前綴 ++a ===》 變量 先 +1 ,然後得出結果
後綴 a++ ==》 先把變量值取過來,再加+1
運算結果 都是 a=a+1
b)邏輯運算符
&,&& | ,||,!
& 是 c語言的
&& 是java 新增 效率 高
面試題:& 和&&的區別?
& 無論結果 什麼樣,第二個表達式都執行,計算二進制
&& 如果第一個式子,對整個結果已經構成影響 ,那麼第二個式子不執行
c)關係運算符
> < >= == !=
d)賦值
=
e)連接符
+
f)擴展運算符
+=,-=,/=
a+=b ===> a=a+b
g)三目運算符
boolean 表達式?值1 :值2
8)java的程序設計結構
順序結構 (瀑布流)
分支
單分支
if(boolean 表達式){}
if(){} else {}
注意:if小括號裏面一定是一個 最後的出來true或者false的東西
多分支
if(){}else if(){} else if(){}...else{}
條件:是一個範圍值
switch(){}
條件: 定值 數據類型 ,int,short,byte,char,jdk1.5枚舉 jdk1.7String
循環
for(變量的初始化;條件;自增或者自減){
循環體
}
while
do while
for 是知道循環次數
while 不知道次數
do while ,無論條件是否成立,必須執行一次
注意:循環 必須要有 結束的條件
跳出
break; 跳出 當前(整個)循環
continue; 跳出 當次,然後繼續執行
數組
1)爲什麼學習數組?
相同數據類型的數據 統一管理,然後可以 節省空間,提高效率
2)如何聲明數組
靜態的
數據類型 [] 數組名={數據}
動態的
數據類型 [] 數組名 =new 數據類型[長度];
3)數組的 引用
數組名[下標] 0到 長度 -1
4)數組的長度
數組名.length
5)排序
冒泡 排序 原理
相鄰倆個比較
6)二維數組
數據類型[][] 數組名字 = new 數據類型[長度][]
7)數組屬於 引用類型,如果沒有初始化,有默認的初始化
8)數組的複製
System.arraycopy(原數組,從哪起點,目標數組,粘貼位置,長度);
方法
1)爲什麼學習方法?
可以重複利用,方便管理!
2)方法的格式?
public static 返回值類型 方法名(參數列表){
方法體
}
返回值類型: 基本數據類型,引用類型,void
對應的 return語句 是返回值類型的 具體 值
參數列表: 形參 也就是 數據類型 變量
實參: 實際 給 形參傳入的值
方法重載:
方法名相同,參數不同(數據類型,個數,順序),返回值類型 是否相同不影響重載
爲啥有重載?
是多態的一種體現
傳入什麼 值,執行出什麼樣
方法的格式
public static 返回值類型 方法名(參數列表){
return ;
}
返回值類型: 基本數據類型,引用類型,void
方法重載: 方法名相同,參數列表不同(類型,順序,個數) 返回值類型不影響重載
數組
引用類型, 元素默認值 , 整型 0,浮點 0.0 String null
冒泡 的原理
相鄰的倆個元素比較
switch小括號 裏面放什麼類型?
int,char,byte,short jdk 1.5枚舉 jdk 1.7 String
面向對象
總結一下 類和對象的 概念 ,彼此關係
說出來 3大特徵,每個特徵稍作解釋
總結一下
a)如何創建類
屬性 和功能
屬性 是 變量
變量的分類以及區別:
局部變量: 在方法語句內的變量 ,臨近大括號內有效,如果使用必須賦初值
成員變量 :方法外,類體裏的變量,整個類體內有效,有默認的初始值
功能 是 方法
public 返回值類型 方法名 (參數列表){
return 語句
}
構造:
a)爲什麼?
有些對象 以創建的時候,就有一些屬性了,通過構造 來實現
b) 如何寫構造
構造方法的名字和類名相同,不能有返回值類型
c)使用,作用?
不用程序員手動調用(不用對象名點出來) ,創建對象,初始化對象
面向對象的三大特徵
封裝
屬性 私有化,功能 公開化,然後調用
4個權限 修飾符
可以修飾變量,修飾功能,修飾類
public :整個項目下
private :本類中
protected :不用包中有繼承關係
缺省 : 本包中
包
package 關鍵字 ==》 java 源文件第一條語句是什麼?
包的書寫
所有字母都小寫,用點管理每一層,公司域名到過來
導入包
import 快捷鍵 ctrl+shift+o
java 特殊包 ,常用包
java.lang 包
String Math Object 基本數據類型包裝類 Throwable
util io text sql
this 關鍵字
調用本類不同構造,區分成員變量和局部變量 ,代表當前對象
繼承
關鍵 extends
java 只支持單繼承 ,一個類只有一個父類 , private成員 子類繼承不了
方法重寫(覆蓋)
方法名相同 ,參數列表相同,返回值類型 相同,方法的聲明部分相同,方法的實現不同
一個類型是不是 一個類型 instanceof
繼承中構造原則
子類 構造過程中,先構造父類
用 super 調用父類構造,用this調用本來構造,而且 super和this只能放在第一行
如果一個父類有有參的,沒有無慘的,那麼子類必須也有有參的構造
抽象
把一些方法,或者屬性 ,抽象到一個類裏面,然後,方法的實現由具體子類完成
規則:
方法沒有方法體,爲抽象方法,有抽象方法的類,必須是抽象類,但是抽象類裏 不一定都是抽象方法
抽象類不能實例化,抽象必須被繼承,抽象方法必須重寫,抽象類裏面可以有構造方法,子類調用
多態:
多態必要條件
有繼承,有方法重寫,有父類引用指向子類對象
集合
1個圖
Collection(接口)
|List(接口)
ArrayList
LinkedList
|Set(接口)
HashSet
Map(接口)
|HashMap
1、Collection和 Collections 的區別?
Collections是個java.util下的類,它包含有各種有關集合操作的靜態方法。
Collection是個java.util下的接口,它是各種集合結構的父接口。
2、Collection和 Map 的區別?
Collection中存儲了一組對象,而Map存儲關鍵字/值對
3、List 和 Set 的區別?
List: 1.可以允許重複的對象。
2.可以插入多個null元素。
3.是一個有序容器,保持了每個元素的插入順序,輸出的順序就是插入的順序。
4.常用的實現類有 ArrayList、LinkedList 和 Vector。ArrayList 最爲流行,它提供了使用索引的隨意訪問,而 LinkedList 則對於經常需要從 List 中添加或刪除元素的場合更爲合適。
Set: 1.不允許重複對象
2. 無序容器,你無法保證每個元素的存儲順序,TreeSet通過 Comparator 或者 Comparable 維護了一個排序順序。
3. 只允許一個 null 元素
4.Set 接口最流行的幾個實現類是 HashSet、LinkedHashSet 以及 TreeSet。最流行的是基於 HashMap 實現的 HashSet;TreeSet 還實現了 SortedSet 接口,因此 TreeSet 是一個根據其 compare() 和 compareTo() 的定義進行排序的有序容器。
4、ArrayList 和LinkedList 的區別?
ArrayList 可以提供更快速的訪問,如果經常添加刪除元素的,那麼肯定要選擇LinkedList。
5、List 和Vector的區別?
Vector是線程安全的而ArrayList不是,ArrayList和Vector都採用線性連續存儲空間,當存儲空間不足的時候,ArrayList默認增加爲原來的50%,Vector默認增加爲原來的一倍; Vector可以設置capacityIncrement,而ArrayList不可以,(從字面理解就是capacity容量,Increment增加,容量增長的參數。)
6、HashMap 和 Hashtable 的區別?
1. 存儲結構
HashMap HashTable
數組 + 鏈表/紅黑樹 數組 + 鏈表
2. 擴容方式
oldCap * 2 oldCap * 2 + 1
3. 關於null值
key, value 均可以爲 null key, value 均不可以爲 null
4. 線程安全
線程不安全 線程安全
7、HashSet 和 TreeSet 的區別?
1. 底層存儲的數據結構不同
HashSet底層用的是HashMap哈希表結構存儲,而TreeSet底層用的是TreeMap樹結構存儲
2.存儲時保證數據唯一性依據不同
HashSet是通過複寫hashCode()方法和equals()方法來保證的,而HashSet通過Compareable接口的compareTo()方法來保證的
3.有序性不一樣
HashSet無序,TreeSet有序
jdk1.5新增特性
a)新增for
for(數據類型 變量名:要遍歷的變量名){}
b)可變參數
void m(int ...a){}
注意 :多個參數,可變參數,不能寫第一個
c)泛型
3個通配符
類型 ?===》此時問號是 任何類型
? extends 數據類型 ===》 此時問號 是 後面類型的子類
? super 數據類型 ===》此時問號是 後面類的 父類
d)枚舉
enum 關鍵字 常量
作用 :就是 不需要改變的值,單獨定義成一個類型
構造 必須是private的,而且要放在 常量後面
普通的變量,方法,都放在後面
生成 doc文檔 ===》導出 ==》 javadoc
io 流
File 類
創建文件
創建文件夾
一些方法
判斷是否是文件的
判斷是否存在的
一層一層的查找文件的
分類
按單位 :字節 ,字符
按方向: 輸入,輸出
按功能: 節點(低級) 處理(高級)
4大抽象流
InputStream
OutputStream
Reader
Writer
節點流: 子類 File流
處理流: Buffered流,Data流 Object流 Print流
流操作的步驟
a)先創建文件
b)選擇流
c)讀寫操作
d)關閉流