日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

父类一实现serializable_我的java基础学习易错点和易忘点总结(一)

發布時間:2023/12/1 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 父类一实现serializable_我的java基础学习易错点和易忘点总结(一) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一.繼承

A:子類只能繼承父類所有非私有的成員(成員方法和成員變量)

B:子類不能繼承父類的構造方法,但是可以通過super關鍵字去訪問父類構造方法。

二.繼承中構造方法的關系

A:子類中所有的構造方法默認都會訪問父類中空參數的構造方法

B:為什么呢?

因為子類會繼承父類中的數據,可能還會使用父類的數據。

所以,子類初始化之前,一定要先完成父類數據的初始化。

注意:子類每一個構造方法的第一條語句默認都是:super();

三.重載和重寫

方法重寫:子類中出現了和父類中方法聲明一模一樣的方法。

方法重載:本類中出現的方法名一樣,參數列表不同的方法。與返回值無關。

四.代碼塊

一個類的靜態代碼塊,構造代碼塊,構造方法的執行流程:

靜態代碼塊(一次) > 構造代碼塊(構造一次走一次) > 構造方法(調用一次走一次)

五.多態

多態中的成員訪問特點:

A:成員變量

編譯看左邊,運行看左邊。

B:構造方法

創建子類對象的時候,訪問父類的構造方法,對父類的數據進行初始化。

C:成員方法

編譯看左邊,運行看右邊。

D:靜態方法

編譯看左邊,運行看左邊。

(靜態和類相關,算不上重寫,所以,訪問還是左邊的)

**成員變量僅僅是該事物的外在(父類)特征描述,而成員方法是該事物的內在(子類)功能描述**

**由于成員方法存在方法重寫,所以它運行看右邊。**

巧妙理解:

父親雇了兒子去干活,(多態方式創建對象)

要用的工具和資源是父親的,(工具和資源表示父類的成員變量,所以訪問成員變量時是訪問的父類成員變量)

干什么活是父親決定的,(干活表示成員方法,子類新增的成員方法父類不可以訪問)

而干活方式是兒子自己的,與父親的方式無關,(干活指成員方法,子類重寫了父類的成員方法,所以運行看子類的成員方法)

六.接口

成員變量;只能是常量,并且是靜態的。

常量:1.因為接口是不能實例化的也就是不能被初始化,所以必須是常量

2.不能實例化,所有實現類都共有一份,避免別的實現類修改這個值

靜態:1.接口沒有對象,所以要用類名來訪問,那就是靜態嘍;當多實現時同名的變量名也避免了歧義

2.不能實例化,所有實現類都共有一份

默認修飾符:public static final

建議:自己手動給出。

構造方法:接口沒有構造方法。(不能實例化)

成員方法:只能是抽象方法。

默認修飾符:public abstract

建議:自己手動給出。

七.抽象類和接口的區別:

A:成員區別

抽象類:

成員變量:可以變量,也可以常量

構造方法:有

成員方法:可以抽象,也可以非抽象

接口:

成員變量:只可以常量

構造方法:無

成員方法:只可以抽象

B:關系區別

類與類

繼承,單繼承

類與接口

實現,單實現,多實現

接口與接口

繼承,單繼承,多繼承

C:設計理念區別

抽象類 被繼承體現的是:”is a”的關系。抽象類中定義的是該繼承體系的共性功能。

接口 被實現體現的是:”like a”的關系。接口中定義的是該繼承體系的擴展功能。

抽象的概念是將不可變的提取出來封裝到一起,將可變的東西放到現實中去。

接口的設計理念是高層抽象,全部不可變。

八.toString

* public String toString():返回該對象的字符串表示。

* this.toString() = this.getClass().getName()+'@'+Integer.toHexString(this.hashCode());

* 例如:cn.itcast_02.Student@42552c

九.異常

1:如果catch里面有return語句,請問finally里面的代碼還會執行嗎?

如果會,請問是在return前,還是return后。

會。前。準確的說,應該是在中間。

2.throw是業務型異常。throws是方法聲明異常。try是捕獲異常。

3:try...catch...finally的格式變形

A:try...catch...finally

B:try...catch

C:try...catch...catch...

D:try...catch...catch...finally

E:try...finally

這種做法的目前是為了釋放資源。

4. 異常注意事項:

A:子類重寫父類方法時,子類的方法必須拋出相同的異常或父類異常的子類。(父親壞了,兒子不能比父親更壞)

B:如果父類拋出了多個異常,子類重寫父類時,只能拋出相同的異常或者是他的子集,子類不能拋出父類沒有的異常

C:如果被重寫的方法沒有異常拋出,那么子類的方法絕對不可以拋出異常,如果子類方法內有異常發生,那么子類只能try,不能throws

十.String

