成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

JAVA快速復(fù)習(xí)

cppowboy / 479人閱讀

摘要:八種基本數(shù)據(jù)類型數(shù)組定義數(shù)組元素類型數(shù)組名元素類型元素個(gè)數(shù)和數(shù)組長度元素類型數(shù)組名元素類型元素元素元素元素內(nèi)存的劃分寄存器本地方法區(qū)方法區(qū)棧內(nèi)存存儲局部變量變量所屬作用域一旦結(jié)束變量自動釋放方法進(jìn)棧局部變量屬于方法所以方法要先進(jìn)棧堆內(nèi)存存儲

八種基本數(shù)據(jù)類型

byte

short

int

long

boolean

char

float

double

JAVA數(shù)組

定義數(shù)組

元素類型[] 數(shù)組名 = new 元素類型[元素個(gè)數(shù)和數(shù)組長度];

元素類型[] 數(shù)組名 = new 元素類型[]{元素1, 元素2, 元素3, 元素4};

JAVA內(nèi)存的劃分

寄存器

本地方法區(qū)

方法區(qū)

棧內(nèi)存

存儲局部變量, 變量所屬作用域一旦結(jié)束, 變量自動釋放

方法進(jìn)棧: 局部變量屬于方法, 所以方法要先進(jìn)棧

堆內(nèi)存

存儲對象, 凡是new建立的都在堆中

堆內(nèi)存中的對象都有一個(gè)默認(rèn)值, int:0, double:0.0, float:0.0f, boolean:false, char:"u0000", 引用類型: null

每一個(gè)實(shí)體都有首地址值

局部代碼塊

限定局部變量的生命周期, 釋放內(nèi)存空間

面向?qū)ο?/b> 成員變量和局部變量區(qū)別

成員變量定義在類中, 整個(gè)類中都可以訪問.

局部變量定義在函數(shù), 語句, 局部代碼塊中, 只在所屬區(qū)域中有效

成員變量存在堆內(nèi)存的對象中

局部變量存在棧內(nèi)存的方法中

成員變量隨著對象的創(chuàng)建而存在, 隨著對象的消失而消失

局部變量隨著所屬區(qū)域的執(zhí)行而存在, 隨著所屬區(qū)域的結(jié)束而釋放

成員變量有默認(rèn)初始化值

8. 局部變量沒有默認(rèn)初始化值

成員變量和靜態(tài)變量區(qū)別

靜態(tài)變量隨著類的創(chuàng)建而創(chuàng)建, 隨著對象的回收而釋放

2. 成員變量隨著對象的創(chuàng)建而創(chuàng)建, 隨著類的消失而消失

靜態(tài)變量可以直接被類調(diào)用

成員變量不可以直接被調(diào)用

靜態(tài)變量存儲在方法區(qū)(共享數(shù)據(jù)區(qū))的靜態(tài)區(qū), 也叫對象的共有數(shù)據(jù)

6. 成員變量存儲在對象的堆內(nèi)存中, 也叫對象的特有數(shù)據(jù)

匿名對象

當(dāng)對象對方法僅進(jìn)行一次調(diào)用時(shí), 就可以簡化為匿名對象

構(gòu)造函數(shù)

構(gòu)建創(chuàng)造對象時(shí)調(diào)用的函數(shù), 給對象初始化

this關(guān)鍵字

this代表著所在函數(shù)所屬對象的引用

this也可以用于在構(gòu)造函數(shù)中調(diào)用其他構(gòu)造函數(shù), 但應(yīng)該放在第一行, 初始化動作應(yīng)該最先執(zhí)行

static關(guān)鍵字

1. static修飾的成員被所有的對象共享

static優(yōu)先于對象創(chuàng)建, static和類一起被創(chuàng)建

static修飾的成員可以直接用類名調(diào)用

靜態(tài)變量

當(dāng)一個(gè)數(shù)據(jù)在對象中都是相同的時(shí)候且對象不做修改只做使用就可以使用靜態(tài)

靜態(tài)函數(shù)

當(dāng)函數(shù)不需要訪問對象中的特有數(shù)據(jù)也就是非靜態(tài)成員變量時(shí), 可以用靜態(tài)修飾

靜態(tài)
static{

}

隨著類的加載而加載, 而且只執(zhí)行一次, 用于給類初始化

構(gòu)造代碼塊
{

}

隨著對象的加載而加載, 創(chuàng)建幾個(gè)對象調(diào)用幾次, 給所有對象初始化

