Java学习笔记2021.1.9
我不是很清楚為什么拋出異常只能下面這種寫法?
?public void setAge(Integer age) {if (age < 0) {throw new ArithmeticException("the age is illegae");}this.age = age;}而不能用這種寫法
?public void setAge(Integer age) {if (age < 0) {throw new IllegalArgumentException("the age is illegae");}this.age = age;}個人理解中的泛化處理是將一個個子類轉(zhuǎn)化成基類進(jìn)行處理問題,這樣做的好處就是在處理一些共有的問題時,不需要著眼于具體的數(shù)據(jù)類型進(jìn)行操作,只需要把算法的邏輯搞清楚就好
面向?qū)ο蟮乃枷肫鋵嵨乙膊皇呛芮宄业降桌斫饬藳]有,所以錯了勿怪,在我的理解中,我們假設(shè)這樣的一個出題場景,我選擇的一個解幾何題目的場景,在我的理解中面向過程的解決方案就是通過對題目條件的推演,不斷逼近最后結(jié)果的一個過程,就像歐幾里得幾何學(xué)不斷地推導(dǎo)過程,則是我將這道題分解為一個圓形,一個正五邊形,一個三角形來進(jìn)行解析,通過對這些圖形的
將包中的類加載出來有兩種解決方案,一種是直接加上。這種形式,但是它的加載速度比較慢,還有一種則是直接。類名的方式,這種加載速度更快,并且如果加載兩個包中有相同的類的話,另一種用。的不會被加載出來
對于static我的理解是,首先它是類變量,不是單個實例的變量,而類實際上在給java虛擬機編譯運行的過程中,類就應(yīng)該被加載出來的,就比如單例模式中的餓漢式構(gòu)建方法.然后如果是從c的角度去理解的話,實際上static和c語言中的靜態(tài)其實差不多,實際就是給定了一個地址,并且這個地址空間不會動,其他程序部分也都可以對它進(jìn)行訪問,而java不過是將這種特性進(jìn)一步進(jìn)行了優(yōu)化,使它覆蓋到了方法和類上而已
目前對java的類的理解是將其和c的結(jié)構(gòu)體聯(lián)系起來,實際上都是提前打好了一個框架,并且在程序運行的過程中進(jìn)行加載,但是如果你沒有實例出一個對象,那這個對象白打,但是程序中依舊存在這個對象的框架,并且它的靜態(tài)變量和靜態(tài)方法也是存在的,且若為public還可以直接調(diào)用
有關(guān)于java的接口,我其實以前一直以為接口這玩意是說某個類實現(xiàn)了一個方法以后,可以通過接口直接導(dǎo)入到另一個和它非繼承關(guān)系的類中來著,然后我試著寫了下,發(fā)現(xiàn)運行錯誤,查了查,發(fā)現(xiàn)實際上也只有繼承可以省去寫這些代碼
關(guān)于java的接口,可以直接加個default關(guān)鍵字,這么寫可以避免實現(xiàn)接口的時候要實現(xiàn)所有的方法,然后java的接口,如果想構(gòu)造個接口實例出來,可以通過已經(jīng)實現(xiàn)了接口的對象來完成所需要的操作,然后還有一個靜態(tài)的方法體,用法其實和類中的方法體差不多,可以直接通過接口直接訪問
不過為什么在一個有接口的類中,要利用接口.super.默認(rèn)方法這種格式的邏輯我還是沒搞的太清楚,感覺怪怪的,后面想了想,可能是因為接口的本質(zhì)邏輯沒變的原因,接口中的方法都是需要別的來實現(xiàn)的,本人猜測可能是通過了接口的父類進(jìn)行了繼承之類的操作得來的.
關(guān)于多接口中重名默認(rèn)方法處理的解決方案:1.直接在實現(xiàn)類中自己定義一個方法2.如果是這樣的實現(xiàn)類extend父類 implements 接口,注意下,如果父類和接口中的默認(rèn)方法相同(指方法名),那么不會去管接口中的方法,而是直接調(diào)用父類的方法
有一種調(diào)用實現(xiàn)類的方法是這種的 new 構(gòu)造器().方法(),這么做是沒有問題的,就奇怪了點
?public class A {public static void main(String[] args) {C c = new B();c.a();c.b();c.asd();C.asjkd();?new B().asd();?}}總結(jié)
以上是生活随笔為你收集整理的Java学习笔记2021.1.9的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 算法学习笔记2022.1.8
- 下一篇: java读取excel数据_Java读取