小貓的java基礎知識點匯總(上)

1、一個".java"源文件中是否可以包括多個類(不是內部類)?有什么限制?

可以有多個類,但只能有一個public的類,并且public的類名必須與文件名相一致。

2、short s1= 1; s1= s1+1;?有沒有錯?

s1+1運算時會自動提升類型,結果是int,賦值給s1時,將報告需要強轉類型的錯誤。

3、short s1= 1; s1 += 1;有沒有錯?

+=是java規定的運算符,編譯器會對它進行特殊處理,因此可以正確編譯。

4、使用final關鍵字修飾一個變量時,引用的內容一定不能變?

使用final修飾變量時,是引用變量(也就是地址)不能變,引用變量所指向的對象中的內容還是可以改變的

5、是否可以從static方法內對非static方法調用?為什么?

????????不可以。因為非static方法是與對象關聯的,必須創建一個對象,才可以在該對象上進行方法調用(對象.方法)。而static方法調用時不需要創建對象,可以直接調用。如果從一個static方法中發出對非static方法的調用,那個非static方法是關聯到哪個對象上的呢?這個邏輯無法成立。

6、Overload和Override的區別?

重載Overload表示同一個類中可以有多個名稱相同的方法,但這些方法的參數列表各不相同(即參數個數或類型不同)。

重寫Override表示子類中的方法可以與父類中的方法的名稱和參數完全相同,子類對象調用這個方法時,將調用子類中的定義方法,這就把父類中的方法覆蓋了,這也是面向對象編程的多態性的一種表現。

7、Overloaded的方法是否可以改變返回值的類型?

如果幾個重載Overloaded的方法的參數列表不一樣,它們的返回者類型當然也可以不一樣。

如果兩個方法的參數列表完全一樣,不管返回值是否相同,都不允許。因為無法確定編程者倒底是想調用哪個方法了,因為他們被調用時看起來完全相同。

8、接口是否可繼承接口?抽象類是否可實現(implements)接口?抽象類是否可繼承具體類(concreteclass)?抽象類中是否可以有靜態的main方法?

????????接口可以繼承接口。抽象類可以實現(implements)接口,抽象類可以繼承具體類。抽象類中可以有靜態的main方法。

????????記住抽象類與普通類的唯一區別就是不能創建實例對象和允許有abstract方法。

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

????????靠的是父類(或接口定義)的引用變量可以指向子類(或具體實現類)的實例對象。

而程序調用的方法在運行期才動態綁定,就是引用變量所指向的具體實例對象的方法,而不是引用變量的類型中定義的方法。

10、abstractclass和interface有什么區別?

抽象類可以有構造方法,接口中不能有構造方法。

抽象類中可以有普通成員變量,接口中沒有普通成員變量

抽象類中可以包含非抽象的普通方法,接口中的所有方法必須都是抽象的,不能有非抽象的普通方法。

抽象類中的抽象方法類型可以是public,protected,接口中的抽象方法只能是public類型的,并且默認為public abstract。

7. 一個類可以實現多個接口,但只能繼承一個抽象類。

11、String s = "Hello";s = s + "world!";執行后,原始的String對象中的內容變了沒有?

????????沒有。因為String被設計成不可變類,所以它的所有對象都是不可變對象。只是s不再指向舊的對象了。

12、下面這條語句一共創建了多少個對象:String s="a"+"b"+"c"+"d";

javac編譯可以對字符串常量直接相加的表達式進行優化直接得出答案,不必要等到運行期再去進行加法運算處理

這行代碼被編譯器在編譯時優化后,相當于直接定義了一個”abcd”的字符串,所以,上面的代碼應該只創建了一個String對象。

13、final, finally, finalize的區別。

????????final 用于聲明屬性,方法和類,分別表示屬性不可變,方法不可覆蓋,類不可繼承。

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

????????finalize是Object類的一個方法,在垃圾收集器執行的時候會調用被回收對象的此方法.

14、error和exception有什么區別?

