国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

【java】雜記2

2019-11-06 07:37:59
字體:
來源:轉載
供稿:網友

1.Arrays.asList() 將一個數組轉化為一個List對象,這個方法會返回一個ArrayList類型的對象, 這個ArrayList類并非java.util.ArrayList類,而是Arrays類的靜態內部類!用這個對象對列表進行添加刪除更新操作,就會報UnsupportedOperationException異常。 2.ConcurrentHashMap使用segment來分段和管理鎖,segment繼承自ReentrantLock,因此ConcurrentHashMap使用ReentrantLock來保證線程安全。 3.SimpleDateFormat對象是線程不安全的,Date formats are not synchronized. It is recommended to create separate format instances for each thread. If multiple threads access a format concurrently, it must be synchronized externally. 4. “ThreadLocal存放的值是線程封閉,線程間互斥的”這個在《java并發編程》P.37面有講 “主要用于線程內共享一些數據,避免通過參數來傳遞” 我們通過hibernate的例子,可以看出 這個session在不同線程中是不同的,但是在同一個線程中是相同的。 可以直接通過getSession獲取實例,所以避免了參數傳遞,實現線程內共享。

PRivate static final ThreadLocal threadSession = new ThreadLocal(); public static Session getSession() throws InfrastructureException { Session s = (Session) threadSession.get(); try { if (s == null) { s = getSessionFactory().openSession(); threadSession.set(s); } } catch (HibernateException ex) { throw new InfrastructureException(ex); } return s; }

在Thread中有一個成員變量ThreadLocals,該變量的類型是ThreadLocalMap,也就是一個Map,它的鍵是threadLocal,值為就是變量的副本。通過ThreadLocal的get()方法可以獲取該線程變量的本地副本,在get方法之前要先set,否則就要重寫initialValue()方法。 ThreadLocal的使用場景: 數據庫連接:在多線程中,如果使用懶漢式的單例模式創建Connection對象,由于該對象是共享的,那么必須要使用同步方法保證線程安全,這樣當一個線程在連接數據庫時,那么另外一個線程只能等待。這樣就造成性能降低。如果改為哪里要連接數據庫就來進行連接,那么就會頻繁的對數據庫進行連接,性能還是不高。這時使用ThreadLocal就可以既可以保證線程安全又可以讓性能不會太低。但是ThreadLocal的缺點時占用了較多的空間。

5.Ant和Maven都是基于Java的構建(build)工具。理論上來說,有些類似于(Unix)C中的make ,但沒有make的缺陷。Ant是軟件構建工具,Maven的定位是軟件項目管理和理解工具。 Ant特點 ? 沒有一個約定的目錄結構 ?必須明確讓ant做什么,什么時候做,然后編譯,打包 ?沒有生命周期,必須定義目標及其實現的任務序列(buile.xml) ?沒有集成依賴管理 Maven特點 ?擁有約定,知道你的代碼在哪里,放到哪里去 ?擁有一個生命周期,例如執行 mvn install 就可以自動執行編譯,測試,打包等構建過程 ?只需要定義一個pom.xml,然后把源碼放到默認的目錄,Maven幫你處理其他事情 ?擁有依賴管理,倉庫管理

6.截止JDK1.8版本,java并發框架支持鎖包括讀寫鎖,自旋鎖,樂觀鎖

7.在static{}代碼塊中使用的靜態變量必須在static{}代碼塊之前被定義。在靜態方法中則不需要。

8.getParameter()是獲取POST/GET傳遞的參數值; getInitParameter獲取Tomcat的server.xml中設置Context的初始化參數 getAttribute()是獲取對象容器中的數據值; getRequestDispatcher是請求轉發。

9.java集合框架 這里寫圖片描述

10.中間件是一種獨立的系統軟件或服務程序,分布式應用軟件借助這種軟件在不同的技術之間共享資源。中間件位于客戶機/ 服務器的操作系統之上,管理計算機資源和網絡通訊。是連接兩個獨立應用程序或獨立系統的軟件。相連接的系統,即使它們具有不同的接口,但通過中間件相互之間仍能交換信息。執行中間件的一個關鍵途徑是信息傳遞。通過中間件,應用程序可以工作于多平臺或OS環境。

