1.java獲取前端的IP等信息:網(wǎng)絡(luò)協(xié)議:request.getScheme();網(wǎng)絡(luò)ip:request.getServerName();端口號:request.getServerPort()
2.文件流和普通的數(shù)據(jù)類型是不能同時傳遞的险毁,因為文件流是異步上傳的;數(shù)據(jù)類型少的情況下直接將數(shù)據(jù)放到action的url接口中傳遞畔况,這樣能做到同時上傳少量數(shù)據(jù)和文件流
3.關(guān)于java.io.FileNotFoundException異常:在構(gòu)造一個File對象時鲸鹦,指定的文件路徑是什么都可以,就算不存在也能夠構(gòu)造File對象跷跪,但是馋嗜,現(xiàn)在你要對文件進行輸入輸出操作,也就是InputStream和OutputStream操作時吵瞻,如果填寫的路徑不存在葛菇,那么就會報系統(tǒng)找不到指定路徑,如果指定的是目錄時橡羞,就會報拒絕訪問異常眯停。FileOutputStream讀取流的時候如果是文件夾,就會出錯卿泽,無論怎么讀莺债,都拒絕訪問
4.想用相對路徑時,但是當我將images這個文件夾與我的.class文件(即要執(zhí)行的webservice)放在同一個目錄里時九府,發(fā)現(xiàn)運行失敗了椎瘟,提示找不到這個文件夾覆致。打印了一下當前目錄結(jié)果是tomcat的bin目錄侄旬,而并不是tomcat里所部屬的webservice目錄。所以當作為webservice部署到tomcat里時煌妈,若想使用當前目錄儡羔,最好先使用System.out.println(newFile(".").getAbsolutePath());查看一下當前目錄是什么,因為他不一定是你的.class文件存放的目錄璧诵,通常是tomcat的bin目錄汰蜘,所以需要根據(jù)這個目錄重新指定你想要到達的目錄。
5.mkdir()創(chuàng)建此抽象路徑名指定的目錄之宿,只會建立一級的文件夾族操;mkdirs()創(chuàng)建此抽象路徑名指定的目錄,包括創(chuàng)建必需但不存在的父目錄比被,可以建立多級文件夾色难。文件上傳到目的地創(chuàng)建路徑時還是用mkdir()為好,因為mkdirs()會創(chuàng)建不存在的父目錄
6.03年和03年之前版本的EXCEL后綴為xls,用HSSFWorkbook操作等缀;03年之后的用XSSFWorkbook操作
7.重載就是創(chuàng)建另一個有相同名字但參數(shù)不同的方法
8.String,StringBuilder和StringBuffer的區(qū)別:
? ? (1)String在字符串不經(jīng)常發(fā)生變化的業(yè)務(wù)場景優(yōu)先使用(代碼更清晰簡潔)枷莉,如常量的命名,少量字符串的 操作
? ? (2)StringBuilder在單線程情況下尺迂,如有大量的字符串操作笤妙,應(yīng)使用此類,以此來避免產(chǎn)生大量無用的中間對? ? 象噪裕,耗費空間且執(zhí)行效率低下(新建對象蹲盘,回收對象會花費大量時間),如json的封裝
? ? (3)StringBuffer在多線程膳音,如有大量的字符串操作辜限,如HTTP參數(shù)解析和封裝
9.HashMap的方法:hashMap是基于Map的實現(xiàn),并且允許null value和null key,它不保證存儲的數(shù)據(jù)的順序严蓖。特別要注意的是hashMap不是同步的薄嫡,要實現(xiàn)同步除了在外部實現(xiàn)同步外,還可以通過Map m = Collections.synchronizedMap(new HashMap())或者使用ConcurrentHashMap類颗胡。
HashMap<String,Integer> map = new HashMap<>();
HashMap<String,Integer> map2 = new HashMap<>();
存值:map.put("demo",1)? ? 取值:map.get("demo")
判斷是否為空:map.isEmpty()
判斷是否含有key:map.containsKey("demo")? ? 判斷是否含有value:map.containsValue(1)
刪除key下的value:map.remove("demo")? ? 刪除key->value對:map.remove("demo",1)
顯示所有的key:map.keySet()? ? 顯示所有的key->value:map.entrySet()
所有的values值:map.values()? ? 元素個數(shù):map.size()
添加另一個同一類型的map下的所有值:map.puAll(map2),使用時不能用表達式賦值毫深,而是變量賦值給變量
替換key下的value:map.replace("demo",2)? ? 清空:map.clear()
當前map不存在鍵key或者該key關(guān)聯(lián)的值為null,則執(zhí)行put(key,value);否則不變:map.putIfAbsent()
參數(shù)為key和逼函數(shù)(箭頭函數(shù))毒姨,作用是把箭頭函數(shù)返回的值賦給key:map.compute("demo",(k,v) -> 表達式哑蔫?a:b ),舉例如下:
????????map.compute(8, ((k,v) -> (v == null)? "hiu" : v.concat("hahahaha")));
? ? ? ? System.out.println(map.get(8));
? ? ? ? map.compute(8, ((k,v) -> (v == null)? "hiu" : v.concat("hahahaha")));
? ? ? ? System.out.println(map.get(8));
HashMap遍歷方法:
Iterator?iter?=?map.entrySet().iterator();???
while?(iter.hasNext())?{???
????Map.Entry?entry?=?(Map.Entry)?iter.next();???
????Object?key?=?entry.getKey();???
????Object?val?=?entry.getValue();???
}?
意思就是當Map集合中有這個key時,就使用這個key值,如果沒有就使用默認值defaultValue:map.getOrDefault(Object key,String defaultValue)
10.>>和>>>是位移運算符闸迷,其中>>為帶符號的位移嵌纲,>>>為不帶符號的位移。左移運算符是增大一個數(shù)腥沽,右移是減小逮走。正數(shù)不管是>>還是>>>操作,這兩者操作的結(jié)果一樣今阳。-2在二進制中為10000~00010(32位)师溅,進行>>>移位時,先移位成10000~000001(32位)盾舌,再將移位后的位置前的取相反墓臭。則為011111~1111(32位),即int最大值
11.java中 靜態(tài)方法不可以直接調(diào)用非靜態(tài)方法和成員妖谴,也不能使用this關(guān)鍵字(這就是這個問題的原因窿锉,我用靜態(tài)的main方法調(diào)用了非靜態(tài)的的get方法)。
原因解釋:類中靜態(tài)的方法或者屬性膝舅,本質(zhì)上來講并不是該類的成員嗡载,在java虛擬機裝在類的時候,這些靜態(tài)的東西已經(jīng)有了對象铸史,它只是在這個類中”寄居”鼻疮,不需要通過類的構(gòu)造器(構(gòu)造函數(shù))類實現(xiàn)實例化;而非靜態(tài)的屬性或者方法琳轿,在類的裝載是并沒有存在判沟,需在執(zhí)行了該類的構(gòu)造函數(shù)后才可依賴該類的實例對象存在。所以在靜態(tài)方法中調(diào)用非靜態(tài)方法時崭篡,編譯器會報錯(Cannot make a static reference to the non-static method func() from the type A)挪哄。
12.Java中實現(xiàn)多態(tài)的機制為“父類或接口中的引用變量指向的是具體實例對象的方法,而不是引用變量自身這個類中定義的方法”琉闪。