一個(gè)類不想被繼承且實(shí)現(xiàn)

定義為abstract, 構(gòu)造函數(shù)設(shè)為私有

單例設(shè)計(jì)模式

解決的問題: 保證一個(gè)類在內(nèi)存中的對象唯一性

不允許其他程序new對象

在該類中創(chuàng)建一個(gè)本類實(shí)例

對外提供方法去獲取該對象

步驟

私有化該類構(gòu)造函數(shù)

通過new在本類中創(chuàng)建一個(gè)本類對象

定義一個(gè)公有靜態(tài)方法, 返回對象

構(gòu)造函數(shù)

在子類構(gòu)造對象的時(shí)候, 父類構(gòu)造函數(shù)也會執(zhí)行, 子類構(gòu)造函數(shù)默認(rèn)會有一個(gè)隱式的super()去調(diào)用父類的空參的構(gòu)造函數(shù);

所有子類的構(gòu)造函數(shù)默認(rèn)都會訪問父類的空參構(gòu)造函數(shù)

子類實(shí)例化過程

子類先進(jìn)行默認(rèn)初始化再調(diào)用構(gòu)造函數(shù)

通過super初始化父類內(nèi)容時(shí), 子類成員變量并未顯示初始化

父類初始化完成

子類成員變量進(jìn)行顯示初始化

調(diào)用子類構(gòu)造代碼塊

執(zhí)行子類構(gòu)造函數(shù)

多態(tài)

Base b = new Super() 父類引用指向子類對象

成員變量:

編譯時(shí)參考父類引用

運(yùn)行時(shí)也參考父類引用

成員函數(shù):

編譯時(shí)參考父類引用

運(yùn)行時(shí)參考子類對象

靜態(tài)函數(shù)(不需要對象, 直接使用類調(diào)用, 所以其實(shí)不涉及多態(tài)):

編譯時(shí)參考父類引用

編譯時(shí)參考父類引用

異常

一般不可以處理的 Error

由JVM拋出的嚴(yán)重性的問題, 一般不予解決而是直接修改源碼

可以處理的 Exception

編譯時(shí)檢查異常, Exception和其子類, 除RuntimeException

運(yùn)行時(shí)異常, RuntimeException和其子類

自定義異常要么繼承Exception, 要么RuntimeException

throw用來引發(fā)異常, throws用來聲明異常

多線程

創(chuàng)建線程方式

繼承Thread類

定義一個(gè)類繼承Thread類

重寫Thread類的run方法

實(shí)例化Thread子類

使用start方法開啟線程并調(diào)用run方法

實(shí)現(xiàn)Runnable接口

定義一個(gè)類實(shí)現(xiàn)Runnable接口

實(shí)現(xiàn)Runnable接口中的run方法

實(shí)例化Thread類并傳入該類實(shí)例作為構(gòu)造函數(shù)的參數(shù)

使用start方法開啟新線程

多線程因?yàn)樘幚頇C(jī)的隨機(jī)分配, 可能會出現(xiàn)安全問題

同步代碼塊

語法

synchorized(對象){需要同步的代碼塊}

同步好處: 解決線程安全問題

同步弊端: 降低效率, 需要判斷一次同步鎖

同步前提: 多個(gè)線程使用同一個(gè)鎖

同步函數(shù)

在函數(shù)前加一個(gè)synchorized修飾符

和同步代碼塊區(qū)別在于需要同步的范圍不同, 想清楚需要同步的范圍之后再決定用同步代碼塊和同步函數(shù)

同步函數(shù)帶的鎖就是調(diào)用該函數(shù)的對象

多線程間通訊
使用等待喚醒機(jī)制
涉及的方法:

wait(): 線程處于凍結(jié)狀態(tài), 存儲到線程池中

notify():喚醒任意一個(gè)線程池中線程

notifyAll(): 喚醒線程池中所有線程

wait和sleep區(qū)別

wait可以傳入一個(gè)時(shí)間, 釋放執(zhí)行權(quán), 釋放鎖.

sleep必須指定一個(gè)時(shí)間, 釋放執(zhí)行權(quán), 不釋放鎖.

setDaemon設(shè)置為守護(hù)線程, 當(dāng)當(dāng)前運(yùn)行的所有線程為守護(hù)線程時(shí), 虛擬機(jī)退出