????????error 表示恢復不是不可能但很困難的情況下的一種嚴重問題。比如說內存溢出。不可能指望程序能處理這樣的情況。? ? ? ? ? ? ? ? ? exception表示程序還能夠克服和恢復的問題

15、Java 中堆和棧區別?
棧常用于保存方法幀和局部變量,而對象總是在堆上分配。

棧通常都比堆小,也不會在多個線程之間共享,而堆被整個 JVM 的所有線程共享。

????????棧:在函數中定義的一些基本類型的變量和對象的引用變量都是在函數的棧內存中分配,當在一段代碼塊定義一個變量時,Java 就在棧中為這個變量分配內存空間,當超過變量的作用域后,Java 會自動釋放掉為該變量分配的內存空間,該內存空間可以立即被另作它用。

????????堆:堆內存用來存放由 new 創建的對象和數組,在堆中分配的內存,由 Java 虛擬機的自動垃圾回收器來管理。

16、能將 int 強制轉換為 byte 類型的變量嗎?(引申到所有大類型轉小類型)
? ? ? ? 實際中,我們可以做強制轉換,不會報錯。

但是存在大類型轉小類型的通病: int 是 32 位的,而 byte 是 8 位的,如果強制轉化,int 類型的高 24 位將會被丟棄,所以盡量不要這樣做。

17、hashCode有什么用?與 a.equals(b) 有什么關系?
????????hashCode方法對應對象的 hash 值。它常用于基于 hash 的集合類,如 Hashtable、HashMap、LinkedHashMap等等。根? ? ? ? ? ? 據 Java 規范,兩個使用 equal() 方法來判斷相等的對象,必須具有相同的 hash code。

18、垃圾回收的優點和原理。

????????垃圾回收可以有效的防止內存泄露,有效的使用可以使用的內存。垃圾回收器通常是作為一個單獨的低級別的線程運行,不可預知的情況下對內存堆中已經死亡的或者長時間沒有使用的對象進行清除和回收,程序員不能實時的調用垃圾回收器對某個對象或所有對象進行垃圾回收。回收機制有分代復制垃圾回收和標記垃圾回收,增量垃圾回收。

原理:可以給對象添加一個被引用的計數器,就可以判斷是否已經是無引用對象。但是難以解決循環引用問題。

如果不下小心直接把 Obj1-reference 和 Obj2-reference 置 null。則在 Java 堆當中的兩塊內存依然保持著互相引用無法回收。

可達性分析法:通過一系列的 ‘GC Roots’ 的對象作為起始點,從這些節點出發所走過的路徑稱為引用鏈。當一個對象到 GC Roots 沒有任何引用鏈相連的時候說明對象不可用。?

19,java中會存在內存泄漏嗎

內存泄漏:指一個不再被程序使用的對象或變量一直被占據在內存中。java中有垃圾回收機制,它可以保證當對象不再被引用的時候,對象將自動被垃圾回收器從內存中清除掉。

????????由于Java使用有向圖的方式進行垃圾回收管理,可以消除引用循環的問題,例如有兩個對象,相互引用,只要它們和根進程不可達,那么GC也是可以回收它們的。

java中的內存泄露的情況:長生命周期的對象持有短生命周期對象的引用就很可能發生內存泄露.

盡管短生命周期對象已經不再需要,但是因為長生命周期對象持有它的引用而導致不能被回收,這就是java中內存泄露的發生場景。通俗地說,就是程序員可能創建了一個對象,以后一直不再使用這個對象,這個對象卻一直被引用,即這個對象無用但是卻無法被垃圾回收器回收的,這就是java中可能出現內存泄露的情況,例如,緩存系統,我們加載了一個對象放在緩存中(例如放在一個全局map對象中),然后一直不再使用它,這個對象一直被緩存引用,但卻不再被使用。

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/445244.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/445244.shtml
英文地址,請注明出處:http://en.pswp.cn/news/445244.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

機器學習算法分類總結

