java高級(jí)

3.Object類

所有引用類型的父類沈贝,除了它自己以外

Object類是所有類的父類杠人?? 如果有其他明顯正確的答案,不選它宋下,如果沒有就選它嗡善。

基本數(shù)據(jù)類型 byte short int long float double char boolean

引用數(shù)據(jù)類型 Object

當(dāng)編寫一個(gè)類的時(shí)候,如果沒有寫明繼承哪個(gè)類学歧,這個(gè)類就會(huì)默認(rèn)繼承Object類

在Object類中定義的方法都會(huì)被其他類繼承

重要方法

(了解)hashCode() 方法:返回對(duì)象的hash值

每個(gè)對(duì)象在內(nèi)存中都存在著一個(gè)hashcode作為編碼出現(xiàn)

如果兩個(gè)對(duì)象的hashcode不相等罩引,這兩個(gè)對(duì)象一定不是同一個(gè)對(duì)象

如果兩個(gè)對(duì)象的hashcode相等,這兩個(gè)對(duì)象也不一定是同一個(gè)對(duì)象

x = 0ad12

y = 032aa

z = 0ad12

x != y

y != z

x ? z

equals()方法:比較兩個(gè)對(duì)象是否“相等”

Object o1 = new Object();

Object o2 = new Object();

o1 == o2? ?? ? ? ? false? 引用類型中 == 判斷的是內(nèi)存地址是否一致

o1.equals(o2)? ?? ? false? 相當(dāng)于==

在Object類中 == 和 equals 方法是一回事

======================================================================

String str1 = new String("abc");

String str2 = new String("abc");

str1 == str2 ?? false? 比較的是str1和str2的內(nèi)存地址

toString() 方法:返回對(duì)象的字符串表達(dá)

返回對(duì)象的字符串表達(dá)


1.字符串類(重要)

String? 字符串常量

String str1 = "abc";

String str2 = new String("abc");

== 比較的是字符串的內(nèi)存地址

equals() 比較的是字符串的內(nèi)容? ? 參照?qǐng)D片理解

String str1 = new String();? //空字符串

String str2 = "";? ? //空字符串

String str3 = null;? //空值 null值

空字符串與null值不是一回事

空字符串表達(dá)了一個(gè)沒有任何文字的字符串枝笨,它是一個(gè)對(duì)象袁铐,可以使用String類型屬性和方法

null表示沒有對(duì)象揭蜒,它不能任何屬性和方法

常用方法

int length()

? ? ? ? ? 返回此字符串的長(zhǎng)度。

String str1 = "abc";

String str2 = "";

String str3 = "哈哈";

String str4 = "abc哈哈xyz";

str1.length();? 3

str2.length();? 0

str3.length();? 2

str4.length();? 8

無論英文昭躺,數(shù)字忌锯,漢字。一個(gè)字符就是1個(gè)長(zhǎng)度

String trim()

? ? ? ? ? 返回字符串的副本领炫,忽略前導(dǎo)空白和尾部空白偶垮。

String str = "? ab c? d ";

String str1 = str.trim();? ==>? ab c? d 沒有前后的空格

char charAt(int index)?

返回index位置的字符。

在使用時(shí)index的值不能超過文字的index范圍帝洪,

否則會(huì)報(bào)錯(cuò)java.lang.StringIndexOutOfBoundsException

String str = "abcdef";

char c = str.charAt(0);

boolean equalsIgnoreCase(String anotherString)

? ? ? ? ? 比較兩個(gè)字符串的內(nèi)容似舵,不考慮大小寫。

String str1 = "abc";

String str2 = "ABC";

str1.equalsIgnoreCase(str2);? true

str1.equals(str2);? ? ? ? ? ? false

char[] toCharArray()

? ? ? ? ? 將此字符串轉(zhuǎn)換為一個(gè)新的字符數(shù)組葱峡。

String s = "abcxyz";

char[] c = s.toCharArray();

int indexOf(String str)

? ? ? ? ? 返回指定參數(shù)字符串在此字符串中第一次出現(xiàn)的位置砚哗。

int lastIndexOf(String str)

? ? ? ? ? 返回指定參數(shù)字符串在此字符串中最后一次出現(xiàn)的位置。

String s = "I LIKE GIRL";

int i = s.indexOf("I");? //字母I第一次出現(xiàn)的位置? ? ? ? ? ? ? ? 0

int j = s.lastIndexOf("I"); //字母I最后一次出現(xiàn)的位置? ? ? ? ? 8

int k = s.indexOf("LIKE");? //字符串LIKE第一次出現(xiàn)的位置? ? ? ? 2

int m = s.lastIndexOf("LIKE");? //字符串LIKE最后一次出現(xiàn)的位置 2

