最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Java學(xué)習(xí)筆記:集合和IO流知識(shí)合集,線程,生命周期,堵塞,守護(hù)線程等【詩書畫唱】

2020-07-23 15:08 作者:詩書畫唱  | 我要投稿

集合的分類:

list:ArrayList、LinkedList、Vector

1.有序(可以使用下標(biāo)進(jìn)行訪問)

2.大小任意

3.存儲(chǔ)的類型任意


set:HashSet

1. 無序(沒有下標(biāo))

2.大小任意

3.存儲(chǔ)的類型任意

4.取數(shù)據(jù)的時(shí)候取的順序和存入的順序可能不一致


map:HashMap

1. 無序(沒有下標(biāo))

2.大小任意

3.采用的鍵值對(duì)的方式進(jìn)行存儲(chǔ),鍵是不能重復(fù),值是可以重復(fù)


// Collections類是一個(gè)工具類,主要是對(duì)于集合操作的工具類,其中的方法全部都是靜態(tài)的。


// 常用方法:

// 1.addAll():一次性對(duì)集合添加多條數(shù)據(jù)

// 2. Sort():對(duì)集合內(nèi)容進(jìn)行排序

// 3.shuffle():對(duì)集合元素進(jìn)行隨機(jī)排序

// 4.copy():復(fù)制集合,要求復(fù)制的集合的長(zhǎng)度大于被復(fù)制的集合的長(zhǎng)度

// 5.max():得到集合中的最大值

// 6.min():得到集合中的最小值



SQL_PreparedStatement:

什么是防注入?直接字符串拼接用戶再后輸入一個(gè)or 1=1的時(shí)候那么這個(gè)條件是肯定成立的,所以用戶輸入不輸入用戶名沒有多大的關(guān)系了為了解決這個(gè)問題,就要使preparedstatement解決,它默認(rèn)將sql語句編譯成函數(shù),每次只要傳入相應(yīng)的參數(shù)就可以了,就可以防止用戶sql注入



預(yù)處理:

我們每次對(duì)于數(shù)據(jù)庫操作數(shù)據(jù)庫都要將sql語句編譯成函數(shù)

如果我們使用預(yù)處理的時(shí)候,數(shù)據(jù)庫就默認(rèn)生成了一個(gè)函數(shù),以后再

傳入相同的內(nèi)容的時(shí)候只需要調(diào)用這個(gè)函數(shù)就可以了,這個(gè)就可以提升sql執(zhí)行的效率

//1.導(dǎo)入數(shù)據(jù)包

//2.加載數(shù)據(jù)包

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

//3.創(chuàng)建連接數(shù)據(jù)庫的對(duì)象(Connection)

Connection con=DriverManager.getConnection("jdbc:sqlserver://localhost;databaseName=fuxi","qqq","11111");

//4.創(chuàng)建執(zhí)行sql語句的對(duì)象,是statement,preparedStatement(防注入,預(yù)處理)

String sql="select * from denglu where uid=? and uname=?";//1

PreparedStatement ps=con.prepareStatement(sql);//編譯sql語句

ps.setObject(1, 1);

ps.setObject(2, "qwe");

//5.寫并且執(zhí)行sql語句,ResultSet的對(duì)象

ResultSet res=ps.executeQuery();//使用這個(gè)方法去執(zhí)行sql語句

//6.遍歷這個(gè)對(duì)象

while(res.next()){

System.out.println(res.getObject(1)+"? "+res.getObject(2));

}



為什么要讀取配置文件://將一些常用的配置信息保存在配置文件里,

//java類一旦編譯,雖然我們不能直接修改編譯后的文件,但是我們

//可以修改配置文件,寫的代碼對(duì)于配置都是去配置文件里讀的,萬一

//數(shù)據(jù)庫用戶或者密碼修改里之后,我直接修改配置文件即可




//讀取配置文件:

//1.建立一個(gè)文件,src目錄下,文件名稱可以

//隨便,但是后綴名必須為.properties

//2.添加幾個(gè)內(nèi)容

//3.在main中添加一下代碼

//1.將這個(gè)配置文件轉(zhuǎn)化為字節(jié)流

//使用類加載器轉(zhuǎn)化文件

InputStream is=qqq.class.getResourceAsStream ("../zz.properties");

Properties p=new Properties();

p.load(is);

System.out.println(p);

//獲取指定的單個(gè)內(nèi)容

System.out.println(p.getProperty("qq"));





事務(wù):

事務(wù)是指一組操作,要么都執(zhí)行成功,要么都執(zhí)行失敗。四個(gè)特性;

1)原子性:一組操作,要么都執(zhí)行成功,要么都執(zhí)行失敗。


