{eval=Array;=+count(Array);}
肝了一個月的面試題終于來啦,大家開心不。
2020年最新Java面試題整理,全網最全一份,包含各個技術棧,Java基礎,Java集合,多線程,Java異常,spring,spring MVC,spring boot,spring cloud,netty,dubbo,activemq,Java web,jvm,kafka,MongoDB,mybatis,MySQL,Nginx,rabbitmq,Redis,Tomcat,zookeeper,設計模式,數據結構,算法,分布式,限流,降級,cap原理等等知識點
話不多說,直接上圖
總共80多個PDF
【BAT必備】計算機網絡面試題:
鏈接:https://pan.baidu.com/s/1hFggmtdL1ZmE4utBlo8S1g 提取碼:qfkh
【BAT必備】設計模式面試題
鏈接:https://pan.baidu.com/s/1eXJveIVvQe-m3MdvLcT-fQ 提取碼:j0kx
【BAT必備】數據結構算法面試題:
鏈接:https://pan.baidu.com/s/1daFN9jY03fXsqwc9LeKi2w 提取碼:5ab7
【BAT必備】多線程面試題:
鏈接:https://pan.baidu.com/s/1GdvsNESoHPBjWKN2h-iK7Q 提取碼:cqib
【BAT必備】并發編程鎖面試題:
鏈接:https://pan.baidu.com/s/1hXPPtMY2dvz-g7QcSTc3PA 提取碼:zhmy
【BAT必備】tomcat面試題:
鏈接:https://pan.baidu.com/s/1qPZXx4lmLynmaF0XjRTzpQ 提取碼:5m16
【BAT必備】zookeeper面試題:
鏈接:https://pan.baidu.com/s/1EhOee9e1Qe-Q6RC8KlthxA 提取碼:p2am
【BAT必備】spring 全家桶面試題:
鏈接:https://pan.baidu.com/s/1DXGO-N5P6QIGKLZ8LIVOuQ 提取碼:m9v7
【BAT必備】rocketMq面試題:
鏈接:https://pan.baidu.com/s/1TEF3yUR4OOaIpj-4ud_79A 提取碼:3g3d
【BAT必備】redis面試題:
鏈接:https://pan.baidu.com/s/1qlanxWBfwvKUObnHulCQiA 提取碼:rjo7
【BAT必備】rabbitMq面試題:
鏈接:https://pan.baidu.com/s/1ywLiq3IUJVyZosPLNrmyTA 提取碼:0td4
【BAT必備】netty面試題:
鏈接:https://pan.baidu.com/s/1Pbv4aelqOt1dUPA2SwEB_Q 提取碼:2w1e
【BAT必備】Nginx面試題:
鏈接:https://pan.baidu.com/s/1r8YNyOz0N6MJ9F0045lEZw 提取碼:49tl
【BAT必備】MySQL面試題:
鏈接:https://pan.baidu.com/s/1GeX6Fs4nNi6fTUHKxJ2SZw 提取碼:8pow
【BAT必備】mybatis面試題:
鏈接:https://pan.baidu.com/s/1xOYiaiQ2JpPt2jb6GdWjaA 提取碼:aqd3
【BAT必備】MongoDB面試題:
鏈接:https://pan.baidu.com/s/1QTVx1TF8tDn6LUJr7wdfOQ 提取碼:j1qt
【BAT必備】Linux面試題:
鏈接:https://pan.baidu.com/s/1veZ3dBJmz1PduCE5tl-e1A 提取碼:txpf
【BAT必備】kafka面試題:
鏈接:https://pan.baidu.com/s/1SWhiBCswleYGsDupSGzE6g 提取碼:o1gv
【BAT必備】jvm面試題:
鏈接:https://pan.baidu.com/s/1xi-QLq_I75kha439EGqELw 提取碼:kxde
【BAT必備】java web面試題:
鏈接:https://pan.baidu.com/s/1r3Bupn9qhJbw5ebR_6h94A 提取碼:qba4
【BAT必備】Java基礎面試題:
鏈接:https://pan.baidu.com/s/1J40nYKIoV_VMCumoRpIyhQ 提取碼:5xo7
【BAT必備】dubbo面試題:
鏈接:https://pan.baidu.com/s/10flnh7Tb0Oxd3yZPQOnjsA 提取碼:5gc9
【BAT必備】activeMQ面試題:
鏈接:https://pan.baidu.com/s/1igNB64dpMCjCQkRzvqCXpQ 提取碼:006a
【BAT必備】分布式相關面試題大全面試題:
鏈接:https://pan.baidu.com/s/1ZcpJDh07B2NPAL4_4VC6jQ 提取碼:w4mw
【BAT必備】java面試題大全:
鏈接:https://pan.baidu.com/s/11jw0Ua4CZiI8-S6EadM_iQ 提取碼:epmp
【BAT必備】Java面試匯總
鏈接:https://pan.baidu.com/s/1vG9_cNoiYBW5TY32S4wGnQ 提取碼:k087
【BAT必備】2020年多家公司整理的350道Java面試題手冊
鏈接:https://pan.baidu.com/s/1FEGQVTgiyKG0kCasYn-n2g 提取碼:f7y1
【BAT必備】Java全部核心知識點整理
鏈接:https://pan.baidu.com/s/1StG-ib70TDAE1Hb4NVLQRQ 提取碼:5rp1
2021大廠java面試題庫:可能會有些多,建議你都自己整理答案,然后去面試,提取去高頻的再好好記記,我覺得能很快找到工作的。
Java 面試題有哪些?面試經常會問什么樣的問題?互聯網大廠的面試題是怎么樣的呢?今天,我們就一起來聊一聊,關于 Java 相關的面試題。
關于 Java 相關的面試題,其實有很多,而且在 GitHub 上,有很多人整理了很多 Java 相關面試題,而且這些面試題里不僅配有答案,分析,很多面試題都包含了一些類似于 BAT TMD 等大廠的面試題,看這些面試題,可以讓你充分了解大廠面試 Java 會經常為什么樣的問題。
所以,今天我就給大家推薦兩個關于 Java 面試的開源項目。里面就包含了很多 Java 面試題,還有經驗分享。
這個開源項目就是:JavaGuide ,它已經有 6 萬多人 star 了。號稱是:【Java 學習 + 面試指南】,一份涵蓋大部分 Java 程序員所需要掌握的核心知識。
來看一看包含了哪些核心知識吧!看圖:
上面是整個開源項目的目錄,具體每個目錄下有什么呢?如下:
我在這里就不一一列舉了,比如,我們點擊其中一個鏈接,看看具體有哪些面試題呢?
是不是內容很豐富呢?
這個開源項目地址: https://github.com/Snailclimb/JavaGuide
這個開源項目的名稱就是:Java-Interview ,它起的名字更厲害,更唬人,就是:Java 面試必會,直通 BAT 。對,就是這么夸張,你看完之后,讓你直通 BAT 。
里面整合和整理了很多面試題。比如這樣:
再比如,具體內容:
不僅有問題,還帶有答案,也是整理很多 Java 相關的面試題。所以,建議大家在上面復習和學習,去應對面試,可以做到充分準備。畢竟,我們不打無準備之仗嘛。
所以,你可以在 GitHub 上去獲取,一搜,出來一堆。GitHub 對于程序員來講,絕對是個好地方。
怎么樣,經過我這么一回答,是不是豁然開朗了呢?如果感覺不錯,記得給個贊哦!
謝邀回答!!!????????????
我認為,Java面試試題眾多,重在對基礎理論知識和實際操作的考核,給你分享一些面試題目(由于篇幅有限,答案省略),主要有:
1. 什么是Spring MVC框架的控制器?
2.SpringMvc的控制器是不是單例模式,如果是,有什么問題,怎么解決?
3.結合項目談談你對 MVC 的理解?
4.什么是Spring MVC?SpringMVC的工作流程是什么?
5.SpringMVC的優點是什么?
6.SpringMVC與Struts2的區別?
7.Spring框架分為哪七大模塊,各模塊的主要功能作用是什么?
8.Spring框架中的三大核心思想是什么?
9.AOP的概念以及使用AOP機制有什么好處?
10.Java編程中實現AOP有幾種方式?
11.jsp靜態包含和動態包含的區別?
12.jsp有哪些內置對象?作用分別是什么?
13.Tomcat 有哪幾種Connector 運行模式?
14.你所知道的集合類都有哪些?主要方法?
15.說出ArrayList、Vector、LinkedList 的存儲性能和特性?
16.Collection 和Collections 的區別?
17.HashMap 和Hashtable 的區別?
18.Arraylist 與Vector 區別?
19.Set 里的元素是不能重復的,那么用什么方法來區分重復與否呢?
20.介紹JAVA中的Collection FrameWork?如何寫自己的數據結構?
21.EJB與JAVA BEAN的區別是什么?
22.請你介紹EJB的基本架構?等等。
以上題目是我分享的一點點建議,希望能對你有所幫助和啟發,也希望與你相互學習、共同進步!!!
我也是一直做java開發很多年啦,經歷過的面試很多了,大公司小公司都待過,給你一些建議吧。
java面試題面還是很廣的,下面給你分類整理下來的。
1、java基礎知識。比如面向對象的特征、多態、訪問修飾符范圍、static和final關鍵字、抽象類與接口、深拷貝與淺拷貝、序列化與反序列化、幾種數據結構、拆箱與裝箱
2、java集合相關的。比如集合框架理解、list、set、hashmap底層實現以及區別?hashmap底層原理,put和get方法怎么實現的?hashmap與hashTable區別?concurrentHashMap底層實現?
3、java異常處理。異常分類?編譯時異常與運行時異常區別?舉例子有哪些運行時異常?
4、jvm內存模型。以及GC垃圾回收機智和算法。
5、spring相關。解釋IOC和AOP,以及他們的原理。bean生命周期
6、mysql。索引是什么?索引分類?索引優化?
7、mybaits相關。動態標簽,字符串替換,防注入。
8、dubbo。dubbo服務注冊與發現。服務負載均衡算法,dubbo配置與使用。
9、多線程。synchronized用法與底層原理,與lock的區別?線程池有哪些?線程池有哪些參數?線程池優化?
10、redis。redis數據類型有哪些,每個類型的使用場景?redis為什么這么快?redis怎么保證高可用?redis怎么保證與數據庫數據一致?
11、消息隊列。activeMQ、rabbitMQ、rocketMQ、kafka,都可以了解下,以及怎么保證高可用和處理高并發。
12、排序算法與數據結構。冒泡排序、快速排序、選擇排序、插入排序等等
大概就有這么個方面的,好好準備還是有很多機會的。
我主要做java 開發的,大家有什么其他問題可以關注我給我私信,或者繼續在評論區和我溝通,我有java高級分布式高并發消息隊列面試視頻可以分享,大家一起進步
互聯網高級java高并發分布式消息隊列面試視頻在蜻蜓FM,搜索“淺戲互聯網”,喜歡的朋友可以關注一下,謝謝。
謝邀。一般關于面試的java框架都是根據你簡歷中之前項目用到的框架來問。題主沒有問到具體的框架,我就談談目前公司招聘要求最多,也是公司用的最多的三個框架SSM。
關于Spring:
1.談談你對Spring IOC和DI的理解,它們有什么區別?
2.Spring配置bean實例化有哪些方式?
3.請介紹一下Spring框架中Bean的生命周期和作用域
4.Bean注入屬性有哪幾種方式?
5.什么是AOP,AOP的作用是什么?
6.Spring如何處理線程并發問題?
7.介紹一下Spring的事物管理
關于SpringMVC:
1.什么是SpringMVC ?簡單介紹下你對SpringMVC的理解?
2.說說SpringMVC的流程?
3.SpringMVC有什么優點?
4.SpringMVC怎么樣設定重定向和轉發的?
5.如何解決POST請求中文亂碼問題,GET的又如何處理呢?
6.Spring MVC的異常處理 ?
7.SpringMvc的核心入口類是什么?
8.SpringMvc的控制器是不是單例模式,如果是,有什么問題,怎么解決?
9. @RequestMapping注解用在類上面有什么作用?
10.如果前臺有很多個參數傳入,并且這些參數都是一個對象的,那么怎么樣快速得到這個對象?
11.SpringMvc如何處理視圖?
關于Mybatis:
1.#{}和${}的區別是什么?
2.當實體類中的屬性名和表中的字段名不一樣 ,怎么辦?
3.聊聊你對Mybatis的了解和認識?
4. Mybatis工作原理
5.Mapper.xml映射文件中有哪些常用標簽?
6.Mybatis是如何進行分頁的?分頁插件的原理是什么?
7.Mybatis動態sql是做什么的?都有哪些動態sql?簡述一下動態sql的執行原理?
8.Mybatis是如何將sql執行結果封裝為目標對象并返回的?都有哪些映射形式?
以上題目是我分享的一點點建議,希望能對你有所幫助。有興趣還可以關注我,定期分享技術干貨,在程序員進階的路上一起學習成長。
指對象一旦被創建狀態不能再改變。任何修改都會創建一個新的對象,如 String、Integer及其它包裝類。
可以。不要共享可變對象的引用就可以了,如果需要變化就返回原對象的一個拷貝。最常見的例子是對象中包含一個日期對象的引用.
前2者都需要顯式地調用構造方法. 造成耦合性最高的恰好是第一種,因此你發現無論什么框架,只要涉及到解耦必先減少new的使用.
在idk 1.7之前,switch只能支持byte,short,char,int或者其對應的封裝類以及Enum類型。從idk 1.7之后switch開始支持String.
clone(), equals(), hashCode(), toString(), notify(), notifyAll(), wait(), finalize(), getClass()
HashMap的底層實現是“基于拉鏈法的散列表”。
不是。Java中的基本數據類型只有8個:byte、short、int、long、float、double、char、boolean;除了基本類型(primitive type)和枚舉類型(enumeration type),剩下的都是引用類型(reference type)。
不正確。3.4是雙精度數,將雙精度型(double)賦值給浮點型(float)屬于下轉型(down-casting,也稱為窄化)會造成精度損失,因此需要強制類型轉換float f =(float)3.4; 或者寫成float f =3.4F;。
goto 是Java中的保留字,在目前版本的Java中沒有使用。《The Java Programming Language》附錄中有goto和const,但這兩個是目前無法使用的關鍵字,因此有些地方將其稱之為保留字,其實保留字這個詞應該有更廣泛的意義,因為熟悉C語言的程序員都知道,在系統類庫中使用過的有特殊意義的單詞或單詞的組合都被視為保留字。
1.0相比1.1可以一次傳輸多個文件,各類瀏覽器大概都支持3~5個請求同時發送。
http2.0主要是二進制的格式替代了原來的文本,增加了多路復用和首部壓縮解決了head of line blocking,另外還有server pushing等新特性。
協議的東西還是建議看一看官網的說明。
此題其實是問瀏覽器緩存對于HTTP Method中Get和Post的請求是否支持,答案是不支持Post Method。Get可以被瀏覽器緩存。
允許不同類對象對同一消息做出響應,主要優點:
動態綁定技術(dynamic binding),執行期間判斷所引用對象的實際類型,根據實際類型調用對應的方法.
接口的意義用三個詞就可以概括:規范,擴展,回調.
不能。子類繼承父類后,有相同的靜態方法和非靜態,這是非靜態方法覆蓋父類中的方法,父類的該靜態方法被隱藏,另外子類可集成父類的靜態與非靜態方法,至于方法重載我覺得它其中一要素就是在同一類中,不能說父類中的什么方法與子類里的什么方法是方法重載的體現。
以上19道java經典面試題。
為幫助那些往想互聯網方向轉行想學習,卻因為時間不夠,資源不足而放棄的人。我搜集整理了一套完整的IT學習資料,包括運營技巧、SEO優化等,比自己在網上零散收集的結構性和連貫性更強,只為幫助那些想學習的人!需要的同學可私信!私信!回復“資料”
SpringMVC
Spring
Mybatis
Hibernate
SpringBoot
Nginx
其他
Thymeleaf、freemarker等模板引擎
NoSQL:Redis、Memcache和MongoDB等的區別、使用
xml解析(DOM解析、SAX解析、JDOM解析、DOM4J解析)
POI實現Microsoft Office格式檔案讀和寫的功能
多線程、線程池的原理及實現
設計模式
Kafka、MQ等消息機制
Sql優化
jvm原理
常用搜索引擎Elasticsearch等
扎實的java基礎
作為一家有著12年教學經驗且只專心教Java的培訓機構,自然有很多高質量的面試題:
131、j2ee中的應用服務器有哪些?(ACD)
A. Weblogic
B. Tomcat
C. JBoss
D. WebSphere
E. IIS
EJB是sun的服務器端組件模型,最大的用處是部署分布式應用程序當然,還有許多方式可以實現分布式應用,類似微軟的.net技術。
憑借 java 跨平臺的優勢,用EJB 技術部署的分布式系統可以不限于特定的平臺。EJB(EnterpriseJavaBean)是J2EE的一部分,定義了一個用于開發基于組件的企業多重應用程序的標準。其特點包括網絡服務支持和核心開發工具(SDK)。
在J2EE里,Enterprise Java Beans(EJB)稱為Java企業Bean,是Java 的核心代碼,分別是會話 Bean(Session Bean),實體 Bean(Entity Bean)和消息驅動 Bean(MessageDriven Bean)。
簡單來講:比如做一個工程就和蓋房子,如果,你會 java,那么你就擁有了基本的技能,一步一步累磚,總能把房子蓋好但是EJB就是一個框架,蓋房子的時候,先有這個框架,然后你根據這個框架去累磚,房子就會蓋的又快又好。java是基礎,EJB 是在java上發展出來的模型,框架。
服務器集群就是指將很多服務器集中起來一起進行同一種服務,在客戶端看來就象是只有一個服務器。集群可以利用多個計算機進行并行計算從而獲得很高的計算速度,也可以用多個計算機做備份,從而使得任何一個機器壞了整個系統還是能正常運行。一旦在服務器上安裝并運行了群集服務,該服務器即可加入群集。群集化操作可以減少單點故障數量,并且實現了群集化資源的高可用性。
public class Test {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("a");
list.add("a");
list.add("a");
list.add("b");
list.add("b");
list.add("c");
System.out.println("沒有去重前的數據為>>>" + list.toString());
for (int i = 0; i < list.size() - 1; i++) {
for (int j = list.size() - 1; j > i; j--) {
if (list.get(j).equals(list.get(i))) {
list.remove(j);
}
}
}
System.out.println("去重后的數據為>>>" + list.toString());
}
}
135、利用 java 面向對象的思路設計正方形、長方形、圓的計算面積的類圓:
class MianJi {
float r;
float pai = (float) 3.14;
void gongShi() {
Float s = pai * r * r;
System.out.println("圓的面積為" + s);
}
void zhengFangXing(float bianChang) {
System.out.println("正方形的面積為" + bianChang * bianChang);
}
void changFangXing(float chang, float kuan) {
System.out.println("長方形的面積為" + chang * kuan);
}
public static void main(String[] arg) {
MianJi c = new MianJi();
System.out.println("請輸入圓的半徑:");
Scanner sc = new Scanner(System.in);
c.r = sc.nextFloat(); c.gongShi();
System.out.println("請輸入正方形的邊長:");
float bian = sc.nextFloat();
c.zhengFangXing(bian);
System.out.println("請輸入長方形的長和寬:");
float chang = sc.nextFloat();
float kuan = sc.nextFloat();
c.changFangXing(chang, kuan);
}
}
136、任何>=6的偶數都可以分解為兩個質數之和,從鍵盤輸入一個偶數,輸出其分解的質數
public class Test { public static void main(String[] args) { int num = inPut(); outPut(num); } public static int inPut() { Scanner sc = new Scanner(System.in); System.out.println("請輸入大于 6 的偶數:"); int num = sc.nextInt(); if (num % 2 != 0 || num <= 6) { System.out.println("輸入錯誤,請重新輸入大于 6 的偶數:"); return inPut(); } return num; } public static boolean isPrim(int num) { for (int i = 2; i <= Math.sqrt((double) num); i++) { if (num % i == 0) { return false; } } return true; } public static void outPut(int num) { for (int i = 2; i <= num / 2; i++) { if (isPrim(i) == true && isPrim(num - i) == true) { System.out.println(i + " " + (num - i)); } } } }
137、什么叫對象?什么叫類?什么是面向對象(OOP)?
類的概念:類是具有相同屬性和行為的一組對象的集合。它為屬于該類的所有對象提供了統一的抽象描述,其內部包括屬性和行為兩個主要部分。在面向對象的編程語言中,類是一個獨立的程序單位,它應該有一個類名并包括屬性說明和服務說明兩個主要部分。
對象的概念:對象是系統中用來描述客觀事物的一個實體,它是構成系統的一個基本單位。一個對象由一組屬性和對這組屬性進行操作的一組服務組成。從更抽象的角度來說,對象是問題域或實現域中某些事物的一個抽象,它反映該事物在系統中需要保存的信息和發揮的作用;它是一組屬性和有權對這些屬性進行操作的一組服務的封裝體。客觀世界是由對象和對象之間的聯系組成的。
類與對象的關系就如模具和鑄件的關系,類的實例化結果就是對象,而對一類對象的抽象就是類。類描述了一組有相同特性(屬性)和相同行為(方法)的對象。
上面大概就是它們的定義吧,也許你是剛接觸面象對象的朋友,不要被概念的東西搞暈了, 給你舉個列子吧,如果你去中關村想買幾臺組裝的PC機,到了那里你第一步要干什么,是不是裝機的工程師和你坐在一起,按你提供的信息和你一起完成一個裝機的配置單呀,這個配置單就可以想像成是類,它就是一張紙,但是它上面記錄了你要買的PC機的信息,如果用這個配置單買10臺機器,那么這10臺機子,都是按這個配置單組成的,所以說這10臺機子是一個類型的,也可以說是一類的。那么什么是對象呢,類的實例化結果就是對象,用這個配置單配置出來(實例化出來)的機子就是對象,是我們可以操作的實體,10 臺機子,10 個對象。每臺機子都是獨立的,只能說明他們是同一類的,對其中一個機(對象)做任何動作都不會影響其它9臺機器,但是我對類修改,也就是在這個配置單上加一個或少一個配件,那么裝出來的9個機子都改變了,這是類和對象的關系(類的實例化結果就是對象)
● 修飾類
當用final修飾一個類時,表明這個類不能被繼承。也就是說,如果一個類你永遠不會讓他被繼承,就可以用final進行修飾。final類中的成員變量可以根據需要設為final,但是要注意 final 類中的所有成員方法都會被隱式地指定為final 方法。在使用 final 修飾類的時候,要注意謹慎選擇,除非這個類真的在以后不會用來繼承或者出于安全的考慮,盡量不要將類設計為 final類。
● 修飾方法
被final修飾的方法將不能被子類覆蓋,主要用于:
把方法鎖定,以防任何繼承類修改它的含義。
在早期的Java實現版本中,會將final方法轉為內嵌調用,所以效率能夠提升。
● 修飾變量
對于一個final變量,如果是基本數據類型的變量,則其數值一旦在初始化之后便不能更改;如果是引用類型的變量,則在對其初始化之后便不能再讓其指向另一個對象。當用 final 作用于類的成員變量時,成員變量(注意是類的成員變量,局部變量只需要保證在使用之前被初始化賦值即可)必須在定義時或者構造器中進行初始化賦值,而且final變量一旦被初始化賦值之后,就不能再被賦值了。
● java.lang.*
提供利用Java編程語言進行程序設計的基礎類。最重要的類是Object(它是類層次結構的根)和Class(它的實例表示正在運行的應用程序中的類)。
● java.util.*
包含集合框架、遺留的Collection類、事件模型、日期和時間設施、國際化和各種實用工具類(字符串標記生成器、隨機數生成器和位數組、日期 Date 類、堆棧 Stack 類、向量 Vector 類等)。集合類、時間處理模式、日期時間工具等各類常用工具包。
● java.io.*
Java 的核心庫java.io提供了全面的IO接口。包括:文件讀寫、標準設備輸出等。Java 中 IO是以流為基礎進行輸入輸出的,所有數據被串行化寫入輸出流,或者從輸入流讀入。
● java.net.*
并非所有系統都支持 IPv6 協議,而當 Java 網絡連接堆棧嘗試檢測它并在可用時透明地使用它時,還可以利用系統屬性禁用它。在IPv6不可用或被顯式禁用的情況下,Inet6Address 對大多數網絡連接操作都不再是有效參數。雖然可以保證在查找主機名時 java.net.InetAddress.getByName之類的方法不返回Inet6Address,但仍然可能通過傳遞字面值來創建此類對象。在此情況下,大多數方法在使用 Inet6Address 調用時都將拋出異常。
● java.sql.*
提供使用JavaTM編程語言訪問并處理存儲在數據源(通常是一個關系數據庫)中的數據的API。此API包括一個框架,憑借此框架可以動態地安裝不同驅動程序來訪問不同數據源。
重載需要滿足的條件:在同一類中定義的方法,方法名必須相同,參數一定不同。
發生覆蓋的條件:“三同一不低”,子類和父類的方法名稱,參數列表,返回類型必須完全相同,而且子類方法的訪問修飾符的權限不能比父類低。子類方法不能拋出比父類方法更多的異常。即子類方法所拋出的異常必須和父類方法所拋出的異常一致,或者是其子類,或者什么也不拋出;被覆蓋的方法不能是final類型的。因為final修飾的方法是無法覆蓋的。被覆蓋的方法不能為private。否則在其子類中只是新定義了一個方法,并沒有對其進行覆蓋。被覆蓋的方法不能為static。所以如果父類中的方法為靜態的,而子類中的方法不是靜態的,但是兩個方法除了這一點外其他都滿足覆蓋條件,那么會發生編譯錯誤。反之亦然。即使父類和子類中的方法都是靜態的,并且滿足覆蓋條件,但是仍然不會發生覆蓋,因為靜態方法是在編譯的時候把靜態方法和類的引用類型進行匹配。
重寫規則:重寫方法不能比被重寫方法限制有更嚴格的訪問級別。(但是可以更廣泛,比如父類方法是包訪問權限,子類的重寫方法是public訪問權限)。比如:Object類有個toString()方法,開始重寫這個方法的時候我們總容易忘記public修飾符,編譯器當然不會放過任何教訓我們的機會。出錯的原因就是:沒有加任何訪問修飾符的方法具有包訪問權限,包訪問權限比 public當然要嚴格了,所以編譯器會報錯的。參數列表必須與被重寫方法相同。重寫有個孿生的弟弟叫重載,也就是后面要出場的。如果子類方法的參數與父類對應的方法不同,那么就是你認錯人了,那是重載,不是重寫。返回類型必須與被重寫方法的返回類型相同。
父類方法A:void eat(){}子類方法B:int eat(){}兩者雖然參數相同,可是返回類型不同,所以不是重寫。
父類方法A:int eat(){} 子類方法 B:long eat(){} 返回類型雖然兼容父類,但是不同就是不同,所以不是重寫。
我會定時更新一些Java題庫,現在好多做大的都商業化了,而且網上的面試題庫有些太久了,不適合,我自己平時上下班地鐵上會寫一些面試題,純粹也是為了讓自己總結一下,順便分享給大家,你可以關注看看。
0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答