int n = s.indexOf("HAHA");? //字符串HAHA第一次出現(xiàn)的位置? ? ? ? -1

boolean isEmpty()

? ? ? ? ? 當(dāng)且僅當(dāng) length()=0 時(shí)返回 true砰奕。 (判斷字符串是否為空字符串)

等同于equals("")

等同于.length() == 0

String replaceAll(String regex, String replacement)

? ? ? ? ? 使用給定的 replacement 替換此字符串所有匹配給定的正則表達(dá)式的子字符串蛛芥。

利用replacement字符串,替換原字符串中所有的regex內(nèi)容

String str = "abchahasdfjsdlkfjkalsdxixiasdklfjlkasdhahah";

String nstr = str.replace("haha", "****"); //使用****替代元字符串中的haha

String[] split(String regex)

? ? ? ? ? 根據(jù)給定正則表達(dá)式的匹配拆分此字符串军援。

根據(jù)參數(shù)來拆分原字符串仅淑,將元字符串變成一個(gè)數(shù)組

String s = "a,dx,s,xy,xaa,f,12,32,b,x";

String[] x = s.split(",");

得到{a,dx,s,xy,xaa,f,12,32,b,x}數(shù)組

String toUpperCase()

? ? ? ? ? 使用默認(rèn)語言環(huán)境的規(guī)則將此 String 中的所有字符都轉(zhuǎn)換為大寫。

String toLowerCase()

? ? ? ? ? 使用默認(rèn)語言環(huán)境的規(guī)則將此 String 中的所有字符都轉(zhuǎn)換為小寫胸哥。

String substring(int beginIndex)

截取字符串? 從begin位置起涯竟,截取到字符串的結(jié)尾

String substring(int beginIndex, int endIndex)

截取字符串? 從begin位置起,截取到end位置空厌,不包括end? [begin,end)

String str = "I LIKE GIRL";

String s1 = str.substring(2);? //從下標(biāo)2位置開始庐船,截取到最后

System.out.println(s1);

String s2 = str.substring(2, 6); //[2,6)

System.out.println(s2);

------------------------------------------------------------

練習(xí):在控制臺(tái)上輸入一個(gè)郵箱地址,判斷郵箱地址是否合法

? ? ? 1.郵箱的首字母不能是@嘲更,最后一個(gè)字符不能是.

? ? ? 2.有且僅有一個(gè)@筐钟,有且僅有一個(gè).

? ? ? 3.@必須在.之前,且兩者之間必須有其他字符

xxx@xx.xxx

StringBuffer? 字符串變量

StringBuilder? 字符串變量

字符串拼接操作時(shí)

? 效率

String? <? StringBuffer < StringBuilder

StringBuffer與StringBuilder字符串拼接

append(xxx);? ? 在字符串變量的結(jié)尾處拼接一個(gè)內(nèi)容

toString();? ? ? 將拼接后的字符串返回成String類型

StringBuffer sb = new StringBuffer();

for(int i = 0; i < 10; i++){

sb.append(i);

}

String str = sb.toString();

System.out.println(str);

面試題與筆試題(重點(diǎn))

String與StringBuffer的區(qū)別赋朦?

? String是字符串常量篓冲,做字符串拼接時(shí)的效率很低

? StringBuffer是字符串變量,做字符串拼接時(shí)效率較高

StringBuffer與StringBuilder的區(qū)別北发?

? StringBuffer的方法是線程安全的,效率略低于StringBuilder

? StringBuilder的方法是線程不安全的喷屋,效率是最高的

? 系統(tǒng)中不存在多線程的情況下琳拨,使用StringBuilder

StringBuffer和StringBuilder主要用在字符串拼接的場(chǎng)合

2.日期時(shí)間類(重要)

java.util.Date類

java.sql.Date類? 它是java.util.Date類的子類,一般用于與數(shù)據(jù)庫中的Date類型進(jìn)行交互

日期與字符串的轉(zhuǎn)換(常用)

SimpleDateFormat類

//練習(xí):

Student類

學(xué)號(hào) sno

姓名 sname

生日 birthday? java.util.Date

在控制臺(tái)上提示用戶依次輸入sno屯曹,sname和birthday狱庇,并將用戶輸入的內(nèi)容存入一個(gè)Student對(duì)象中

重寫Student的toString

輸出的格式? 學(xué)號(hào):1001惊畏,姓名:張三,生日:1999年12月12日

Calendar? 日歷類

提供各種日期和時(shí)間的計(jì)算密任,用于聲明日期對(duì)象

日歷類是一個(gè)抽象類颜启,它的構(gòu)造方法是protected權(quán)限,程序開發(fā)者編寫的類是無法直接調(diào)用該構(gòu)造方法的

//獲得了一個(gè)表示系統(tǒng)當(dāng)前時(shí)間的日歷對(duì)象