join方法, 線程執(zhí)行join方法后會獲得處理機(jī), 并當(dāng)前線程執(zhí)行結(jié)束后才釋放處理機(jī)

yield方法, 線程會重新進(jìn)入就緒狀態(tài)

setPriority方法設(shè)置線程的優(yōu)先級 可傳入MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY三個(gè)線程靜態(tài)字段

String String

在字符串建立時(shí), 內(nèi)存中有一個(gè)字符串常量池(緩沖區(qū)), 創(chuàng)建字符串時(shí), 在字符串常量池創(chuàng)建, 以后每次先尋找常量池中是否有字符串, 如果有直接指向即可, 不用重新創(chuàng)建字符串

使用new創(chuàng)建字符串時(shí), 在堆中創(chuàng)建一個(gè)String對象.

StringBuffer

長度可變, 默認(rèn)長度為16個(gè)字符

可以存儲不同類型數(shù)據(jù)

可以修改字符串

拓展長度原理
1. 在內(nèi)存中新建一個(gè)StringBuffer, 長度一般為原來的兩倍

將原數(shù)據(jù)全部拷貝到新StringBuffer內(nèi)

StringBuilder

和StringBuffer類似, 不過StringBuffer同步, StringBuilder不保證同步

集合框架 List

有序, 元素都有索引, 可以重復(fù)

ArrayList

內(nèi)部數(shù)據(jù)結(jié)構(gòu)為數(shù)組, 非同步, 新增和刪除效率低, 查找效率高

LinkedList

1. 內(nèi)部數(shù)據(jù)結(jié)構(gòu)為鏈表, 新增和刪除效率高, 查找效率低, 非同步

Vector

同步, 查找, 新增和刪除效率都低

Set

無序, 元素不允許重復(fù)

HashSet

內(nèi)部數(shù)據(jù)結(jié)構(gòu)為Hash表, 非同步

使用元素hashcode方法確定位置, 如果hashcode方法結(jié)果相同, 再通過equals方法確定是否相同

LinkedHashSet

在HashSet基礎(chǔ)上實(shí)現(xiàn)了存取有序

TreeSet

內(nèi)部數(shù)據(jù)結(jié)構(gòu)為二叉樹, 使用元素的自然順序?qū)υ剡M(jìn)行排序, 非同步

對于自定義對象, 讓元素自身具備比較功能, 應(yīng)該實(shí)現(xiàn)Comparable接口, 覆蓋compareTo方法進(jìn)行排序.

TreeSet排序第二種方法, 讓集合自身具備比較功能, 創(chuàng)建一個(gè)類實(shí)現(xiàn)Comparator接口, 覆蓋compare方法 并將其傳入TreeSet的構(gòu)造函數(shù), 在比較器和自然排序時(shí), 比較器優(yōu)先級較高

泛型

規(guī)定了傳入的參數(shù)類型, 避免轉(zhuǎn)換類型的麻煩, 在編譯時(shí)期檢查

在運(yùn)行時(shí)會將泛型進(jìn)行擦除, 即class文件中沒有泛型

當(dāng)方法定義為靜態(tài)時(shí), 不能使用類上定義的泛型, 只能將泛型定義在方法上

泛型限定

泛型的上限, 泛型能夠傳入Obj本身及其子類

泛型的下限, <?super Obj>泛型能夠傳入Obj本身及其父類

Map集合

KeySet方法獲取所有的鍵

entrySet方法獲取所有鍵值對

HashMap

內(nèi)部數(shù)據(jù)結(jié)構(gòu)為Hash表

非同步

允許鍵值對為null

HashTable

內(nèi)部數(shù)據(jù)結(jié)構(gòu)為Hash表

同步

不允許鍵值對為null

Propertites

用來存儲鍵值對類型的配置文件, HashTable的子類

TreeMap

內(nèi)部數(shù)據(jù)結(jié)構(gòu)為二叉樹

非同步

TreeSet實(shí)際上就是使用的TreeMap

I/O流 輸入和輸出

外設(shè)-->內(nèi)存: 輸入流

內(nèi)存-->外設(shè): 輸出流

字節(jié)流和字符流

字符流: 字節(jié)流先讀取文本數(shù)據(jù), 不直接操作, 而是先查詢指定編碼表

字節(jié)流: 直接讀取文本數(shù)據(jù)

I/O流常用基類

字節(jié)流頂層基類

InputStream

OutputStream

字節(jié)流頂層基類

Reader

Writer

