{eval=Array;=+count(Array);}

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

問答專欄Q & A COLUMN

剛入門java,有什么網站可以有題讓我練習呢?

cgspinecgspine 回答0 收藏1
收藏問題

7條回答

ninefive

ninefive

回答于2022-06-28 15:14

你好,我是大師兄,計算機專業的。做過兩年多的Java開發。我來給你回答吧。

對于新手來說,剛學習Java,是要多練習寫代碼的。但是你要說刷題的話,一般是指的算法類題目比較多。但是刷算法類的題目并不有助于你學習Java,因為這類題目的重點在算法上面。

新手小白想要學習Java,但一般不僅僅是涉及學習Java,還通常包括Web開發,一般這一類的學習通常有很多的框架需要去學,如果你想要通過它來找到一份好職業,就必須要經過一系列系統的學習,才能穩操勝券。

根據我個人的專業和學習經驗,給你幾點學習的建議。

以實踐為驅動學習Core Java

想要快速上手,加深各方面的技巧,通過相關的培訓課程來學習之后,直接上手做小項目。

但是前期還是得先做些算法小題來熟悉java語法基礎,比如你學完面向對象和Java基本類型之后,可以嘗試去做一做LeetCode、牛客網上的一些題,或者一些面試題。

學習了swing之后(其實強烈不建議學習java的界面編程Swing AWT),可以做一些小項目了,比如記賬本、學生成績選課管理系統、打字小游戲、消消樂等等。在娛樂中編程,會體驗更多的樂趣。

學習JDBC之后,就可以把記賬本、學生選課系統對接上了,剛開始做的是基本版,然后就可以做成連接數據庫的版本。

后面學習集合、并發編程、IO、網絡可以嘗試做一做書上的課后題,推薦李剛的瘋狂Java講義,后面有課后題。

之后在深入的學習反射、JVM、動態代理、設計模式。

以項目為導向學習框架

工欲善其事,必先利其器。Java最強大的地方,在于它的工具種類繁多,框架層出不窮,當一個先進的思想出現時,往往Java就是最先成熟運用的那一個。學習利用優秀的框架(尤其是開源框架),對于開發非常有幫助,提升開發效率,避免重復造輪子。

Java相關的框架繁多,數不勝數,比較有名(基本是必學的框架)的有:Spring家族(Spring、SpringMVC、SpringData、SpringBoot、SpringCloud等等)、Hibernate、Mybatis。

建議這一塊的學習通過一個完整的項目來練習,比如開發一個在線購物商城系統。

加油吧!少年

你的路還很遠,一入Java深似海,能不能走出來看造化了!哈哈。

如果你喜歡這篇文章,歡迎點贊、評論、轉發!

我會經常分享科技、計算機編程等方面的知識、經驗,感興趣的話點個關注吧!

評論0 贊同0
  •  加載中...
baihe

baihe

回答于2022-06-28 15:14

leetcode,牛客網,計蒜客。

如果想要去參加算法比賽的話,有

codeforces,topcoder,洛谷。

評論0 贊同0
  •  加載中...
Drummor

Drummor

回答于2022-06-28 15:14

本人計算機科學與技術專業,從事java有4年了。分享下自己的學習網站吧。

1.牛客網

主要服務于國內廣大程序員。產品規模很大,包括了it題庫、在線編程練習、線上課程、社區、筆試服務、還有競賽。用戶基本覆蓋全國高校百萬的程序員學習者。在國內互聯網公司有良好的口碑,為國內眾多的互聯網公司提供了校園招聘,競賽等服務。具備基本每個領域的筆試算法題,值得收藏。

2.利扣 leetcode

這個網站有國際版和國內版,平常我們進國內版的就行了啊,當然英文好的也可以使用國際版,這里非常建議大家使用國際版,交流的技術存在差異,但是題目基本一致,不需要擔心。

地址:leetcode-cn.com

利扣被國內外程序員稱為刷題神器。甚至有人說,你如果掌握了百分之80左右,各互聯網公司提供的算法崗位你只要對比下誰的工資高就好了。

它基本覆蓋了全互聯網公司的算法題目,還有數據庫等技術,并且提供了交流平臺,國內過各種大神將自己的解答想法分享出來,有些巧妙的解答確實會令人拍案叫絕。普遍都是國外人,但是國內人也特別多,當然是國際版才是這樣的。