Calendar cal = Calendar.getInstance();

Date getTime()

得到日歷類表示時(shí)間對(duì)應(yīng)的一個(gè)java.util.Date對(duì)象

將Calendar轉(zhuǎn)換成表示同一時(shí)間的Date對(duì)象

void setTime(Date date)

設(shè)置日歷類為某個(gè)日期

long getTimeInMillis()

得到時(shí)間的毫秒數(shù)

void setTimeInMillis(long l)

設(shè)置時(shí)間的毫秒數(shù)

int get(int field)? (重要)

根據(jù)field表示的字段浪讳,得到時(shí)間對(duì)應(yīng)位置的值

Calendar cal = Calendar.getInstance();

int year? = cal.get(1);? ? ? ? ? ? ? ? ? ==> 2018

? ? cal.get(Calendar.YEAR)

int month = cal.get(Calendar.MONTH)? ==>? 0

field字段

Calendar.YEAR -- 年

Calendar.MONTH -- 月

Calendar.DAY_OF_MONTH? -- 日

Calendar.DAY_OF_WEEK? -- 星期

Calendar.DAY_OF_YEAR -- 年中的第幾天

Calendar.HOUR

Calendar.HOUR_OF_DAY? 小時(shí)

Calendar.MINUTE? ? 分鐘

Calendar.SECOND? 秒

Calendar.MILLISECOND 毫秒

? ? ? void set(int field, int value) (重要)

為某個(gè)field字段 設(shè)置值

Calendar cal = Calendar.getInstance();

cal.set(Calendar.YEAR, 1998); //設(shè)置cal的年份為1998年

cal.set(Calendar.MONTH, 5); //設(shè)置cal的月份為6月

? ? ? void set(int year, int month, int date)

直接設(shè)置年月日

? ? ? void set(int year, int month, int date, int hourOfDay, int minute)

直接設(shè)置年月日小時(shí)分鐘

? ? ? void set(int year, int month, int date, int hourOfDay, int minute, int second)

直接設(shè)置年月日時(shí)分秒

3.數(shù)學(xué)類

Math

E? 自然對(duì)數(shù)的底數(shù)

PI? 圓周率

abs(double|float|int|long a)? 返回參數(shù)的絕對(duì)值

double d1 = Math.abs(8.0);? 8.0

double d2 = Math.abs(-8.0);? 8.0

cbrt(double a)? 返回參數(shù)的立方根

double d1 = Math.cbrt(8.0);? 2.0

sqrt(double a)? 返回參數(shù)的平方根

double d1 = Math.sqrt(4.0);? 2.0

ceil(double a)? 進(jìn)一法

double d1 = Math.ceil(8.1);? 9

double d2 = Math.ceil(8.9);? 9

floor(double a) 退一法

double d1 = Math.floor(8.1);? 8

double d2 = Math.floor(8.9);? 8

round(double a) 四舍五入

double d1 = Math.round(8.1);? 8

double d2 = Math.round(8.9);? 9

pow(double a, double b)

返回a的b次冪

double d1 = Math.pow(3,3);? 27

double d2 = Math.pow(2,10);? 1024

random()

返回[0,1)區(qū)間的隨機(jī)浮點(diǎn)數(shù)

偽隨機(jī)數(shù):計(jì)算機(jī)生成的隨機(jī)數(shù)都是偽隨機(jī)數(shù)

有規(guī)律可循

Random

專門提供隨機(jī)數(shù)生成的類

int nextInt(int n)?

隨機(jī)生成[0,n)區(qū)間的隨機(jī)整數(shù)

隨機(jī)生成一個(gè)[3,10]區(qū)間的隨機(jī)整數(shù)

[0,8)+3? => [3,10]

隨機(jī)生成一個(gè)[a,b]區(qū)間的隨機(jī)整數(shù)

[0,b-a+1)+a? = > [a,b]

-----------------------------------------------------------------------------

練習(xí): 紙上寫個(gè)4位不重復(fù)數(shù)字(0-9且不能出現(xiàn)重復(fù))

1234? ?

猜: 3574? ? ? 回答:1A1B? ? A表示猜中數(shù)字且位置正確? ? B表示猜中數(shù)字但位置不正確

猜: 9034? ? ? 回答:2A0B

編寫程序:

計(jì)算機(jī)隨機(jī)生成1個(gè)4位不重復(fù)數(shù)字

循環(huán)以下內(nèi)容缰盏,直到用戶猜中,或者用戶打出GG放棄(計(jì)算機(jī)要給出生成的數(shù)字)

控制臺(tái)上提示用戶輸入數(shù)字

計(jì)算機(jī)根據(jù)用戶輸入的數(shù)字? 反饋出回答

4.System類

System