?2)隔離性:一個(gè)事務(wù)的操作沒有完成之前,其他事務(wù)是不能對(duì)這個(gè)事務(wù)處理的結(jié)果進(jìn)行操作的,需要犧牲速度


3)一致性:事物發(fā)生和發(fā)生后的總金額依然匹配。


4)持久性:事務(wù)產(chǎn)生的影響是不能撤銷的。Connection c=DBUtil.getCon();c.setAutoCommit(false);//設(shè)置連接為手動(dòng)提交


c.commit();//在執(zhí)行完操作后提交事務(wù)


c.rollback();出現(xiàn)異常執(zhí)行回滾File操作:



構(gòu)造方法:

new File("路徑");

new File("父級(jí)路徑","文件名稱");


常用方法:

createNewFile():創(chuàng)建文件

mkdir():創(chuàng)建文件夾

mkdirs():創(chuàng)建多級(jí)文件夾

delete():刪除文件,當(dāng)你的文件夾中包含內(nèi)容的時(shí)候,是不會(huì)刪除的


判斷文件:判斷文件是否存在:exists();

判斷輸入的路徑是否是絕對(duì)路徑:isAbsolute()

判斷是否是一個(gè)文件夾:isDirectory();

判斷是否是一個(gè)文件:isFile();

判斷文件是否是隱藏文件:isHidden();



獲取的方法:

獲取文件的絕對(duì)路徑:getAbsoluteFile()

獲取文件的父路徑:getParentFile();

獲取文件的名字:getName();


返回創(chuàng)建對(duì)象時(shí)的路徑:getPath()

返回文件最后修改時(shí)間:lastModified()

返回文件的字節(jié)數(shù):length()

返回文件是否可讀:CanRead()

返回文件是否可寫:CanWrite();



list:得到文件夾下的所有的文件名稱,它得到的是一個(gè)String類型的數(shù)組

listFiles:得到文件夾下的所有的文件,它得到的是文件類型的數(shù)組

listRoots:得到計(jì)算機(jī)的根目錄



IO流的介紹:

輸入輸出流,將你的程序作為中心點(diǎn),從計(jì)算機(jī)中傳入到程序里叫做輸入流,從程序里往計(jì)算機(jī)輸出文件叫做輸出流


字節(jié)流,字符流,計(jì)算機(jī)文件的最基本單位是字節(jié),1個(gè)字符可以包含1-3個(gè)字節(jié)

1.字符流每次讀取兩個(gè)字節(jié),所以相較于字節(jié)流速度要快

2.字符流只能夠處理文本文件,字節(jié)流可以處理其他任何文件結(jié)論:只要是純文本數(shù)據(jù)優(yōu)先使用字符流,除此之外都使用字節(jié)


讀取文本內(nèi)容語法:

File f=new File("ceshi.txt");

//輸出流(追加內(nèi)容)

FileReader fw=new FileReader(f);

char[] cs=new char[100];

int len;

while((len=fw.read(cs))!=-1){

System.out.println(new String(cs,0,len));

}

fw.close();



寫入文本內(nèi)容語法:

File f=new File("ceshi.txt");

//輸出流(追加內(nèi)容)

FileWriter fw=new FileWriter(f);

char[] cs=new char[100];

int len;

while((len=fw.read(cs))!=-1){

fw.writer(new String(cs,0,len));

}

fw.close();




字節(jié)流:

FileInputStream:字節(jié)輸入流

FileOutputStream:字節(jié)輸出流

字節(jié)流是可以讀取任何文件,每次讀取的時(shí)候是1字節(jié)




緩沖流(包裝流):

BufferedReader:字符輸入緩沖流

BufferedWriter:字符輸出緩沖流

BufferedInputStream:字節(jié)輸入緩沖流

BufferedOutputStream:字節(jié)輸出緩沖流

為了提高讀寫流的效率,引入了緩沖機(jī)制,進(jìn)行批量的讀寫,提高了讀寫的效率。Buffered包裝類用于加快了讀寫內(nèi)容的速度轉(zhuǎn)換流:



兩個(gè)功能:1.將輸入的字節(jié)轉(zhuǎn)換為字符

2.進(jìn)行編碼轉(zhuǎn)換

InputStreamReader:字節(jié)輸入轉(zhuǎn)換流

OutputStreamWriter:字節(jié)輸出轉(zhuǎn)換流

ObjectInputStream:對(duì)象輸入流

ObjectOutputStream:對(duì)象輸出流

特點(diǎn):以前的流可以存儲(chǔ)文本,其他類型數(shù)據(jù),但是不可以存儲(chǔ)對(duì)象,這個(gè)流唯一特點(diǎn)就是可以存儲(chǔ)對(duì)象。