字符流緩沖區(qū)

BufferedWriter

BufferReader

Serizalizable接口

用于給被序列化的類加入ID號, 可手動指定ID號

被static修飾的變量不會被序列化, 返回的值是當(dāng)前JVM的值, 而不是被序列化之后的值

transient被其修飾的變量也不會被Serizalizable序列化

反射 定義

在運(yùn)行狀態(tài)中, 對于任意一個(gè)類都能獲取到該類的屬性和方法

對于任意一個(gè)對象實(shí)例, 都能調(diào)用任意一個(gè)方法或?qū)傩?/p> 通過反射獲取Class對象

通過實(shí)例對象的getClass()獲取Class對象

Person person = new Person("小米", 20);
Class clazz = person.getClass();

通過類靜態(tài)成員.class獲取對應(yīng)的Class對象

Class clazz = Person.class;

Class對象的forName()通過類名獲取Class對象

Class clazz = Class.forName("Person");
通過反射獲取類字段
//      創(chuàng)建Class對象
Class clazz = Class.forName("Person");
//      創(chuàng)建空參新實(shí)例
Object object = clazz.newInstance();
//      獲取字段
Field field = clazz.getDeclaredField("age");
field.set(object, 20);
Object object1 = field.get(object);
System.out.println(object1);

通過以上代碼無法獲取或設(shè)置類中私有變量, 也不建議直接獲取類中私有變量, 如果想要強(qiáng)行獲取的話看下面代碼

Class clazz = Class.forName("Person");
//      創(chuàng)建空參新實(shí)例
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方法獲取指定名稱的方法, 第二個(gè)參數(shù)傳遞參數(shù)類型, 參數(shù)為int則傳遞int.class, 其他類似, 空參則傳遞null
Method method = clazz.getMethod("paramMethod", String.class, int.class);
//  獲取類實(shí)例
Object object = clazz.newInstance();
//  通過invoke方法調(diào)用方法
method.invoke(object, "九" + 9);
 四大作用域

pageContext: 生存周期最短, 當(dāng)前頁面加載結(jié)束即死亡

request:

session: 當(dāng)前瀏覽器關(guān)閉死亡, 當(dāng)?shù)竭_(dá)一個(gè)最大時(shí)間時(shí), 服務(wù)器才刪除session, 并不一定在瀏覽器關(guān)閉時(shí)session立刻死亡 request.getsession()而不是response.getsession()理由: 客戶端發(fā)送請求時(shí), request會帶上session頭, 服務(wù)器再根據(jù)session頭尋找對應(yīng)session.

application: 生存周期最長, 服務(wù)器關(guān)閉時(shí)才死亡

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/71167.html

相關(guān)文章

  • 跳槽季如何快速全面復(fù)習(xí)面試題

    摘要:排序算法和集合工具類排序算法和集合工具類。面試官總是問排序算法也不是在難為你,而是在考察你的編程功底。你首先要理解多線程不僅僅是和那么簡單,整個(gè)并發(fā)包下面的工具都是在為多線程服務(wù)。 去年的這個(gè)時(shí)候樓主通過兩個(gè)月的復(fù)習(xí)拿到了阿里巴巴的 offer,有一些運(yùn)氣,也有一些心得,借著跳槽季來臨特此分享出來。簡單梳理一下我的復(fù)習(xí)思路,同時(shí)也希望和大家一起交流討論,一起學(xué)習(xí),如果不對之處歡迎指正一...

    keke 評論0 收藏0
  • Part1程序設(shè)計(jì)基礎(chǔ)(Java語言程序設(shè)計(jì)(10th))

    摘要:緣起這是語言程序設(shè)計(jì)的,計(jì)劃之前全部整理完。產(chǎn)生隨機(jī)數(shù)的方法。復(fù)習(xí)題雙分支語句復(fù)習(xí)題嵌套的語句和多分支語句復(fù)習(xí)題常見錯誤和陷阱常見錯誤兩個(gè)浮點(diǎn)數(shù)值的相等測試復(fù)習(xí)題產(chǎn)生隨機(jī)數(shù)產(chǎn)生一個(gè)到之間的隨機(jī)值,不包括。 緣起 這是《Java語言程序設(shè)計(jì)(10th)》的Part1,計(jì)劃2017-12-31之前全部整理完。 2017-12-23開始想看這本書的,并同時(shí)開始實(shí)踐起Java來的。 Part...

    BDEEFE 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<