System.out.println();? 在控制臺(tái)上輸出內(nèi)容淹遵,并在結(jié)尾處添加一個(gè)換行

System.out.print();? 在控制臺(tái)上輸出內(nèi)容, 結(jié)尾沒有換行

System.arraycopy();? 數(shù)組拷貝方法

System.currentTimeMillis();? 得到當(dāng)前系統(tǒng)時(shí)間的毫秒數(shù)

System.exit(int status); 關(guān)閉Java虛擬機(jī)口猜,退出Java運(yùn)行程序

0? -- 正常退出

-1 -- 異常退出

System.gc();? 垃圾回收

Properties p = System.getProperties();

獲得系統(tǒng)的一些屬性信息

參照 API 文檔

5.包裝類

包裝類的主要作用是體現(xiàn)基本數(shù)據(jù)類型在引用數(shù)據(jù)類型體系中的一種映射

某些場(chǎng)合只能使用引用數(shù)據(jù)類型(比如:泛型),如果程序邏輯上必須使用基本數(shù)據(jù)類型(比如:整數(shù)int)

這個(gè)時(shí)候我們需要使用int類型的包裝類

byte? ? ? Byte

short? ? ? Short

int ? Integer? ? (常用)

MAX_VALUE? int值的最大值

MIN_VALUE? int值的最小值

static int parseInt(String s)

將字符串s轉(zhuǎn)換為整數(shù)透揣,如果轉(zhuǎn)換失敗济炎,則報(bào)出異常

long? ? ? Long? ? ? (常用)

float? ? ? Float

double? ? Double? ? (常用)

static double parseDouble(String s)

將字符串轉(zhuǎn)換為浮點(diǎn)數(shù)

char ? Character

boolean? ? Boolean

在JDK1.5版本后(含1.5)可以像使用基本數(shù)據(jù)類型一樣,使用包裝類

int i = 5;

Integer i = 5;

標(biāo)準(zhǔn)

? Integer i = new Integer(5);? ? 使用包裝類包裝整數(shù)數(shù)值5

自動(dòng)裝箱(JDK1.5之后引入的概念)

? Integer i = 5;

自動(dòng)拆箱(JDK1.5之后引入的概念)

? int j = 0;

? Integer i = 5;

? j = i;? //自動(dòng)拆箱

類型轉(zhuǎn)換

數(shù)字-字符串(掌握)

? int n = 35;

? String s = n+"";

字符串-數(shù)字(掌握)

? int i = Integer.parseInt("35");

日期-字符串(掌握)

? Date date = new Date();

? SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");

? String str = sdf.format(date);

字符串-日期(掌握)

? SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

? Date birthday = null;

? try {

birthday = sdf.parse(b);

? } catch (ParseException e) {

// TODO Auto-generated catch block

e.printStackTrace();

? }

數(shù)字-日期(不常用)

? long l1 = 1234567

? Date d = new Date();

? ? ? ? ? d.setTime(l1);

日期-數(shù)字(不常用)

? Date d = new Date();

? long l1 = d.getTime();