11.AWT :是通過調用操作系統的native方法實現的,所以在Windows系統上的AWT窗口就是Windows的風格,而在Unix系統上的則是XWindow風格。 AWT 中的圖形函數與 操作系統 所提供的圖形函數之間有著一一對應的關系,我們把它稱為peers。 也就是說,當我們利用 AWT 來構件圖形用戶界面的時候,我們實際上是在利用 操作系統 所提供的圖形庫。由于不同 操作系統 的圖形庫所提供的功能是不一樣的,在一個平臺上存在的功能在另外一個平臺上則可能不存在。為了實現Java語言所宣稱的”一次編譯,到處運行”的概念,AWT 不得不通過犧牲功能來實現其平臺無關性,也就是說,AWT 所提供的圖形功能是各種通用型操作系統所提供的圖形功能的交集。由于AWT 是依靠本地方法來實現其功能的,我們通常把AWT控件稱為重量級控件。 Swing :是所謂的Lightweight組件,不是通過native方法來實現的,所以Swing的窗口風格更多樣化。但是,Swing里面也有heaveyweight組件。比如JWindow,Dialog,JFrame Swing是所謂的Lightweight組件,不是通過native方法來實現的,所以Swing的窗口風格更多樣化。但是,Swing里面也有heaveyweight組件。比如JWindow,Dialog,JFrame Swing由純Java寫成,可移植性好,外觀在不同平臺上相同。所以Swing部件稱為輕量級組件( Swing是由純JAVA CODE所寫的,因此SWING解決了JAVA因窗口類而無法跨平臺的問題,使窗口功能也具有跨平臺與延展性的特性,而且SWING不需占有太多系統資源,因此稱為輕量級組件!!!)

12.CallableStatement繼承自PreparedSatement,PreparedStatement繼承自Statement

13.Java中有關servlet的層級結構和常用的類的描述: 1. GenericServlet類:抽象類,定義一個通用的、獨立于底層協議的Servlet。 2. 大多數Servlet通過從GenericServlet或HttpServlet類進行擴展來實現 3. ServletConfig接口定義了在Servlet初始化的過程中由Servlet容器傳遞給Servlet得配置信息對象 4. HttpServletRequest接口擴展ServletRequest接口,為HTTP Servlet提供HTTP請求信息 HttpServlet是GenericServlet的子類。 GenericServlet是個抽象類,必須給出子類才能實例化。它給 出了設計servlet的一些骨架,定義了servlet生命周期,還有一些得到名字、配置、初始化參數的方法,其設計的是和應用層協議無關的,也就是說 你有可能用非http協議實現它。 HttpServlet是子類,當然就具有GenericServlet的一切特性,還添加了doGet, doPost, doDelete, doPut, doTrace等方法對應處理http協議里的命令的請求響應過程。 一般沒有特殊需要,自己寫的Servlet都擴展HttpServlet 。

14.

public enum Color{ RED,BLUE,BLACK,YELLOW,GREEN }

顯然,enum很像特殊的class,實際上enum聲明定義的類型就是一個類。 而這些類都是類庫中Enum類的子類(java.lang.Enum)。它們繼承了這個Enum中的許多有用的方法。我們對代碼編譯之后發現,編譯器將enum類型單獨編譯成了一個字節碼文件:Color.class。 給 enum 自定義屬性和方法:

public enum EnumTest { MON(1), TUE(2), WED(3), THU(4), FRI(5), SAT(6) { @Override public boolean isRest() { return true; } }, SUN(0) { @Override public boolean isRest() { return true; } }; private int value; private EnumTest(int value) { this.value = value; } public int getValue() { return value; } public boolean isRest() { return false; }}

枚舉類的構造器只在構造枚舉常量時被調用。

15.枚舉類在后臺實現時,實際上是轉化為一個繼承了java.lang.Enum類的實體類,原先的枚舉類型變成對應的實體類型,上例中AccountType變成了個class AccountType,并且會生成一個新的構造函數,若原來有構造函數,則在此基礎上添加兩個參數,生成新的構造函數,如上例子中:

private AccountType(){ System.out.println(“It is a account type”); } 會變成:

private AccountType(String s, int i){ super(s,i); System.out.println(“It is a account type”); } 而在這個類中,會添加若干字段來代表具體的枚舉類型:

public static final AccountType SAVING; public static final AccountType FIXED; public static final AccountType CURRENT;

而且還會添加一段static代碼段: static{ SAVING = new AccountType("SAVING", 0); ... CURRENT = new AccountType("CURRENT", 0); $VALUES = new AccountType[]{ SAVING, FIXED, CURRENT } } 以此來初始化枚舉中的每個具體類型。(并將所有具體類型放到一個$VALUE數組中,以便用序號訪問具體類型) 在初始化過程中new AccountType構造函數被調用了三次,所以Enum中定義的構造函數中的打印代碼被執行了3遍。

16.100對3取余,兩者都是int型,所以結果也是int型,也就是1 100對3.0取余,虛擬機會對100進行轉換,轉換成100.0,也就是float型,結果也就是float型,也就是1.0


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临夏县| 呼和浩特市| 无为县| 钟祥市| 城步| 仙桃市| 乡宁县| 桂阳县| 贵德县| 富阳市| 南康市| 榆林市| 木里| 广西| 桂阳县| 北安市| 枣强县| 沙坪坝区| 金昌市| 廊坊市| 个旧市| 封开县| 奇台县| 湖州市| 榆林市| 盐亭县| 漠河县| 乌兰浩特市| 万山特区| 昌都县| 红原县| 仙桃市| 伊宁市| 荆门市| 台南市| 弋阳县| 南岸区| 平山县| 关岭| 边坝县| 台江县|