如果單單是學習練習java編程的,這兩個網站可以滿足了,關鍵就是提升你的編程思維能力。

要學習java核心技術還是建議購買java相關書籍或者在網上課堂學習。

評論0 贊同0
  •  加載中...
gaara

gaara

回答于2022-06-28 15:14

如果是想找高質量面試題的話不妨看看動力節點官網上面試題也是非常全面新鮮的!


Java面試題及答案

1、String類可以被繼承嗎?

String類在聲明時使用final關鍵字修飾,被final關鍵字修飾的類無法被繼承。

接下來我們可以看一下String類的源代碼片段:

public final class String implements java.io.Serializable, Comparable<String>,CharSequence { /** The value is used for character storage. */ private final char value[]; /** Cache the hash code for the string */ private int hash; // Default to 0 /** use serialVersionUID from JDK 1.0.2 for interoperability */ private static final long serialVersionUID = -6849794470754667710L;

● 為什么Java語言的開發者,把String類定義為final的呢?

因為只有當字符串是不可變的,字符串池才有可能實現。字符串池的實現可以在運行時節約很多heap空間,因為不同的字符串變量都指向池中的同一個字符串。但如果字符串是可變的,那么String interning將不能實現,因為這樣的話,如果變量改變了它的值,那么其它指向這個值的變量的值也會一起改變。如果字符串是可變的,那么會引起很嚴重的安全問題。譬如,數據庫的用戶名、密碼都是以字符串的形式傳入來獲得數據庫的連接,或者在socket編程中,主機名和端口都是以字符串的形式傳入。因為字符串是不可變的,所以它的值是不可改變的,否則黑客們可以鉆到空子,改變字符串指向的對象的值,造成安全漏洞。

因為字符串是不可變的,所以是多線程安全的,同一個字符串實例可以被多個線程共享。這樣便不用因為線程安全問題而使用同步。字符串自己便是線程安全的。

因為字符串是不可變的,所以在它創建的時候HashCode就被緩存了,不需要重新計算。這就使得字符串很適合作為Map中的鍵,字符串的處理速度要快過其它的鍵對象。這就是HashMap中的鍵往往都使用字符串。

● final關鍵字除了修飾類之外,還有哪些用法呢?

final修飾的變量,一旦賦值,不可重新賦值;

final修飾的方法無法被覆蓋;

final修飾的實例變量,必須手動賦值,不能采用系統默認值;

final修飾的實例變量,一般和static聯用,用來聲明常量;

注意:final不能和abstract關鍵字聯合使用。

總之,final表示最終的、不可變的。

2、& 和 && 的區別?

● &運算符是:邏輯與;&&運算符是:短路與。

● &和&&在程序中最終的運算結果是完全一致的,只不過&&存在短路現象,當&&運算符左邊的表達式結果為false的時候,右邊的表達式不執行,此時就發生了短路現象。如果是&運算符,那么不管左邊的表達式是true還是false,右邊表達式是一定會執行的。這就是他們倆的本質區別。

● 當然,&運算符還可以使用在二進制位運算上,例如按位與操作。

3、兩個對象值相同equals結果為true,但卻可有不同的 hashCode,這句話對不對?

不對,如果兩個對象x和y滿足x.equals(y) == true,它們的哈希值(hashCode)應當相同。Java 對于equals方法和hashCode方法是這樣規定的:

(1)如果兩個對象相同(equals方法返回true),那么它們的hashCode值一定要相同;

(2)如果兩個對象的 hashCode相同,它們并不一定相同。當然,你未必按照要求去做,但是如果你違背了上述原則就會發現在使用集合時,相同的對象可以出現在Set 集合中,同時增加新元素的效率會大大降低(對于使用哈希存儲的系統,如果哈希碼頻繁的沖突將會造成存取性能急劇下降)。

關于equals和hashCode方法,很多Java程序員都知道,但很多人也就是僅僅了解而已,在Joshua Bloch的大作《Effective Java》(《Effective Java》在很多公司,是Java程序員必看書籍,如果你還沒看過,那就趕緊去買一本吧)中是這樣介紹 equals 方法的:

首先equals方法必須滿足自反性(x.equals(x)必須返回true)、對稱性(x.equals(y)返回true 時,y.equals(x)也必須返回true)、傳遞性(x.equals(y)和y.equals(z)都返回true時,x.equals(z)也必須返回true)和一致性(當x和y引用的對象信息沒有被修改時,多次調用x.equals(y)應該得到同樣的返回值),而且對于任何非null值的引用x,x.equals(null)必須返回false。實現高質量的equals方法的訣竅包括:

使用==操作符檢查"參數是否為這個對象的引用";

使用 instanceof操作符檢查"參數是否為正確的類型";

對于類中的關鍵屬性,檢查參數傳入對象的屬性是否與之相匹配;

編寫完equals方法后,問自己它是否滿足對稱性、傳遞性、一致性;

重寫equals時總是要重寫hashCode;

不要將equals方法參數中的Object對象替換為其他的類型,在重寫時不要忘掉@Override注解。

4、在 Java 中,如何跳出當前的多重嵌套循環?

在最外層循環前加一個標記如outfor,然后用break outfor;可以跳出多重循環。例如以下代碼:

public class TestBreak {

public static void main(String[] args) {

outfor: for (int i = 0; i < 10; i++){

for (int j = 0; j < 10; j++){

if (j == 5){

break outfor;

}

System.out.println("j = " + j);

}

}

}

}

運行結果如下所示:

j = 0

j = 1

j = 2

j = 3

j = 4

5、重載(overload)和重寫(override)的區別?重載的方法能否根據返回類型進行區分?

方法的重載和重寫都是實現多態的方式,區別在于前者實現的是編譯時的多態性,而后者實現的是運行時的多態性。

重載發生在一個類中,同名的方法如果有不同的參數列表(類型不同、個數不同、順序不同)則視為重載。

重寫發生在子類與父類之間,重寫要求子類重寫之后的方法與父類被重寫方法有相同的返回類型,比父類被重寫方法更好訪問,不能比父類被重寫方法聲明更多的異常(里氏代換原則)。重載對返回類型沒有特殊的要求。

● 方法重載的規則:

方法名一致,參數列表中參數的順序,類型,個數不同。

重載與方法的返回值無關,存在于父類和子類,同類中。

可以拋出不同的異常,可以有不同修飾符。

● 方法重寫的規則:

參數列表、方法名、返回值類型必須完全一致;

構造方法不能被重寫;

聲明為 final 的方法不能被重寫;

聲明為 static 的方法不存在重寫(重寫和多態聯合才有意義);

訪問權限不能比父類更低;

重寫之后的方法不能拋出更寬泛的異常;

6、當一個對象被當作參數傳遞到一個方法后,此方法可改變這個對象的屬性,并可返回變化后的結果,那么這里是值傳遞還是引用傳遞?

是值傳遞。Java 語言的方法調用只支持參數的值傳遞。當一個對象實例作為一個參數被傳遞到方法中時,參數的值就是對該對象的內存地址。這個值(內存地址)被傳遞后,同一個內存地址指向堆內存當中的同一個對象,所以通過哪個引用去操作這個對象,對象的屬性都是改變的。

7、為什么方法不能根據返回類型來區分重載?

我們來看以下的代碼:

public void testMethod(){

doSome();

}

public void doSome(){

}

public int doSome(){

return 1;

}

在Java語言中,調用一個方法,即使這個方法有返回值,我們也可以不接收這個返回值,例如以上兩個方法doSome(),在testMethod()中調用的時候,Java編譯器無法區分調用的具體是哪個方法。所以對于編譯器來說,doSome()方法不是重載而是重復了,編譯器報錯。所以區分這兩個方法不能依靠方法的返回值類型。

8、抽象類(abstract class)和接口(interface)有什么異同?

不同點:

● 抽象類中可以定義構造器,接口不能;

● 抽象類可以有抽象方法和具體方法,接口不能有具體方法;

● 接口中的成員全都是 public 的,抽象類中的成員可以使用private、public、protected、默認等修飾;

● 抽象類中可以定義成員變量,接口中只能是常量;

● 有抽象方法的類必須被聲明為抽象類,而抽象類未必要有抽象方法;

● 抽象類中可以包含靜態方法,接口中不能有靜態方法;

● 一個類只能繼承一個抽象類,一個類可以實現多個接口;

相同點:

● 不能夠實例化;

● 可以將抽象類和接口類型作為引用類型;

● 一個類如果繼承了某個抽象類或者實現了某個接口都需要對其中的抽象方法全部進行實現,否則該類仍然需要被聲明為抽象類;

9、char 型變量中能不能存儲一個中文漢字,為什么?

char 類型可以存儲一個中文漢字,因為Java中使用的編碼是Unicode(不選擇任何特定的編碼,直接使用字符在字符集中的編號,這是統一的唯一方法),一個char 類型占2個字節(16 比特),所以放一個中文是沒問題的。

補充:使用Unicode 意味著字符在JVM內部和外部有不同的表現形式,在JVM內部都是 Unicode,當這個字符被從JVM內部轉移到外部時(例如存入文件系統中),需要進行編碼轉換。所以 Java 中有字節流和字符流,以及在字符流和字節流之間進行轉換的轉換流,如 InputStreamReader和OutputStreamReader,這兩個類是字節流和字符流之間的適配器類,承擔了編碼轉換的任務。

10、抽象的(abstract)方法是否可同時是靜態的(static), 是否可同時是本地方法(native),是否可同時被 synchronized?

都不能。

● 抽象方法需要子類重寫,而靜態的方法是無法被重寫的,因此二者是矛盾的。

● 本地方法是由本地代碼(如 C++ 代碼)實現的方法,而抽象方法是沒有實現的,也是矛盾的。

● synchronized 和方法的實現細節有關,抽象方法不涉及實現細節,因此也是相互矛盾的。

Java面向對象面試題

1、面向對象包括哪些特性,怎么理解的?

(1)封裝:通常認為封裝是把數據和操作數據的方法綁定起來,對數據的訪問只能通過已定義的接口。面向對象的本質就是將現實世界描繪成一系列完全自治、封閉的對象。我們在類中編寫的方法就是對實現細節的一種封裝;我們編寫一個類就是對數據和數據操作的封裝。可以說,封裝就是隱藏一切可隱藏的東西,只向外界提供最簡單的編程接口。

(2)繼承:繼承是從已有類得到繼承信息創建新類的過程。提供繼承信息的類被稱為父類(超類、基類);得到繼承信息的類被稱為子類(派生類)。繼承讓變化中的軟件系統有了一定的延續性,同時繼承也是封裝程序中可變因素的重要手段。

(3)多態:多態性是指允許不同子類型的對象對同一消息作出不同的響應。簡單的說就是用同樣的對象引用調用同樣的方法但是做了不同的事情。多態性分為編譯時的多態性和運行時的多態性。如果將對象的方法視為對象向外界提供的服務,那么運行時的多態性可以解釋為:當 A系統訪問B系統提供的服務時,B 系統有多種提供服務的方式,但一切對 A 系統來說都是透明的。方法重載(overload)實現的是編譯時的多態性(也稱為前綁定),而方法重寫(override)實現的是運行時的多態性(也稱為后綁定)。運行時的多態是面向對象最精髓的東西,要實現多態需要做兩件事:

第一:方法重寫(子類繼承父類并重寫父類中已有的或抽象的方法);

第二:對象造型(用父類型引用指向子類型對象,這樣同樣的引用調用同樣的方法就會根據子類對象的不同而表現出不同的行為)。

(4)抽象:抽象是將一類對象的共同特征總結出來構造類的過程,包括數據抽象和行為抽象兩方面。抽象只關注對象有哪些屬性和行為,并不關注這些行為的細節是什么。

2、訪問權限修飾符 public、private、protected, 以及不寫(默認)時的區別?

修飾符

當前類

同包

子類

其他包

public

protected

×

默認(缺省)

×

×

private

×

×

×

3、Java中為什么要用 clone?

在實際編程過程中,我們常常要遇到這種情況:有一個對象 A,在某一時刻 A 中已經包含了一些有效值,此時可能會需要一個和 A 完全相同新對象 B,并且此后對 B 任何改動都不會影響到 A 中的值,也就是說,A 與 B 是兩個獨立的對象,但 B 的初始值是由 A 對象確定的。在 Java 語言中,用簡單的賦值語句是不能滿足這種需求的。要滿足這種需求雖然有很多途徑,但clone()方法是其中最簡單,也是最高效的手段。

● 說到對象的克隆,涉及到深克隆和淺克隆?

淺克隆:創建一個新對象,新對象的屬性和原來對象完全相同,對于非基本類型屬性,仍指向原有屬性所指向的對象的內存地址。

深克隆:創建一個新對象,屬性中引用的其他對象也會被克隆,不再指向原有對象地址。

4、new一個對象的過程和clone一個對象的區別?

new 操作符的本意是分配內存。程序執行到 new 操作符時,首先去看 new 操作符后面的類型,因為知道了類型,才能知道要分配多大的內存空間。分配完內存之后,再調用構造函數,填充對象的各個域,這一步叫做對象的初始化,構造方法返回后,一個對象創建完畢,可以把他的引用(地址)發布到外部,在外部就可以使用這個引用操縱這個對象。

clone 在第一步是和 new 相似的,都是分配內存,調用 clone 方法時,分配的內存和原對象(即調用 clone 方法的對象)相同,然后再使用原對象中對應的各個域,填充新對象的域,填充完成之后,clone方法返回,一個新的相同的對象被創建,同樣可以把這個新對象的引用發布到外部。

5、Java中實現多態的機制是什么?

Java中的多態靠的是父類或接口定義的引用變量可以指向子類或具體實現類的實例對象,而程序調用的方法在運行期才動態綁定,就是引用變量所指向的具體實例對象的方法,也就是內存里正在運行的那個對象的方法,而不是引用變量的類型中定義的方法。

6、談談你對多態的理解?

多態就是指程序中定義的引用變量所指向的具體類型和通過該引用變量發出的方法調用在編程時并不確定,而是在程序運行期間才確定,即一個引用變量到底會指向哪個類的實例對象,該引用變量發出的方法調用到底是哪個類中實現的方法,必須在程序運行期間才能決定。因為在程序運行時才確定具體的類,這樣,不用修改源代碼,就可以讓引用變量綁定到各種不同的對象上,從而導致該引用調用的具體方法隨之改變,即不修改程序代碼就可以改變程序運行時所綁定的具體代碼,讓程序可以選擇多個運行狀態,這就是多態性。

7、談談你對面向對象的理解?

所謂對象就是由一組數據結構和處理它們的方法組成的,重點“數據”包括對象的特性、狀態等的靜態信息;“方法” 也就是行為,包括該對象的對數據的操作、功能等能動信息。把相同行為的對象歸納為類,類是一個抽象的概念,對象是類的具體。簡單點說:對象就是類的實例。例如:小品演員就是一個類,趙本山就是一個對象。

面向對象的目的:解決軟件系統的可擴展性,可維護性和可重用性。

● 面向對象的三大特性:封裝、多態和繼承:

(1)封裝(對應可擴展性):隱藏對象的屬性和實現細節,僅對外公開接口,控制在程序中屬性的讀和修改的訪問級別。封裝是通過訪問控制符(public protected private)來實現。一個類就可看成一個封裝。

(2)繼承(重用性和擴展性):子類繼承父類,可以繼承父類的方法和屬性。可以對父類方向進行覆蓋(實現了多態)。但是繼承破壞了封裝,因為他是對子類開放的,修改父類會導致所有子類的改變,因此繼承一定程度上又破壞了系統的可擴展性,只有明確的IS-A關系才能使用。繼承要慎用,盡量優先使用組合。

(3)多態(可維護性和可擴展性):接口的不同實現方式即為多態。接口是對行為的抽象,剛才在封裝提到,找到變化部分并封裝起來,但是封裝起來后,怎么適應接下來的變化?這正是接口的作用,接口的主要目的是為不相關的類提供通用的處理服務,我們可以想象一下。比如鳥會飛,但是超人也會飛,通過飛這個接口,我們可以讓鳥和超人,都實現這個接口。

面向對象編程(OOP)其實就是一種設計思想,在程序設計過程中把每一部分都盡量當成一個對象來考慮,以實現軟件系統的可擴展性,可維護性和可重用性。

Java異常處理面試題

1、final、finally、finalize 的區別?

● final:用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,被其修飾的類不可繼承。

● finally:異常處理語句結構的一部分,表示總是執行。

● finalize:Object 類的一個方法,所以Java對象都有這個方法,當某Java對象沒有更多的引用指向的時候,會被垃圾回收器回收,該對象被回收之前,由垃圾回收器來負責調用此方法,通常在該方法中進行回收前的準備工作。該方法更像是一個對象生命周期的臨終方法,當該方法被系統調用則代表該對象即將“死亡”,但是需要注意的是,我們主動行為上去調用該方法并不會導致該對象“死亡”,這是一個被動的方法(其實就是回調方法),不需要我們調用。

2、Java中異常分為哪些種類?

按照異常需要處理的時機分為編譯時異常(也叫受控異常)也叫 CheckedException 和運行時異常(也叫非受控異常)也叫 UnCheckedException。Java認為Checked異常都是可以被處理的異常,所以Java程序必須顯式處理Checked異常。如果程序沒有處理Checked 異常,該程序在編譯時就會發生錯誤無法編譯。這體現了Java 的設計哲學:沒有完善錯誤處理的代碼根本沒有機會被執行。對Checked異常處理方法有兩種:

● 第一種:當前方法知道如何處理該異常,則用try...catch塊來處理該異常。

● 第二種:當前方法不知道如何處理,則在定義該方法時聲明拋出該異常。

運行時異常只有當代碼在運行時才發行的異常,編譯的時候不需要try…catch。Runtime如除數是0和數組下標越界等,其產生頻繁,處理麻煩,若顯示申明或者捕獲將會對程序的可讀性和運行效率影響很大。所以由系統自動檢測并將它們交給缺省的異常處理程序。當然如果你有處理要求也可以顯示捕獲它們。

3、error和exception的區別?

Error類和Exception類的父類都是Throwable類,他們的區別如下:

● Error類一般是指與虛擬機相關的問題,如系統崩潰,虛擬機錯誤,內存空間不足,方法調用棧溢出等。對于這類錯誤的導致的應用程序中斷,僅靠程序本身無法恢復和預防,遇到這樣的錯誤,建議讓程序終止。

● Exception類表示程序可以處理的異常,可以捕獲且可能恢復。遇到這類異常,應該盡可能處理異常,使程序恢復運行,而不應該隨意終止異常。

●Exception類又分為未檢查異常(UnCheckedException)和受檢查的異常(CheckedException)。運行時異常ArithmeticException,IllegalArgumentException編譯能通過,但是一運行就終止了,程序不會處理運行時異常,出現這類異常,程序會終止。而受檢查的異常,要么用 try…catch 捕獲,要么用throws字句聲明拋出,交給它的父類處理,否則編譯不會通過。

4、調用下面的方法,得到的返回值是什么?

1. public int getNum() {

2. try {

3. int a = 1 / 0;

4. return 1;

5. } catch (Exception e) {

6. return 2;

7. } finally {

8. return 3;

9. }

10.}

代碼走到第3行的時候遇到了一個MathException,這時第4行的代碼就不會執行了,代碼直接跳轉到catch語句中,走到第 6 行的時候,異常機制有一個原則:如果在catch中遇到了return或者異常等能使該函數終止的話那么有finally就必須先執行完finally代碼塊里面的代碼然后再返回值。因此代碼又跳到第8行,可惜第8行是一個return語句,那么這個時候方法就結束了,因此第6行的返回結果就無法被真正返回。如果finally僅僅是處理了一個釋放資源的操作,那么該道題最終返回的結果就是2。因此上面返回值是3。

5、Java 異常處理機制的理解?

Java對異常進行了分類,不同類型的異常分別用不同的Java類表示,所有異常的根類為 java.lang.Throwable,Throwable下面又派生了兩個子類:Error和Exception。

Error表示應用程序本身無法克服和恢復的一種嚴重問題。

Exception表示程序還能夠克服和恢復的問題,其中又分為系統異常和普通異常。

系統異常是軟件本身缺陷所導致的問題,也就是軟件開發人員考慮不周所導致的問題,軟件使用者無法克服和恢復這種問題,但在這種問題下還可以讓軟件系統繼續運行或者讓軟件死掉,例如,數組下標越界(ArrayIndexOutOfBoundsException),空指針異常(NullPointerException)、類轉換異常(ClassCastException)。

普通異常是運行環境的變化或異常所導致的問題,是用戶能夠克服的問題,例如,網絡斷線,硬盤空間不夠,發生這樣的異常后,程序不應該死掉。

Java為系統異常和普通異常提供了不同的解決方案,編譯器強制普通異常必須try..catch處理或用throws聲明繼續拋給上層調用方法處理,所以普通異常也稱為checked異常,而系統異常可以處理也可以不處理,所以編譯器不強制用try..catch處理或用throws聲明,所以系統異常也稱為unchecked異常。

6、說出最常見的5個RuntimeException?

● java.lang.NullPointerException 空指針異常;出現原因:調用了未經初始化的對象或者是不存在的對象。

● java.lang.ClassNotFoundException 指定的類找不到;出現原因:類的名稱和路徑加載錯誤;通常都是程序試圖通過字符串來加載某個類時可能引發異常。

● java.lang.NumberFormatException 字符串轉換為數字異常;出現原因:字符型數據中包含非數字型字符。

● java.lang.IndexOutOfBoundsException 數組角標越界異常,常見于操作數組對象時發生。

● java.lang.IllegalArgumentException 方法傳遞參數錯誤。

● java.lang.ClassCastException 數據類型轉換異常。

● java.lang.NoClassDefFoundException 未找到類定義錯誤。

● SQLException SQL 異常,常見于操作數據庫時的 SQL 語句錯誤。

● java.lang.InstantiationException 實例化異常。

● java.lang.NoSuchMethodException 方法不存在異常。

7、throw 和 throws 的區別?

● throw:

throw 語句用在方法體內,表示拋出異常,由方法體內的語句處理。

throw是具體向外拋出異常的動作,所以它拋出的是一個異常實例,執行throw一定是拋出了某種異常。

● throws:

throws語句是用在方法聲明后面,表示如果拋出異常,由該方法的調用者來進行異常的處理。

throws主要是聲明這個方法會拋出某種類型的異常,讓它的使用者要知道需要捕獲的異常的類型。

● throws表示出現異常的一種可能性,并不一定會發生這種異常。

評論0 贊同0
  •  加載中...
OBKoro1

OBKoro1

回答于2022-06-28 15:14

核心推薦:LintCode / LeetCode / 牛客網

不是什么程序員,但是大一大二大三自己都是自學過來一直學到JavaEE的,還是有些經驗的。

JavaSE階段,找個牛逼點的基礎視頻課聽過后,建議找一些小游戲編著玩,貪吃蛇啊2048啊坦克大戰啊,學習一下怎么一步步搭出一個小游戲。可以找網上的視頻課,網易云課堂還有一些培訓機構都有做小游戲的視頻,聽老師一步步講思路后,自己嘗試一下他的思路是要怎么做,敲完后再比對一下。

基本做了三個小游戲下來,Java就不是很陌生的東西了,這時候建議上LintCode或者LeetCode刷題,每天兩到三小時在這上面。里面的題都是最常規的API解決各種面試用算法題。沒系統學過算法?也不要緊,建議買本《算法》橙皮書,然后先從LeetCode之類的簡單題做起,不懂就看discuss或者別人博客是怎么想的,看懂后自己不看別人代碼實現一遍。

其中如果牽涉到某個算法,比如動態規劃,你從未接觸過,不要怕,這道題放著,翻開橙皮書現學唄,看不懂慢慢看,看完后盲敲示例代碼,這樣對基本代碼素養有很大幫助。啃完這個知識點,再回去繼續刷題。

私以為,JavaSE階段最重要的不是IO操作啊什么的,還是LeetCode里面向招聘的算法題。

如果你很想加強Java文件流和網絡,網上找視頻做個JavaSE聊天項目或者文件收發項目是最簡單的,跟學一次練一次就沒有大問題了。

線程很重要。多線程是很復雜的,其中牽涉到的知識還得專門看諸如《并發編程實戰》之類書來提升,建議前期了解基本的同步操作就夠了,等到學到JavaEE階段,會用SSMH這些框架后,再來開始邊做項目,邊研究線程同步這種問題。

評論0 贊同0
  •  加載中...
Charles

Charles

回答于2022-06-28 15:14

剛入門的話推薦你去慕課網,還有B站上有黑馬,尚硅谷的java教學視頻,視頻質量都是很不錯的。

評論0 贊同0
  •  加載中...
phoenixsky

phoenixsky

回答于2022-06-28 15:14

可以去找些面試的題目來練手。或者繼續學習算法,然后拿算法題練手。如果會前端,還可以自己開發個網站,或者微信小程序,服務端用JAVA.

評論0 贊同0
  •  加載中...

最新活動

您已邀請0人回答 查看邀請

我的邀請列表

  • 擅長該話題
  • 回答過該話題
  • 我關注的人
向幫助了您的網友說句感謝的話吧!
付費偷看金額在0.1-10元之間
<