集合(十分重要) 集合與數(shù)組的比較(為什么選擇集合使用辐真?)數(shù)組的特點(diǎn):數(shù)組中的數(shù)據(jù)须尚,類型必須統(tǒng)一數(shù)組是定長(zhǎng)的,在創(chuàng)建數(shù)組對(duì)象時(shí)要給定長(zhǎng)度侍咱,長(zhǎng)度給定后不能再改耐床。數(shù)組不能擴(kuò)容(數(shù)組裝滿后,不能自動(dòng)擴(kuò)展長(zhǎng)度放坏,不能繼續(xù)添加內(nèi)容)集合的特點(diǎn):集合中的數(shù)據(jù)咙咽,類型不必統(tǒng)一(集合中只能放引用數(shù)據(jù)類型(基本數(shù)據(jù)類型使用包裝類)的數(shù)據(jù)) 一般會(huì)強(qiáng)制集合中的類型統(tǒng)一(泛型),方便集合的管理集合是變長(zhǎng)的淤年,一般集合在初始創(chuàng)建時(shí)不指名長(zhǎng)度钧敞。 集合的長(zhǎng)度是隨著內(nèi)容數(shù)量的變化而變化提供了大量的方法,處理集合內(nèi)容的訪問麸粮,追加溉苛,刪除等基礎(chǔ)操作真實(shí)的商業(yè)化項(xiàng)目中,使用頻率集合 >> 數(shù)組 集合的分類線性集合:Collection接口(重要)List接口:有序(序號(hào))可重復(fù):可以通過下標(biāo)訪問元素弄诲,集合中可以出現(xiàn)重復(fù)的元素ArrayList實(shí)現(xiàn)類: 底層實(shí)現(xiàn)是基于數(shù)組 (日常編程中使用最多的)void add(Object o) 將元素o在集合的結(jié)尾處進(jìn)行添加void add(int index, Object o) 將元素o在index位置進(jìn)行添加Object get(int index) 得到集合中愚战,index位置的元素void set(int index, Object o) 將元素o在index位置上替換原有元素boolean remove(int index) 移除index位置上的元素boolean remove(Object o) 移除集合中元素o(如有重復(fù),只移除第1個(gè))當(dāng)index與o沖突時(shí)齐遵,優(yōu)先移除index位置比如 remove(2) 如果有元素2寂玲,則優(yōu)先移除下標(biāo)2位置boolean contains(Object o) 查找元素o在集合中是否存在boolean isEmpty() 判斷集合是否為空 等同于 size() == 0void clear() 清空集合創(chuàng)建new ArrayList(); 在內(nèi)存中創(chuàng)建了一個(gè)長(zhǎng)度是10的數(shù)組內(nèi)容接近容量警戒時(shí),數(shù)組x2擴(kuò)容LinkedList實(shí)現(xiàn)類 底層實(shí)現(xiàn)基于鏈表擁有ArrayList實(shí)現(xiàn)類中上述方法梗摇,結(jié)果與ArrayList操作基本一致Vector實(shí)現(xiàn)類 底層實(shí)現(xiàn)基于數(shù)組擁有ArrayList實(shí)現(xiàn)類中上述方法拓哟,結(jié)果與ArrayList操作基本一致(重要)數(shù)組與鏈表的區(qū)別數(shù)組在內(nèi)存中是連續(xù)分配的,其查找元素速度快伶授,插入和刪除元素速度慢鏈表在內(nèi)存中是分散存儲(chǔ)的断序,其查找元素速度慢流纹,插入和刪除元素速度快(重要)ArrayList與LinkedList的區(qū)別ArrayList是基于數(shù)組實(shí)現(xiàn)的,LinkedList是基于鏈表實(shí)現(xiàn)的數(shù)組與鏈表的區(qū)別ArrayList與Vector的區(qū)別ArrayList是線程不安全的违诗,效率較高漱凝。Vector是線程安全的,效率較低-----------------------------------------------------------------------練習(xí):創(chuàng)建Student對(duì)象學(xué)號(hào) sno姓名 sname生日 birthday控制臺(tái)上顯示***************1-新增學(xué)生2-刪除學(xué)生3-修改學(xué)生4-顯示所有學(xué)生5-退出***************所有產(chǎn)生的學(xué)生對(duì)象诸迟,放入到List的集合中刪除和修改 根據(jù)學(xué)號(hào)Set接口:無序(序號(hào))不重復(fù):不能通過下標(biāo)訪問元素茸炒,集合中不允許出現(xiàn)重的元素存放順序:不是由程序開發(fā)者決定的,由具體實(shí)現(xiàn)類的算法實(shí)現(xiàn)的基于Hash表來維護(hù)順序HashSet和LinkedHashSet基于二叉樹維護(hù)順序TreeSet迭代器: Iterator 迭代集合中的數(shù)據(jù)亮蒋,尤其是用于Set集合和Map集合中不要求順序的去重復(fù)List接口與Set接口的比較List接口:有序(序號(hào))可重復(fù):可以通過下標(biāo)訪問元素扣典,集合中可以出現(xiàn)重復(fù)的元素主要實(shí)現(xiàn)類:ArrayList,LinkedList慎玖,VectorSet接口:無序(序號(hào))不重復(fù):不能通過下標(biāo)訪問元素贮尖,集合中不允許出現(xiàn)重的元素主要實(shí)現(xiàn)類:HashSet,LinkedHashSet趁怔,TreeSet Set集合的訪問方式:迭代器鍵值集合:Map接口(重要)key和value兩部分組成map.put(key,value): 向集合中存放一個(gè)鍵值對(duì) 如果key已經(jīng)存在湿硝,則覆蓋原有數(shù)據(jù)Object value = map.get(key): 根據(jù)key值取得對(duì)應(yīng)的value Object value = map.remove(key): 根據(jù)key值移除對(duì)應(yīng)的鍵值對(duì),并返回它boolean containsKey(Object key) 某個(gè)key是否在集合中存在boolean containsValue(Object value) 某個(gè)value是否在集合中存在 boolean isEmpty() 是否為空集合int size() 集合的長(zhǎng)度 Set keySet() 得到所有key值組成的set集合: 用于遍歷map集合

主要實(shí)現(xiàn)類

HashMap,Hashtable润努,TreeMap

HashMap和TreeMap的區(qū)別:key值的存放順序(與Set中的定義是一樣)

面試問題:

Map接口與List接口(Collection接口)的區(qū)別