機器學習方法分類總結 這篇文章只是一個類似于知識概括的文章,主要作用是幫忙梳理: 1) 分類 貝葉斯模型(Bayesian Mode) - 樸素貝葉斯算法(Naive Bayesian Mode) - 平均單依賴估計(AveragedO…

無限踩坑系列(5)-MySQLdb

MySQLdb在Python2.x 時使用的是MySQLdbpython3中這個庫已經不再使用了,所有的功能都由pymysql或mysqlclient替代。所以 想在python3中配MySQLdb真是一個深的不能再深的坑了。下面記錄了愚蠢的填坑過程,僅做有類似錯誤的參考。參考文檔:https:…

后端 分頁組件實例

/*** 分頁相關信息*/ public class Page {//當前頁碼private int current1;//顯示的上限private int limit10;//數據總數//用于計算頁數private int rows;//路徑private String path;public int getCurrent() {return current;}public void setCurrent(int current) {if (curre…

大數據學習(07)--MapReduce

文章目錄目錄1.MapReduce介紹1.1 什么是分布式并行編程?1.2 MapReduce模型介紹1.3 map和reduce函數2.MapReduce體系架構3.MapReduce工作流程3.1 概述3.2 MapReduce各個階段介紹3.3 shuffle過程介紹3.3.1 shuffle過程簡介3.3.2 map中的shuffle過程3.3.3 reduce中的sh…

關閉用playsound函數的WAV文件

播放聲音文件 PlaySound函數應用 1.關閉用playsound函數的WAV文件 PlaySound(0,NULL,0);即可 // test2.cpp : Defines the entry point for the application.//#include "stdafx.h"#include <mmsystem.h>int APIENTRY WinMain(HINSTANCE hInstance, …

身份驗證

傳統身份驗證的方法 HTTP 是一種沒有狀態的協議&#xff0c;也就是它并不知道是誰是訪問應用。這里我們把用戶看成是客戶端&#xff0c;客戶端使用用戶名還有密碼通過了身份驗證&#xff0c;不過下回這個客戶端再發送請求時候&#xff0c;還得再驗證一下。 解決的方法就是&…

Pytorch(4)-模型保存-載入-eval()

模型保存與提取1. 整個模型 保存-載入2. 僅模型參數 保存-載入3. GPU/CPU模型保存與導入4. net.eval()--固定模型隨機項神經網絡模型在線訓練完之后需要保存下來&#xff0c;以便下次使用時可以直接導入已經訓練好的模型。pytorch 提供兩種方式保存模型:方式1&#xff1a;保存整…

大數據學習(08)--Hadoop中的數據倉庫Hive

文章目錄目錄1.什么是數據倉庫&#xff1f;1.1數據倉庫概念1.2傳統數據倉庫面臨的挑戰1.3 Hive介紹1.4 Hive與傳統數據庫的對比1.5 Hive在企業中的部署與應用2.Hive系統架構3.Hive工作原理3.1 SQL轉換為MapReduce作業的基本原理3.2 Hive中SQL查詢轉換MapReduce作業的過程4.Hive…

dubbo知識點總結 持續更新

Dubbo 支持哪些協議&#xff0c;每種協議的應用場景&#xff0c;優缺點&#xff1f; ? dubbo&#xff1a; 單一長連接和 NIO 異步通訊&#xff0c;適合大并發小數據量的服務調用&#xff0c; 以及消費者遠大于提供者。傳輸協議 TCP&#xff0c;異步&#xff0c;Hessian 序列化…

使用Linux auto Makefile自動生成的運行步驟

首先創建一個 Linux Makefile.am.這一步是創建Linux Makefile很重要的一步&#xff0c;automake要用的腳本配置文件是Linux Makefile.am&#xff0c;用戶需要自己創建相應的文件。之后&#xff0c;automake工具轉換成Linux Makefile.in。AD&#xff1a; 在向大家詳細介紹Linux …

無限踩坑系列(6)-mySQL數據庫鏈接錯誤

mySQL數據庫鏈接錯誤錯誤1錯誤2長鏈接短連接應用場景需要一直訪問mySQL數據庫&#xff0c;遇到如下錯誤&#xff1a;錯誤1 釋放已經釋放的數據庫鏈接conn.&#xff0c;或者&#xff0c;操作已經釋放的數據庫鏈接conn.或者失去鏈接后再操作數據庫都可能會報這個錯誤 aise err.I…

初探函數式編程和面對對象式編程

文章目錄目錄1.函數式編程和面向對象編程概念1.1 函數式編程1.2 面向對象編程2.函數式編程和面向對象編程的優缺點2.1 函數式編程優點缺點2.2 面對對象編程優點缺點3.為什么在并行計算中函數式編程比較好3.1 什么是并行計算3.2 函數式編程興起原因目錄 1.函數式編程和面向對象…

linux常用解壓和壓縮文件的命令

linux常用解壓和壓縮文件的命令 .tar 解包&#xff1a;tar xvf FileName.tar打包&#xff1a;tar cvf FileName.tar DirName&#xff08;注&#xff1a;tar是打包&#xff0c;不是壓縮&#xff01;&#xff09;———————————————.gz解壓1&#xff1a;gunzip FileN…

Python外(4)-讀寫mat文件

讀寫mat文件1.讀取2.寫入.mat 是matlab中數據存儲的標準格式&#xff0c;Python中能夠通過庫scipy讀取和保存。導入scipy庫 from scipy import io 1.讀取 io.loadmat(file_name, mdictNone, appendmatTrue, **kwargs) 簡便方式&#xff1a; io.loadmat(file_name) append mat–…

Linux下的xml文件的創建

創建一個xml文檔流程如下&#xff1a; l 用xmlNewDoc函數創建一個文檔指針doc&#xff1b; l 用xmlNewNode函數創建一個節點指針root_node&#xff1b; l 用xmlDocSetRootElement將root_node設置為doc的根結點&#xff1b; l 給root_node添加一系列的子節點&#x…

壓力測試http_load 通過修改配置測試https協議成功了。

到http://www.acme.com/software/http_load/ 下載http_load &#xff0c;安裝也很簡單直接make;make instlall 就行。 如果你需要測試https&#xff0c;你必須將 Makefile中 # CONFIGURE: If you want to compile in support for https, uncomment these # definitions. You w…

面向對象設計與分析40講(16)靜態工廠方法模式

前面我們介紹了簡單工廠模式&#xff0c;在創建對象前&#xff0c;我們需要先創建工廠&#xff0c;然后再通過工廠去創建產品。 如果將工廠的創建方法static化&#xff0c;那么無需創建工廠即可通過靜態方法直接調用的方式創建產品&#xff1a; // 工廠類&#xff0c;定義了靜…

搜索詳解

搜索 一.dfs和bfs簡介 深度優先遍歷(dfs) 本質&#xff1a; 遍歷每一個點。 遍歷流程&#xff1a; 從起點開始&#xff0c;在其一條分支上一條路走到黑&#xff0c;走不通了就往回走&#xff0c;只要當前有分支就繼續往下走&#xff0c;直到將所有的點遍歷一遍。 剪枝&a…

Python外(5)-for-enumerate()-zip()

for循環小技巧技巧1&#xff1a;enumerate()技巧2&#xff1a;打包兩個可遍歷數據&#xff0c;一起循環-zip()技巧1&#xff1a;enumerate() 在使用pytorch訓練網絡的過程中&#xff0c;官方教程給出了 for i, data in enumerate(trainloader, 0): 這涉及到enumerate函數的使用…

特征工程總結

目錄1 特征工程是什么&#xff1f; 2 數據預處理   2.1 無量綱化     2.1.1 標準化     2.1.2 區間縮放法     2.1.3 標準化與歸一化的區別   2.2 對定量特征二值化   2.3 對定性特征啞編碼   2.4 缺失值計算   2.5 數據變換 3 特征選擇   3.1 Filter …