成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

JAVA快速復習

cppowboy / 509人閱讀

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

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

byte

short

int

long

boolean

char

float

double

JAVA數(shù)組

定義數(shù)組

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

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

JAVA內(nèi)存的劃分

寄存器

本地方法區(qū)

方法區(qū)

棧內(nèi)存

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

方法進棧: 局部變量屬于方法, 所以方法要先進棧

堆內(nèi)存

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

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

每一個實體都有首地址值

局部代碼塊

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

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

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

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

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

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

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

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

成員變量有默認初始化值

8. 局部變量沒有默認初始化值

成員變量和靜態(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ù)

匿名對象

當對象對方法僅進行一次調(diào)用時, 就可以簡化為匿名對象

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

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

this關(guān)鍵字

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

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

static關(guān)鍵字

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

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

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

靜態(tài)變量

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

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

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

靜態(tài)
static{

}

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

構(gòu)造代碼塊
{

}

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

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

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

單例設計模式

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

不允許其他程序new對象

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

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

步驟

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

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

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

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

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

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

子類實例化過程

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

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

父類初始化完成

子類成員變量進行顯示初始化

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

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

多態(tài)

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

成員變量:

編譯時參考父類引用

運行時也參考父類引用

成員函數(shù):

編譯時參考父類引用

運行時參考子類對象

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

編譯時參考父類引用

編譯時參考父類引用

異常

一般不可以處理的 Error

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

可以處理的 Exception

編譯時檢查異常, Exception和其子類, 除RuntimeException

運行時異常, RuntimeException和其子類

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

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

多線程

創(chuàng)建線程方式

繼承Thread類

定義一個類繼承Thread類

重寫Thread類的run方法

實例化Thread子類

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

實現(xiàn)Runnable接口

定義一個類實現(xiàn)Runnable接口

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

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

使用start方法開啟新線程

多線程因為處理機的隨機分配, 可能會出現(xiàn)安全問題

同步代碼塊

語法

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

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

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

同步前提: 多個線程使用同一個鎖

同步函數(shù)

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

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

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

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

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

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

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

wait和sleep區(qū)別

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

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

setDaemon設置為守護線程, 當當前運行的所有線程為守護線程時, 虛擬機退出

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

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

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

String String

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

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

StringBuffer

長度可變, 默認長度為16個字符

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

可以修改字符串

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

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

StringBuilder

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

集合框架 List

有序, 元素都有索引, 可以重復

ArrayList

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

LinkedList

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

Vector

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

Set

無序, 元素不允許重復

HashSet

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

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

LinkedHashSet

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

TreeSet

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

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

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

泛型

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

在運行時會將泛型進行擦除, 即class文件中沒有泛型

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

泛型限定

泛型的上限, 泛型能夠傳入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實際上就是使用的TreeMap

I/O流 輸入和輸出

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

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

字節(jié)流和字符流

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

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

I/O流常用基類

字節(jié)流頂層基類

InputStream

OutputStream

字節(jié)流頂層基類

Reader

Writer

字符流緩沖區(qū)

BufferedWriter

BufferReader

Serizalizable接口

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

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

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

反射 定義

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

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

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

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

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

Class clazz = Person.class;

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

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

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

request:

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

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

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

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

相關(guān)文章

  • 跳槽季如何快速全面復習面試題

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

    keke 評論0 收藏0
  • Part1程序設計基礎(Java語言程序設計(10th))

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

    BDEEFE 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<