List接口:線性結(jié)構(gòu)关斜,一個(gè)節(jié)點(diǎn)存放一個(gè)數(shù)據(jù)

Map接口:鍵值對(duì)結(jié)構(gòu),一個(gè)節(jié)點(diǎn)可以存放key-value兩個(gè)數(shù)據(jù)

HashMap與HashTable的區(qū)別

HashMap是線程不安全的铺浇,效率稍高

HashTable是線程安全的痢畜,效率稍低

? ? 泛型

約束集合中的數(shù)據(jù)類型,保證集合中數(shù)據(jù)類型是一致

泛型帶來的優(yōu)勢(shì):

(1)保證數(shù)據(jù)類型一致鳍侣,方便后續(xù)程序的處理和邏輯編寫

(2)向集合中添加數(shù)據(jù)時(shí)丁稀,強(qiáng)力約束數(shù)據(jù)類型,保證數(shù)據(jù)準(zhǔn)確和安全

(3)遍歷或取得數(shù)據(jù)時(shí)倚聚,省略O(shè)bject類型強(qiáng)制轉(zhuǎn)換线衫,提升效率

(4)可以使用for...each句式快速遍歷集合

在聲明集合時(shí),在類名后的<>中寫出泛型

=======================================================================================

周四的練習(xí)? 改寫為使用Map集合實(shí)現(xiàn)

key是學(xué)號(hào)

value是學(xué)生對(duì)象

要求使用泛型


文件與流

java.io包中提供了關(guān)于文件和流的大部分的類

文件類? java.io.File

操作系統(tǒng)中的文件和文件夾(不包括文件中內(nèi)容)

? 文件

主要方法

boolean exist();? 測(cè)試文件或文件夾是否存在

boolean createNewFile(); 創(chuàng)建新的空文件

boolean delete();? 刪除文件

String getAbsolutePath();? 得到文件的絕對(duì)路徑

File getAbsoluteFile();? 得到文件的絕對(duì)路徑? 使用File對(duì)象表示該路徑

String getPath();? 得到文件的路徑(一般都是絕對(duì)路徑)

String getName();? 得到文件名(不包含目錄)

String getParent() 得到完整目錄(不包括文件名)

File getParentFile() 得到完整目錄的File對(duì)象(不包括文件名)

long length();? ? 得到文件的大谢笳邸(單位是Byte字節(jié))

輔助方法

boolean canExecute()? 是否為可執(zhí)行文件

boolean canRead()? ? ? 文件是否可讀

boolean canWrite()? ? 文件是否可寫

boolean setWritable(boolean writable)? 設(shè)置文件是否為可寫

練習(xí):

c://1.gif.jpg? 編寫一個(gè)程序授账,得到該文件的擴(kuò)展名

? 文件夾

f.mkdir();? 創(chuàng)建空的文件夾(只能創(chuàng)建最后一級(jí)目錄,當(dāng)出現(xiàn)多級(jí)目錄(父級(jí)目錄不存在)時(shí)惨驶,方法無效)

f.mkdirs();? 創(chuàng)建空的文件夾白热,包含多級(jí)目錄? 推薦使用!粗卜!

在特定文件夾中創(chuàng)建文件的方法請(qǐng)參照com.demo.les03.Test3類

輔助方法

boolean isDirectory()? 文件對(duì)象是否是一個(gè)文件夾

boolean isFile()? ? 文件對(duì)象是否是一個(gè)文件

String[] list()? ? 返回文件夾下包含的子文件和子文件夾? 返回字符串?dāng)?shù)組

File[] listFiles()? 返回文件夾下包含的子文件和子文件夾? File數(shù)組

-----------------------------------------------------------------------------------

在控制臺(tái)上實(shí)現(xiàn)cmd的以下功能

dir? 查看子目錄和子文件

cd xxx? 進(jìn)入某個(gè)子目錄

cd..? 返回上一級(jí)目錄

cd\? ? 返回根目錄

create xxx.jpg? ? 在當(dāng)前目錄中新建xxx.jpg文件

delete xxx.jpg? ? 在當(dāng)前目錄中刪除xxx.jpg文件

流(Stream)類:在兩種不同介質(zhì)之間數(shù)據(jù)交互的一種形式屋确。有人稱之為“管道”?

流向分類:針對(duì)的目標(biāo)是:內(nèi)存(程序)

輸入流

輸出流

單位分類:

字節(jié)流:最小單位:byte

字符流:最小單位:char(2byte)

功能分類

原始流:基礎(chǔ)的功能流

處理流:對(duì)原始流進(jìn)行加強(qiáng)

類名的后綴

? ? 輸入流? ? ? ? 輸出流

字節(jié)流? ? InputStream? ? OutputStream

字符流? ? Reader? ? ? ? Writer