1.不可變性:改變其值時,只是改變了字符串常量池中的指向,實際的值是沒有變化的。

2. 前者創建一個對象,后者創建兩個對象

new String會現在常量池中查看有沒有這個字符串長量,有的話復制到堆內存中,沒有就在常量池中創建并復制堆內存

3. 字符串如果是變量相加:先開空間在拼接

字符串如果常量相加:是先加在常量池里找,如果有就直接返回,沒有就創建

十一.常用類

1.StringBuffer:線程安全的可變字符串、StringBuilder:線程不安全的可變字符串

2. * int -- String:String.valueOf(number); * String -- int:Integer.parseInt(s)

3.Math:int number = (int) (Math.random() * (end - start + 1)) + start;//生成一個在任意范圍的隨機數

4.Random類:

public Random():沒有給種子,用的是默認種子,是當前時間的毫秒值

public Random(long seed):給出指定的種子,給定種子后,每次得到的隨機數是相同的。

public int nextInt():返回的是int范圍內的隨機數

public int nextInt(int n):返回的是[0,n)范圍的內隨機數

十二.泛型和集合類

1.泛型使用:

1.泛型定義在類名上:public class ObjectTool {}

2.泛型定義在方法上:public void show(T t) {}

3.泛型定義在接口上:public interface Inter {}public class InterImpl implements Inter {}

4.通配符:

* ?:任意類型,如果沒有明確,那么就是Object以及任意的Java類了:>

* ? extends E:向下限定,E及其子類: extends Animal>

* ? super E:向上限定,E極其父類: super Animal>

2.ConcurrentModificationException:當方法檢測到對象的并發修改,但不允許這種修改時,拋出此異常。

產生的原因:

迭代器是依賴于集合而存在的,在判斷成功后,集合的中新添加了元素,而迭代器卻不知道,所以就報錯了,這個錯叫并發修改異常。

其實這個問題描述的是:迭代器遍歷元素的時候,通過集合是不能修改元素的。

解決辦法:

A:迭代器迭代元素,迭代器修改元素

元素是跟在剛才迭代的元素后面的。

B:集合遍歷元素,集合修改元素(普通for)

元素在最后添加的。

3. JDK5的新特性:自動拆裝箱,泛型,增強for,靜態導入,可變參數,枚舉

4.List集合的排序方式:

Collections提供兩種排序方法:

1.Collections.sort(List list);

此方法需要泛型T這個Bean實現Comparable接口,并且實現compareTo()方法排序;

2.Collections.sort(List list, Comparator super T> c);

此方法,在泛型T這個Bean沒有實現Comparable接口的時候,多個一個參數,是一個接口我們需要實現其compare()方法排序;

5.HashSet:存儲字符串并遍歷--問題:為什么存儲字符串的時候,字符串內容相同的只存儲了一個呢?

* 通過查看add方法的源碼,我們知道這個方法底層依賴 兩個方法:hashCode()和equals()。

* 步驟:

* 首先比較哈希值(重寫后哈希值是通過屬性計算出來的和屬性有關)

* 如果相同,繼續走,比較地址值或者走equals()

* 如果不同,就直接添加到集合中

* 按照方法的步驟來說:

* 先看hashCode()值是否相同

* 相同:繼續走equals()方法

* 返回true:說明元素重復,就不添加

* 返回false:說明元素不重復,就添加到集合

* 不同:就直接把元素添加到集合

* 如果類沒有重寫這兩個方法,默認使用的Object()。一般來說不同相同。

* 而String類重寫了hashCode()和equals()方法,所以,它就可以把內容相同的字符串去掉。只留下一個。

注意:

1.equal()相等的兩個對象他們的hashCode()肯定相等,也就是用equal()對比是絕對可靠的。

2.hashCode()相等的兩個對象他們的equal()不一定相等,也就是hashCode()不是絕對可靠的。

所有對于需要大量并且快速的對比的話如果都用equal()去做顯然效率太低,所以解決方式是,每當需要對比的時候,首先用hashCode()去對比,如果hashCode()不一樣,則表示這兩個對象肯定不相等(也就是不必再用equal()去再對比了),如果hashCode()相同,此時再對比他們的equal(),如果equal()也相同,則表示這兩個對象是真的相同了,這樣既能大大提高了效率也保證了對比的絕對正確性!

3.當自定義類沒有重寫hashCode和equals方法時,默認走的是Object的hashCode和equals方法,這時他的hashCode的值是不一樣的。

6.TreeSet排序方式:

A:自然排序(元素具備比較性)

讓元素所屬的類實現自然排序接口 Comparable

B:比較器排序(集合具備比較性)

讓集合的構造方法接收一個比較器接口的子類對象 Comparator


總結

以上是生活随笔為你收集整理的父类一实现serializable_我的java基础学习易错点和易忘点总结(一)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。