摘要:八種基本數據類型數組定義數組元素類型數組名元素類型元素個數和數組長度元素類型數組名元素類型元素元素元素元素內存的劃分寄存器本地方法區方法區棧內存存儲局部變量變量所屬作用域一旦結束變量自動釋放方法進棧局部變量屬于方法所以方法要先進棧堆內存存儲
八種基本數據類型
byte
short
int
long
boolean
char
float
double
JAVA數組
定義數組
元素類型[] 數組名 = new 元素類型[元素個數和數組長度];
元素類型[] 數組名 = new 元素類型[]{元素1, 元素2, 元素3, 元素4};
JAVA內存的劃分寄存器
本地方法區
方法區
棧內存
存儲局部變量, 變量所屬作用域一旦結束, 變量自動釋放
方法進棧: 局部變量屬于方法, 所以方法要先進棧
堆內存
存儲對象, 凡是new建立的都在堆中
堆內存中的對象都有一個默認值, int:0, double:0.0, float:0.0f, boolean:false, char:"u0000", 引用類型: null
每一個實體都有首地址值
局部代碼塊限定局部變量的生命周期, 釋放內存空間
面向對象 成員變量和局部變量區別成員變量定義在類中, 整個類中都可以訪問.
局部變量定義在函數, 語句, 局部代碼塊中, 只在所屬區域中有效
成員變量存在堆內存的對象中
局部變量存在棧內存的方法中
成員變量隨著對象的創建而存在, 隨著對象的消失而消失
局部變量隨著所屬區域的執行而存在, 隨著所屬區域的結束而釋放
成員變量有默認初始化值
8. 局部變量沒有默認初始化值
成員變量和靜態變量區別靜態變量隨著類的創建而創建, 隨著對象的回收而釋放
2. 成員變量隨著對象的創建而創建, 隨著類的消失而消失
靜態變量可以直接被類調用
成員變量不可以直接被調用
靜態變量存儲在方法區(共享數據區)的靜態區, 也叫對象的共有數據
6. 成員變量存儲在對象的堆內存中, 也叫對象的特有數據
匿名對象當對象對方法僅進行一次調用時, 就可以簡化為匿名對象
構造函數構建創造對象時調用的函數, 給對象初始化
this關鍵字this代表著所在函數所屬對象的引用
this也可以用于在構造函數中調用其他構造函數, 但應該放在第一行, 初始化動作應該最先執行
static關鍵字1. static修飾的成員被所有的對象共享
static優先于對象創建, static和類一起被創建
static修飾的成員可以直接用類名調用
靜態變量當一個數據在對象中都是相同的時候且對象不做修改只做使用就可以使用靜態
靜態函數當函數不需要訪問對象中的特有數據也就是非靜態成員變量時, 可以用靜態修飾
靜態static{ }
隨著類的加載而加載, 而且只執行一次, 用于給類初始化
構造代碼塊{ }
隨著對象的加載而加載, 創建幾個對象調用幾次, 給所有對象初始化
一個類不想被繼承且實現定義為abstract, 構造函數設為私有
單例設計模式
解決的問題: 保證一個類在內存中的對象唯一性
不允許其他程序new對象
在該類中創建一個本類實例
對外提供方法去獲取該對象
步驟
私有化該類構造函數
通過new在本類中創建一個本類對象
定義一個公有靜態方法, 返回對象
構造函數在子類構造對象的時候, 父類構造函數也會執行, 子類構造函數默認會有一個隱式的super()去調用父類的空參的構造函數;
所有子類的構造函數默認都會訪問父類的空參構造函數
子類實例化過程子類先進行默認初始化再調用構造函數
通過super初始化父類內容時, 子類成員變量并未顯示初始化
父類初始化完成
子類成員變量進行顯示初始化
調用子類構造代碼塊
執行子類構造函數
多態Base b = new Super() 父類引用指向子類對象
成員變量:
編譯時參考父類引用
運行時也參考父類引用
成員函數:
編譯時參考父類引用
運行時參考子類對象
靜態函數(不需要對象, 直接使用類調用, 所以其實不涉及多態):
編譯時參考父類引用
編譯時參考父類引用
異常
一般不可以處理的 Error
由JVM拋出的嚴重性的問題, 一般不予解決而是直接修改源碼
可以處理的 Exception
編譯時檢查異常, Exception和其子類, 除RuntimeException
運行時異常, RuntimeException和其子類
自定義異常要么繼承Exception, 要么RuntimeException
throw用來引發異常, throws用來聲明異常
多線程
創建線程方式
繼承Thread類
定義一個類繼承Thread類
重寫Thread類的run方法
實例化Thread子類
使用start方法開啟線程并調用run方法
實現Runnable接口
定義一個類實現Runnable接口
實現Runnable接口中的run方法
實例化Thread類并傳入該類實例作為構造函數的參數
使用start方法開啟新線程
多線程因為處理機的隨機分配, 可能會出現安全問題
同步代碼塊
語法
synchorized(對象){需要同步的代碼塊}
同步好處: 解決線程安全問題
同步弊端: 降低效率, 需要判斷一次同步鎖
同步前提: 多個線程使用同一個鎖
同步函數
在函數前加一個synchorized修飾符
和同步代碼塊區別在于需要同步的范圍不同, 想清楚需要同步的范圍之后再決定用同步代碼塊和同步函數
同步函數帶的鎖就是調用該函數的對象
多線程間通訊
使用等待喚醒機制
涉及的方法:
wait(): 線程處于凍結狀態, 存儲到線程池中
notify():喚醒任意一個線程池中線程
notifyAll(): 喚醒線程池中所有線程
wait和sleep區別
wait可以傳入一個時間, 釋放執行權, 釋放鎖.
sleep必須指定一個時間, 釋放執行權, 不釋放鎖.
setDaemon設置為守護線程, 當當前運行的所有線程為守護線程時, 虛擬機退出
join方法, 線程執行join方法后會獲得處理機, 并當前線程執行結束后才釋放處理機
yield方法, 線程會重新進入就緒狀態
setPriority方法設置線程的優先級 可傳入MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY三個線程靜態字段
String String在字符串建立時, 內存中有一個字符串常量池(緩沖區), 創建字符串時, 在字符串常量池創建, 以后每次先尋找常量池中是否有字符串, 如果有直接指向即可, 不用重新創建字符串
使用new創建字符串時, 在堆中創建一個String對象.
StringBuffer長度可變, 默認長度為16個字符
可以存儲不同類型數據
可以修改字符串
拓展長度原理
1. 在內存中新建一個StringBuffer, 長度一般為原來的兩倍
將原數據全部拷貝到新StringBuffer內
StringBuilder和StringBuffer類似, 不過StringBuffer同步, StringBuilder不保證同步
集合框架 List有序, 元素都有索引, 可以重復
ArrayList內部數據結構為數組, 非同步, 新增和刪除效率低, 查找效率高
LinkedList1. 內部數據結構為鏈表, 新增和刪除效率高, 查找效率低, 非同步
Vector同步, 查找, 新增和刪除效率都低
Set無序, 元素不允許重復
HashSet內部數據結構為Hash表, 非同步
使用元素hashcode方法確定位置, 如果hashcode方法結果相同, 再通過equals方法確定是否相同
LinkedHashSet在HashSet基礎上實現了存取有序
TreeSet內部數據結構為二叉樹, 使用元素的自然順序對元素進行排序, 非同步
對于自定義對象, 讓元素自身具備比較功能, 應該實現Comparable接口, 覆蓋compareTo方法進行排序.
TreeSet排序第二種方法, 讓集合自身具備比較功能, 創建一個類實現Comparator接口, 覆蓋compare方法 并將其傳入TreeSet的構造函數, 在比較器和自然排序時, 比較器優先級較高
泛型規定了傳入的參數類型, 避免轉換類型的麻煩, 在編譯時期檢查
在運行時會將泛型進行擦除, 即class文件中沒有泛型
當方法定義為靜態時, 不能使用類上定義的泛型, 只能將泛型定義在方法上
泛型限定泛型的上限, extend Obj>泛型能夠傳入Obj本身及其子類
泛型的下限, <?super Obj>泛型能夠傳入Obj本身及其父類
Map集合KeySet方法獲取所有的鍵
entrySet方法獲取所有鍵值對
HashMap內部數據結構為Hash表
非同步
允許鍵值對為null
HashTable內部數據結構為Hash表
同步
不允許鍵值對為null
Propertites用來存儲鍵值對類型的配置文件, HashTable的子類
TreeMap
內部數據結構為二叉樹
非同步
TreeSet實際上就是使用的TreeMap
I/O流 輸入和輸出外設-->內存: 輸入流
內存-->外設: 輸出流
字節流和字符流字符流: 字節流先讀取文本數據, 不直接操作, 而是先查詢指定編碼表
字節流: 直接讀取文本數據
I/O流常用基類
字節流頂層基類
InputStream
OutputStream
字節流頂層基類
Reader
Writer
字符流緩沖區BufferedWriter
BufferReader
Serizalizable接口用于給被序列化的類加入ID號, 可手動指定ID號
被static修飾的變量不會被序列化, 返回的值是當前JVM的值, 而不是被序列化之后的值
transient被其修飾的變量也不會被Serizalizable序列化
反射 定義在運行狀態中, 對于任意一個類都能獲取到該類的屬性和方法
對于任意一個對象實例, 都能調用任意一個方法或屬性
通過反射獲取Class對象通過實例對象的getClass()獲取Class對象
Person person = new Person("小米", 20); Class clazz = person.getClass();
通過類靜態成員.class獲取對應的Class對象
Class clazz = Person.class;
Class對象的forName()通過類名獲取Class對象
Class clazz = Class.forName("Person");通過反射獲取類字段
// 創建Class對象 Class clazz = Class.forName("Person"); // 創建空參新實例 Object object = clazz.newInstance(); // 獲取字段 Field field = clazz.getDeclaredField("age"); field.set(object, 20); Object object1 = field.get(object); System.out.println(object1);
通過以上代碼無法獲取或設置類中私有變量, 也不建議直接獲取類中私有變量, 如果想要強行獲取的話看下面代碼
Class clazz = Class.forName("Person"); // 創建空參新實例 Object object = clazz.newInstance(); // 獲取字段 Field field = clazz.getDeclaredField("age"); // 對私有字段的訪問取消檢查, 不建議使用 field.setAccessible(true); field.set(object, 20); Object object1 = field.get(object); System.out.println(object1);通過反射獲取類中方法
// 通過反射獲取class對象 Class clazz = Class.forName("Person"); // 通過getMethod方法獲取指定名稱的方法, 第二個參數傳遞參數類型, 參數為int則傳遞int.class, 其他類似, 空參則傳遞null Method method = clazz.getMethod("paramMethod", String.class, int.class); // 獲取類實例 Object object = clazz.newInstance(); // 通過invoke方法調用方法 method.invoke(object, "九" + 9);四大作用域
pageContext: 生存周期最短, 當前頁面加載結束即死亡
request:
session: 當前瀏覽器關閉死亡, 當到達一個最大時間時, 服務器才刪除session, 并不一定在瀏覽器關閉時session立刻死亡 request.getsession()而不是response.getsession()理由: 客戶端發送請求時, request會帶上session頭, 服務器再根據session頭尋找對應session.
application: 生存周期最長, 服務器關閉時才死亡
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/71167.html
摘要:排序算法和集合工具類排序算法和集合工具類。面試官總是問排序算法也不是在難為你,而是在考察你的編程功底。你首先要理解多線程不僅僅是和那么簡單,整個并發包下面的工具都是在為多線程服務。 去年的這個時候樓主通過兩個月的復習拿到了阿里巴巴的 offer,有一些運氣,也有一些心得,借著跳槽季來臨特此分享出來。簡單梳理一下我的復習思路,同時也希望和大家一起交流討論,一起學習,如果不對之處歡迎指正一...
摘要:緣起這是語言程序設計的,計劃之前全部整理完。產生隨機數的方法。復習題雙分支語句復習題嵌套的語句和多分支語句復習題常見錯誤和陷阱常見錯誤兩個浮點數值的相等測試復習題產生隨機數產生一個到之間的隨機值,不包括。 緣起 這是《Java語言程序設計(10th)》的Part1,計劃2017-12-31之前全部整理完。 2017-12-23開始想看這本書的,并同時開始實踐起Java來的。 Part...
閱讀 1755·2021-11-18 13:20
閱讀 1140·2021-10-11 10:59
閱讀 2986·2021-08-24 10:01
閱讀 3499·2019-08-29 14:21
閱讀 3351·2019-08-29 14:15
閱讀 3512·2019-08-26 12:23
閱讀 3342·2019-08-26 11:46
閱讀 3344·2019-08-26 11:35