字節(jié)輸入流的父類:InputStream? 它的所有的子類命名都是XXXXXInputStream

其余的類似

字符流可以操作純文本文件 txt

----------------------------------------------------------------

練習(xí):

在C://1.txt文檔中有一些英文字母(大小寫都有)

找到其中出現(xiàn)次數(shù)最多的字母(a,A算一個(gè)字母)

asdklfjalLKDSAFJOISDJLjlksdjflkajoiwjlfkALKASDLFJLK

例子:利用程序 操作文件內(nèi)容

原始流-提供了文件操作的相關(guān)方法

FileInputStream

FileOutputStream

FileReader

FileWriter

文件的復(fù)制

1.將被復(fù)制的文件一次性讀取至內(nèi)存,內(nèi)存中向外輸出。

文件過大乍恐,內(nèi)存可能裝不下

2.一邊讀,一邊寫(推薦)

保證使用較小內(nèi)存测砂,就可以復(fù)制較大的文件

功能分類

原始流:基礎(chǔ)的功能流

處理流:對(duì)原始流進(jìn)行加強(qiáng)

類名的前綴

Buffered? ? 緩沖流? 提供了緩沖區(qū)能夠提升流的讀寫效率

Data? ? ? ? 數(shù)據(jù)流? 提供了從流中提取各種數(shù)據(jù)類型的方法

Object? ? ? 序列化? 提供了將對(duì)象直接序列化的相關(guān)方法

處理輸出流

需要將內(nèi)容從緩沖區(qū)中刷入實(shí)際位置

將之前控制臺(tái)輸入學(xué)生信息的練習(xí)

將學(xué)生信息保存到一個(gè)文本文件中? 1.txt

1001,張三,1999-9-9

1002,趙四,1997-7-7

序列化與反序列化

將內(nèi)存中的對(duì)象直接傳輸?shù)狡渌橘|(zhì)中

ObjectInputStream? 將對(duì)象從其他介質(zhì)中讀入到內(nèi)存中? (反序列化)

ObjectOuputStream? 將對(duì)象從內(nèi)存?zhèn)鬏數(shù)狡渌橘|(zhì)中? ? (序列化)?

被序列化對(duì)象的類必須實(shí)現(xiàn)接口java.io.Serializable

系統(tǒng)中常用的類基本都實(shí)現(xiàn)了該接口:

String茵烈,包裝類,Date砌些,集合....

使用了集合裝對(duì)象呜投,將集合序列化的辦法,可以解決存放多個(gè)數(shù)據(jù)的問題

前提:集合中的對(duì)象必須實(shí)現(xiàn)java.io.Serializable接口

transient關(guān)鍵字存璃,修飾屬性

被該關(guān)鍵字修飾的屬性仑荐,不參與序列化操作

------------------------------------------------------------

練習(xí):昨天練習(xí)改寫為使用序列化的方式,保存數(shù)據(jù)

-----------------------------------------------------------

多線程

單核CPU在同一時(shí)間只能處理一個(gè)進(jìn)程

CPU的輪轉(zhuǎn)時(shí)間片:

時(shí)間片:一小段時(shí)間

由于輪轉(zhuǎn)的速度非匙荻快粘招,多個(gè)程序看起來就是同時(shí)運(yùn)行的

進(jìn)程:程序在系統(tǒng)中運(yùn)行時(shí)的一個(gè)體現(xiàn)

線程:一個(gè)進(jìn)程中“同時(shí)”執(zhí)行的程序分支

Java中如何實(shí)現(xiàn)多線程?

兩種

1.繼承java.lang.Thread類偎球,重寫這個(gè)類的run方法

2.實(shí)現(xiàn)java.lang.Runnable接口, 并實(shí)現(xiàn)接口中的run方法

線程的啟動(dòng)方式

直接創(chuàng)建對(duì)象調(diào)用run方法洒扎,這種方式不是多線程的啟動(dòng)方式,與常規(guī)的方法調(diào)用一致

如果某個(gè)類繼承了Thread類衰絮,通過start方法進(jìn)行啟動(dòng)

如果某個(gè)類實(shí)現(xiàn)了Runnable接口袍冷,將對(duì)象交給一個(gè)啟動(dòng)線程Thread對(duì)象,啟動(dòng)Thread對(duì)象的start

MyThread2 mt2 = new MyThread2();

Thread t = new Thread(mt2);

t.start();

線程安全

當(dāng)多個(gè)線程訪問同一個(gè)資源時(shí)猫牡,有可能某個(gè)線程執(zhí)行一半的情況下胡诗,讓出了CPU的執(zhí)行權(quán),

下一輪時(shí)間片被其他線程搶走淌友,造成了數(shù)據(jù)的不準(zhǔn)確

synchronized:保證線程安全

