java 第二天,Java复习第二天
1.idea里jar包和war的區(qū)別
JAR(JAVA Archive 是類的歸檔文件),JAR 文件不僅用于壓縮和發(fā)布,而且還用于部署和封裝庫、組件和插件程序,并可被像編譯器和 JVM 這樣的工具直接使用。
簡單來說,jar包就像一個插件而且是打包已經(jīng)寫好的類,可以將jar包導(dǎo)入自己寫的項(xiàng)目中,也可以直接使用jar包中的類和屬性(jar包一般放在bin目錄中)
WAR(Web application Archive,war包是JavaWeb程序打的包,一個Web應(yīng)用程序),war包里面包括寫的代碼編譯成的class文件,依賴的包,配置文件,所有的網(wǎng)站頁面,包括html,jsp等等。一個war包可以理解為是一個web項(xiàng)目,里面是項(xiàng)目的所有東西。
部署普通的spring項(xiàng)目用war包就可以,部署springboot項(xiàng)目用jar包就可以,因?yàn)閟pringboot內(nèi)置tomcat
2.JAVA環(huán)境配置
JDK(JavaSE Development Kit,java開發(fā)工具包)提供了編譯、運(yùn)行java程序所需的各種工具和資源,包括java編譯器、java運(yùn)行時環(huán)境,以及常用的java類庫等
JRE,(Java Runtime Environment ),java運(yùn)行時環(huán)境。它是運(yùn)行java程序的必須條件。一般而言,如果只是運(yùn)行java程序,可以只安裝JRE,無需安裝JDK
3.安裝jdk
2.在 "系統(tǒng)變量" 中設(shè)置 3 項(xiàng)屬性,JAVA_HOME、PATH、CLASSPATH(大小寫無所謂),若已存在則點(diǎn)擊"編輯",不存在則點(diǎn)擊"新建"。
(注意:如果使用 1.5 以上版本的 JDK,不用設(shè)置 CLASSPATH 環(huán)境變量,也可以正常編譯和運(yùn)行 Java 程序。)
變量名:JAVA_HOME
變量值:C:\Program Files (x86)\Java\jdk1.8.0_91?? ? ? ?// 要根據(jù)自己的實(shí)際路徑配置
變量名:CLASSPATH
變量值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;?? ? ? ? //記得前面有個"."
變量名:Path
變量值:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
(注意:在 Windows10 中,Path 變量里是分條顯示的,我們需要將?%JAVA_HOME%\bin; %JAVA_HOME%\jre\bin;?分開添加,否則無法識別:)
測試JDK是否安裝成功
1、"開始"->"運(yùn)行",鍵入"cmd";
2、鍵入命令:?java -version、java、javac?幾個命令,
jdk 基本包
java.lang ----- 包含了java開發(fā)的基礎(chǔ)類和一些基本的方法。其中最重要的類就是java.lang.Object類,它的對象是Java平臺中所有其他類對象擴(kuò)展層次樹的根,又叫做語言包,基本類型都能在這里找到他的封裝
java.io ----- 通過數(shù)據(jù)流、序列化和文件系統(tǒng)提供系統(tǒng)輸入和輸出,尤其是文件操作
java.util ----- 包含 collection 框架、遺留的 collection 類、事件模型、日期和時間設(shè)施、國際化和各種實(shí)用工具類(字符串標(biāo)記生成器、隨機(jī)數(shù)生成器和位數(shù)組)
java.sql ----- 提供使用 JavaTM 編程語言訪問并處理存儲在數(shù)據(jù)源(通常是一個關(guān)系數(shù)據(jù)庫)中的數(shù)據(jù)的 API。此 API 包括一個框架,憑借此框架可以動態(tài)地安裝不同驅(qū)動程序來訪問不同數(shù)據(jù)源
JDK的最命令行工具
java: 啟動JVM執(zhí)行class
javac: Java編譯器
jar: Java打包工具
javadoc: Java文檔生成器
4.JAVA八大基本數(shù)據(jù)類型
byte,short,long,int(包裝類為Integer),char(包裝類為Character數(shù)據(jù)類型可以儲存任何字符),boolean(默認(rèn)值為false),float(浮點(diǎn)數(shù)不能用來表示精確的值)double
string 類中的常用方法
length() : 獲取字符串的長度,其實(shí)也就是字符個數(shù)
charAt(int index) : 獲取指定索引處的字符
indexOf(String str) : 獲取str在字符串對象中第一次出現(xiàn)的索引
substring(int start) : 從start開始截取字符串
String substring(int start,int end) : 從start開始,到end結(jié)束截取字符串。包頭不包尾
equals(Object obj) : 比較字符串的內(nèi)容是否相同
toCharArray() : 把字符串轉(zhuǎn)換為字符數(shù)組
toLowerCase() : 把字符串轉(zhuǎn)換為小寫字符串
toUpperCase() : 把字符串轉(zhuǎn)換為大寫字符串
trim():去除字符串兩端空格
字符串比較
public int compareTo(String anotherString)//該方法是對字符串內(nèi)容按字典順序進(jìn)行大小比較,通過返回的整數(shù)值指明當(dāng)前字符串與參數(shù)字符串的大小關(guān)系。若當(dāng)前對象比參數(shù)大則返回正整數(shù),反之返回負(fù)整數(shù),相等返回0。
public int compareToIgnore(String anotherString)//與compareTo方法相似,但忽略大小寫。
public boolean equals(Object anotherObject)//比較當(dāng)前字符串和參數(shù)字符串,在兩個字符串相等的時候返回true,否則返回false。
public boolean equalsIgnoreCase(String anotherString)//與equals方法相似,但忽略大小寫。
12.replace(char oldChar, char newChar)//用字符newChar替換當(dāng)前字符串中所有的oldChar字符,并返回一個新的字符串。
5.==, equals 與 hashCode 的區(qū)別與聯(lián)系
== : 該操作符生成的是一個boolean結(jié)果,它計算的是操作數(shù)的值之間的關(guān)系
若操作數(shù)的類型是基本數(shù)據(jù)類型,則該關(guān)系操作符判斷的是左右兩邊操作數(shù)的值是否相等
若操作數(shù)的類型是引用數(shù)據(jù)類型,則該關(guān)系操作符判斷的是左右兩邊操作數(shù)的內(nèi)存地址是否相同。也就是說,若此時返回true,則該操作符作用的一定是同一個對象。
equals : Object 的 實(shí)例方法,比較兩個對象的content是否相同
equals方法是用來比較兩個對象的引用是否相等,即是否指向同一個對象。
hashCode : Object 的 native方法 , 獲取對象的哈希值,用于確定該對象在哈希表中的索引位置,它實(shí)際上是一個int型整數(shù)
hashcode是系統(tǒng)用來快速檢索對象而使用
equals方法本意是用來判斷引用的對象是否一致
重寫equals方法和hashcode方法時,equals方法中用到的成員變量也必定會在hashcode方法中用到,只不過前者作為比較項(xiàng),后者作為生成摘要的信息項(xiàng),本質(zhì)上所用到的數(shù)據(jù)是一樣的,從而保證二者的一致性
6.HashMap和Hashtable的區(qū)別和聯(lián)系
相同點(diǎn): 實(shí)現(xiàn)原理相同,功能相同,底層都是哈希表結(jié)構(gòu),查詢速度快,在很多情況下可以互用
不同點(diǎn): 1、Hashtable是早期提供的接口,HashMap是新版JDK提供的接口。
2、Hashtable繼承Dictionary類,HashMap實(shí)現(xiàn)Map接口。
3、Hashtable線程安全,HashMap線程非安全。
4、Hashtable不允許null值,HashMap允許null值。
7.集合和數(shù)組
一、數(shù)組聲明了它容納的元素的類型,而集合不聲明。
二、數(shù)組是靜態(tài)的,一個數(shù)組實(shí)例具有固定的大小,一旦創(chuàng)建了就無法改變?nèi)萘苛恕6鲜强梢詣討B(tài)擴(kuò)展容量,可以根據(jù)需要動態(tài)改變大小,集合提供更多的成員方法,能滿足更多的需求。
三、數(shù)組的存放的類型只能是一種(基本類型/引用類型),集合存放的類型可以不是一種(不加泛型時添加的類型是Object)。
四、數(shù)組是java語言中內(nèi)置的數(shù)據(jù)類型,是線性排列的,執(zhí)行效率或者類型檢查都是最快的。
8.集合體系結(jié)構(gòu)
Collection
├List (有序集合,允許相同元素和null)
│├LinkedList (非同步,允許相同元素和null,遍歷效率低插入和刪除效率高)
│├ArrayList (非同步,允許相同元素和null,實(shí)現(xiàn)了動態(tài)大小的數(shù)組,遍歷效率高,用的多)
│└Vector(同步,允許相同元素和null,效率低)
│ └Stack(繼承自Vector,實(shí)現(xiàn)一個后進(jìn)先出的堆棧)
└Set (無序集合,不允許相同元素,最多有一個null元素)
|-HashSet(無序集合,不允許相同元素,最多有一個null元素)
Map (沒有實(shí)現(xiàn)collection接口,key不能重復(fù),value可以重復(fù),一個key映射一個value)
├Hashtable (實(shí)現(xiàn)Map接口,同步,不允許null作為key和value,用自定義的類當(dāng)作key的話要復(fù)寫hashCode和eques方法,)
├HashMap (實(shí)現(xiàn)Map接口,非同步,允許null作為key和value,用的多)
└WeakHashMap(實(shí)現(xiàn)Map接口)
9.常用集合的分類:
List 接口:元素按進(jìn)入先后有序保存,可重復(fù)
LinkedList 接口實(shí)現(xiàn)類, 鏈表, 插入刪除, 沒有同步, 線程不安全
ArrayList 接口實(shí)現(xiàn)類, 數(shù)組, 隨機(jī)訪問, 沒有同步, 線程不安全
Set 接口: 僅接收一次,不可重復(fù),并做內(nèi)部排序
HashSet 使用hash表(數(shù)組)存儲元素
LinkedHashSet 鏈表維護(hù)元素的插入次序
TreeSet 底層實(shí)現(xiàn)為二叉樹,元素排好序
Map 接口: 鍵值對的集合 (雙列集合)
Hashtable 接口實(shí)現(xiàn)類, 同步, 線程安全
HashMap 接口實(shí)現(xiàn)類 ,沒有同步, 線程不安全-
TreeMap 紅黑樹對所有的key進(jìn)行排序
Vector類
Vector非常類似ArrayList,但是Vector是同步的
總結(jié)
1.如果涉及到堆棧,隊(duì)列等操作,應(yīng)該考慮用List,對于需要快速插入,刪除元素,應(yīng)該使用LinkedList,如果需要快速隨機(jī)訪問元素,應(yīng)該使用ArrayList。
2.如果程序在單線程環(huán)境中,或者訪問僅僅在一個線程中進(jìn)行,考慮非同步的類,其效率較高,如果多個線程可能同時操作一個類,應(yīng)該使用同步的類。
3.要特別注意對哈希表的操作,作為key的對象要正確復(fù)寫equals和hashCode方法。
4.盡量返回接口而非實(shí)際的類型,如返回List而非ArrayList,這樣如果以后需要將ArrayList換成LinkedList時,客戶端代碼不用改變。這就是針對抽象編程。
總結(jié)
以上是生活随笔為你收集整理的java 第二天,Java复习第二天的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 阿里云python服务器_Python服
- 下一篇: 计算机系统结构实验报告Linux,计算机