為什么要存儲(chǔ)對(duì)象:

因?yàn)樵趥鬏攦?nèi)容的時(shí)候,如果傳輸?shù)氖瞧胀?,一旦?nèi)容被獲取到,其他人可以通過轉(zhuǎn)碼將數(shù)據(jù)轉(zhuǎn)會(huì)源碼,但是對(duì)象流一旦被別人獲取到,別人要需要將其轉(zhuǎn)換為相應(yīng)的對(duì)象格式,才可以看到里面的內(nèi)容



RandomAccessFile:分割流

兩個(gè)參數(shù):1、地址? ?2、r(只讀)? rw(讀寫)

seek():從哪里開始讀數(shù)據(jù)



RandomAccessFile:

1.可以從任意位置進(jìn)行讀取數(shù)據(jù)

2.它是一個(gè)讀寫流既可以讀數(shù)據(jù),也可以寫數(shù)據(jù)



transient:只可以修飾屬性,修飾后的屬性不參與序列化



多線程怎么執(zhí)行的:

多個(gè)線程同時(shí)去搶奪cpu的執(zhí)行權(quán),那個(gè)線程搶到就執(zhí)行那個(gè)線程

進(jìn)程和線程的區(qū)別:一個(gè)進(jìn)程是包含多個(gè)線程的,進(jìn)程是在正在執(zhí)行的程序在內(nèi)存中的執(zhí)行區(qū)域


單線程和多線程的區(qū)別:單線程安全性高,效率低,多線程安全性低,效率高

thread[θred]

seek[si?k]

current[?k?r?nt]

run() 線程

start() 啟動(dòng)線程

getName() 獲取線程的名稱

setName() 設(shè)置線程的名稱

Thread.CurrentThread.getName() 獲取線程的名稱

sleep() 線程休眠

activeCount() 返回線程的總數(shù)

seek():從哪里開始讀數(shù)據(jù)

返回文件是否可寫:CanWrite();

線程使用的第一種方式(繼承):

class a extends Thread{

public void run(){

//重寫run方法

}

}

//使用線程:

a aa=new a();

aa.start();




線程的生命周期:

1.就緒狀態(tài):實(shí)例化好了這個(gè)線程,但是并沒有啟動(dòng)這個(gè)線程

2.可運(yùn)行狀態(tài):啟動(dòng)了這個(gè)線程,但是這個(gè)線程并沒有搶到cpu的使用權(quán)

3.運(yùn)行狀態(tài):這個(gè)線程搶到了cpu的使用權(quán)

4.死亡狀態(tài):這個(gè)線程的代碼全部執(zhí)行完畢之后,就釋放掉這個(gè)線程



線程在運(yùn)行狀態(tài)的時(shí)候會(huì)觸發(fā)堵塞:

堵塞分為三種堵塞:

休眠:當(dāng)前獲取cpu使用權(quán)的線程會(huì)休眠,其他線程會(huì)暫停執(zhí)行,cpu的執(zhí)行權(quán)仍是有休眠的線程獲取

禮讓:當(dāng)前獲取到cpu使用權(quán)的線程會(huì)進(jìn)行禮讓,禮讓的時(shí)候會(huì)將cpu的使用權(quán)拋出,多個(gè)線程再重新?lián)寠Zcpu的使用權(quán),當(dāng)前線程仍有搶到cpu使用權(quán)的權(quán)利

插入隊(duì)列:

守護(hù)線程:為了保證正常線程的使用,對(duì)其進(jìn)行服務(wù)的,當(dāng)正常線程全部執(zhí)行完畢之后,守護(hù)線程也就會(huì)自動(dòng)釋放掉


setDaemon(true):設(shè)置用戶線程改為守護(hù)線程

join:插入隊(duì)列

sleep:線程休眠

yield:禮讓線程

stop:終止線程(盡量少用)


Java學(xué)習(xí)筆記:集合和IO流知識(shí)合集,線程,生命周期,堵塞,守護(hù)線程等【詩書畫唱】的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
镇赉县| 四子王旗| 朝阳市| 介休市| 灯塔市| 济宁市| 克山县| 灯塔市| 洛浦县| 双桥区| 衡南县| 五大连池市| 芒康县| 乡宁县| 万荣县| 德化县| 商南县| 临潭县| 双柏县| 凉城县| 新兴县| 汉源县| 米脂县| 廊坊市| 教育| 晋中市| 开封县| 丹巴县| 乌恰县| 九江市| 安图县| 内黄县| 陆川县| 南充市| 安陆市| 阳原县| 绥江县| 株洲县| 龙泉市| 梁平县| 陇南市|