国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JAVA快速復習

cppowboy / 470人閱讀

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

八種基本數據類型

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

內部數據結構為數組, 非同步, 新增和刪除效率低, 查找效率高

LinkedList

1. 內部數據結構為鏈表, 新增和刪除效率高, 查找效率低, 非同步

Vector

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

Set

無序, 元素不允許重復

HashSet

內部數據結構為Hash表, 非同步

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

LinkedHashSet

在HashSet基礎上實現了存取有序

TreeSet

內部數據結構為二叉樹, 使用元素的自然順序對元素進行排序, 非同步

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

TreeSet排序第二種方法, 讓集合自身具備比較功能, 創建一個類實現Comparator接口, 覆蓋compare方法 并將其傳入TreeSet的構造函數, 在比較器和自然排序時, 比較器優先級較高

泛型

規定了傳入的參數類型, 避免轉換類型的麻煩, 在編譯時期檢查

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

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

泛型限定

泛型的上限, 泛型能夠傳入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,有一些運氣,也有一些心得,借著跳槽季來臨特此分享出來。簡單梳理一下我的復習思路,同時也希望和大家一起交流討論,一起學習,如果不對之處歡迎指正一...

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

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

    BDEEFE 評論0 收藏0

發表評論

0條評論

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