同步方法? 修飾方法煌恢,將方法變?yōu)橥椒椒ǎ褐荒鼙WC類內(nèi)部資源的安全

同步塊? ? 在塊中的代碼,對(duì)于塊聲明的資源亩进,進(jìn)行鎖定症虑,保證線程安全

面試問題

線程實(shí)現(xiàn)的方式

1.繼承java.lang.Thread類,重寫這個(gè)類的run方法

2.實(shí)現(xiàn)java.lang.Runnable接口, 并實(shí)現(xiàn)接口中的run方法

應(yīng)該使用哪種方式創(chuàng)建一個(gè)線程归薛?

推薦使用第2種方式來創(chuàng)建線程谍憔,將繼承的父類的位置留出來以防萬一。

使用Runnable來創(chuàng)建線程主籍,的啟動(dòng)方式习贫?

MyRunnable m = new MyRunnable();

Thread t = new Thread(m);

t.start();

同步:線程安全,在同步塊中的代碼必須是一個(gè)線程完整執(zhí)行后千元,才能繼續(xù)下一次競(jìng)爭(zhēng)苫昌。

同步:加鎖。? ? 理解為:線程鎖定了CPU

死鎖:多個(gè)共享資源A幸海,B

? ? ? 多個(gè)線程T1和T2

T1獲得了A資源祟身,請(qǐng)求B資源

T2獲得了B資源奥务,請(qǐng)求A資源

--------------------------------------------------------------------------

(選做)模擬三個(gè)面包師制作面包,面包的總數(shù)要求為30? (售票反過來做)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末袜硫,一起剝皮案震驚了整個(gè)濱河市氯葬,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌婉陷,老刑警劉巖帚称,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異秽澳,居然都是意外死亡闯睹,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門担神,熙熙樓的掌柜王于貴愁眉苦臉地迎上來楼吃,“玉大人,你說我怎么就攤上這事妄讯∷叮” “怎么了?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵捞挥,是天一觀的道長(zhǎng)浮创。 經(jīng)常有香客問我,道長(zhǎng)砌函,這世上最難降的妖魔是什么斩披? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮讹俊,結(jié)果婚禮上垦沉,老公的妹妹穿的比我還像新娘。我一直安慰自己仍劈,他們只是感情好厕倍,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著贩疙,像睡著了一般讹弯。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上这溅,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天组民,我揣著相機(jī)與錄音,去河邊找鬼悲靴。 笑死臭胜,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播耸三,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼乱陡,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了仪壮?” 一聲冷哼從身側(cè)響起蛋褥,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎睛驳,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體膜廊,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡乏沸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了爪瓜。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蹬跃。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖铆铆,靈堂內(nèi)的尸體忽然破棺而出蝶缀,到底是詐尸還是另有隱情,我是刑警寧澤薄货,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布翁都,位于F島的核電站,受9級(jí)特大地震影響谅猾,放射性物質(zhì)發(fā)生泄漏柄慰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一税娜、第九天 我趴在偏房一處隱蔽的房頂上張望坐搔。 院中可真熱鬧,春花似錦敬矩、人聲如沸概行。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凳忙。三九已至,卻和暖如春禽炬,著一層夾襖步出監(jiān)牢的瞬間消略,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來泰國(guó)打工瞎抛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留艺演,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像胎撤,于是被迫代替她去往敵國(guó)和親晓殊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

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

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法伤提,類相關(guān)的語法巫俺,內(nèi)部類的語法,繼承相關(guān)的語法肿男,異常的語法介汹,線程的語...
    子非魚_t_閱讀 31,664評(píng)論 18 399
  • Java 語言支持的類型分為兩類:基本類型和引用類型。整型(byte 1, short 2, int 4, lon...
    xiaogmail閱讀 1,350評(píng)論 0 10
  • 看著內(nèi)容很簡(jiǎn)單舶沛,寫起來卻難難難嘹承。本來就很慢,現(xiàn)在因?yàn)楸O(jiān)考又耽誤了進(jìn)度如庭,使得本來就不近的山這下子更遠(yuǎn)了叹卷。 要是有哪吒...
    悠悠99閱讀 298評(píng)論 0 0
  • 這首歌我聽了很多遍,發(fā)現(xiàn)如果一個(gè)人在我眼里都是好說明這是喜歡坪它,都是差這是陌路人骤竹,好壞交割才是愛。 那天朋友給我拉來...
    銀色的光芒閱讀 109評(píng)論 0 0
  • 心里在單獨(dú)念叨摶扶搖羊角而上者九萬里,然后就開始心生向往飄飄然开瞭,頗有種“做人也當(dāng)如此”的感覺鸣奔,然后,就放飛了字體…...
    抽煙喝酒看書閱讀 230評(píng)論 0 0