當前位置:首頁 » 編程語言 » java架構面試題

java架構面試題

發布時間: 2025-03-15 05:06:03

java面試題:3道問答題!

1:堆棧都是內存的可用區域,但是 堆的速度慢容量大,棧的速度快容量小。一個64K的字元串,自然放在堆。棧的內存是很寶貴的。
2:介面和抽象類都是面向對象編程的特點,都是可繼承(實現)為明確的類。一般:所描述的事物(事件)屬於很抽象的,則先使用介面表達這個事物,然後使用抽象類實現劃分出各種分類事物。例如:List 介面下有抽象類:AbstractSequentialList<E> AbstractList<E>等,然後才有LinkedList ArrayList
3:如果這兩個重復的數字沒有說出其大小。並且數組是有序的,那就挨著比較2個相鄰的數。或者:
int i=0;
Set<Integer> set=new HashSet<Integer>();
for(;i<array.length;i++)
if(set.add(array[i])) break;

array[i];//就是了

㈡ java面試題

1. List 以特定次序來持有元素,可有重復元素。 Set 無法擁有重復元素 , 內 部
排序。 Map 保存 key-value 值, value 可多值。

2. ArrayList 是使用數組方式存儲數據,此數組元素數大於實際存儲的數據以便增加和插入元素,它們都允許直接按序號索引元素,但是插入 元素要涉及數組元素移動等內存操作,所以索引數據快而插入數據慢, 而LinkedList 使用雙向鏈表實現存儲,按序號索引數據需要進行前向或後向遍歷 ,但是插入數據時只需要記錄本項的前後項即可,所以插入速度較快。

3.try 用來指定一塊預防所有 「 異常 」 的程序;
catch 子句緊跟在 try 塊後面,用來指定你想要捕捉的 「 異常 」 的類型;
throw 語句用來明確地拋出一個 「 異常 」 ;
throws 用來標明一個成員函數可能拋出的各種 「 異常 」 ;
Finally 為確保一段代碼不管發生什麼 「 異常 」 都被執行一段代碼;
可以在一個成員函數調用的外面寫一個 try 語句,在這個成員函數內部寫另 一
個 try 語句保護其他代碼。每當遇到一個 try 語句, 「 異常 」 的框架就放到堆 棧
上面,直到所有的 try 語句都完成。如果下一級的 try 語句沒有對某種 「 異常 」
進行處理,堆棧就會展開,直到遇到有處理這種 「 異常 」 的 try 語句。

4. Java 通過面向對象的方法進行異常處理,把各種不同的異常進行分類,並提供了良好的介面。在 Java 中,每個異常都是一個對象,它是 Throwable 類或其它子類的實例。當一個方法出現異常後便拋出一個異常對象,該對象中包含 有異常信息,調用這個對象的方法可以捕獲到這個異常並進行處理。 Java 的異常處理是通過 5 個關鍵詞來實現的: try 、 catch 、 throw 、 throws 和 finally 。一般情況下是用 try 來執行一段程序,如果出現異常,系統會拋出( throws )一 個異常,這時候你可以通過它的類型來捕捉( catch )它,或最後( finally )由 預設處理器來處理。

㈢ java面試題 很急 謝謝

2, 歸並排序(merge sort)體現了分治的思想,即將一個待排序數組分為兩部分,對這兩個部分進行歸並排序,排序後,再對兩個已經排序好的數組進行合並。這種思想可以用遞歸方式很容易實現。歸並排序的時間復雜度為O(nlogn),空間復雜度為O(n)。

實現代碼如下:
#include <stdio.h>
#include "common.h"
void merge(int data[], int p, int q, int r)
{
int i, j, k, n1, n2;
n1 = q - p + 1;
n2 = r - q;
int L[n1];
int R[n2];
for(i = 0, k = p; i < n1; i++, k++)
L[i] = data[k];
for(i = 0, k = q + 1; i < n2; i++, k++)
R[i] = data[k];
for(k = p, i = 0, j = 0; i < n1 && j < n2; k++)
{
if(L[i] > R[j])
{
data[k] = L[i];
i++;
}
else
{
data[k] = R[j];
j++;
}
}
if(i < n1)
{
for(j = i; j < n1; j++, k++)
data[k] = L[j];
}
if(j < n2)
{
for(i = j; i < n2; i++, k++)
data[k] = R[i];
}
}
void merge_sort(int data[], int p, int r)
{
if(p < r)
{
int q = (p + r) / 2;
merge_sort(data, p, q);
merge_sort(data, q + 1, r);
merge(data, p, q, r);
}
}

void test_merge_sort()
{
int data[] = {44, 12, 145, -123, -1, 0, 121};
printf("-------------------------------merge sort----------------------------\n");
out_int_array(data, 7);
merge_sort(data, 0, 6);
out_int_array(data, 7);
}

int main()
{
test_merge_sort();
return 0;
}

4.對於有n個結點的線性表(e0,e1,…,en-1),將結點中某些數據項的值按遞增或遞減的次序,重新排列線性表結點的過程,稱為排序。排序時參照的數據項稱為排序碼,通常選擇結點的鍵值作為排序碼。

若線性表中排序碼相等的結點經某種排序方法進行排序後,仍能保持它們在排序之前的相對次序,稱這種排序方法是穩定的;否則,稱這種排序方法是不穩定的。

在排序過程中,線性表的全部結點都在內存,並在內存中調整它們在線性表中的存儲順序,稱為內排序。在排序過程中,線性表只有部分結點被調入內存,並藉助內存調整結點在外存中的存放順序的排序方法成為外排序。

下面通過一個表格簡單介紹幾種常見的內排序方法,以及比較一下它們之間的性能特點。

排序方法
簡介
平均時間
最壞情況
輔助存儲
是否穩定

簡單排序
選擇排序
反復從還未排好序的那部分線性表中選出鍵值最小的結點,並按從線性表中選出的順序排列結點,重新組成線性表。直至未排序的那部分為空,則重新形成的線性表是一個有序的線性表。
O( )
O( )
O(1)
不穩定

直接插入排序
假設線性表的前面I個結點序列e0,e1,…,en-1是已排序的。對結點在這有序結點ei序列中找插入位置,並將ei插入,而使i+1個結點序列e0,e1,…,ei也變成排序的。依次對i=1,2,…,n-1分別執行這樣的插入步驟,最終實現線性表的排序。
O( )
O( )
O(1)
穩定

冒泡排序
對當前還未排好序的范圍內的全部結點,自上而下對相鄰的兩個結點依次進行比較和調整,讓鍵值大的結點往下沉,鍵值小的結點往上冒。即,每當兩相鄰比較後發現它們的排列順序與排序要求相反時,就將它們互換。
O( )
O( )
O(1)
穩定

希爾排序
對直接插入排序一種改進,又稱「縮小增量排序」。先將整個待排序列分割成為若乾子序列分別進行直接插入排序,待整個序列中的記錄「基本有序」時,再對全體記錄進行一次直接插入排序。
kn ln n
O( )
O(logn)
不穩定

快速排序
對冒泡排序的一種本質的改進。通過一趟掃視後,使待排序序列的長度能大幅度的減少。在一趟掃視後,使某個結點移到中間的正確位置,並使在它左邊序列的結點的鍵值都比它的小,而它右邊序列的結點的鍵值都不比它的小。稱這樣一次掃視為「劃分」。每次劃分使一個長序列變成兩個新的較小子序列,對這兩個小的子序列分別作同樣的劃分,直至新的子序列的長度為1使才不再劃分。當所有子序列長度都為1時,序列已是排好序的了。
O(nlogn)
O( )
O(logn)
不穩定

堆排序
一種樹形選擇排序,是對直接選擇排序的有效改進。一個堆是這樣一棵順序存儲的二叉樹,它的所有父結點(e[i])的鍵值均不小於它的左子結點(e[2*i+1])和右子結點(e[2*i+2])的鍵值。初始時,若把待排序序列的n個結點看作是一棵順序存儲的二叉樹,調整它們的存儲順序,使之成為一個堆,這時堆的根結點鍵值是最大者。然後將根結點與堆的最後一個結點交換,並對少了一個結點後的n-1結點重新作調整,使之再次成為堆。這樣,在根結點得到結點序列鍵值次最大值。依次類推,直到只有兩個結點的堆,並對它們作交換,最後得到有序的n個結點序列。
O(nlogn)
O(nlogn)
O(1)
不穩定

歸並排序
將兩個或兩個以上的有序子表合並成一個新的有序表。對於兩個有序子表合並一個有序表的兩路合並排序來說,初始時,把含n個結點的待排序序列看作有n個長度都為1的有序子表所組成,將它們依次兩兩合並得到長度為2的若干有序子表,再對它們作兩兩合並……直到得到長度為n的有序表,排序即告完成。
O(nlogn)
O(nlogn)
O(n)
穩定

後面根據各種排序演算法,給出了C語言的實現,大家在復習的時候可以做下參考。

u 選擇排序

void ss_sort(int e[], int n)

{ int i, j, k, t;

for(i=0; i< n-1; i++) {

for(k=i, j=i+1; j<n; j++)

if(e[k]>e[j]) k=j;

if(k!=i) {

t=e[i]; e[i]=e[k]; e[k]=t;

}

}

}

u 直接插入排序

void si_sort(int e[], int n)

{ int i, j, t;

for(i=0; i< n; i++) {

for(t=e[i], j=i-1; j>=0&&t<e[j]; j--)

e[j+1]=e[j];

e[j+1]=t;

}

}

u 冒泡排序

void sb_sort(int e[], int n)

{ int j, p, h, t;

for(h=n-1; h>0; h=p) {

for(p=j=0; j<h; j++)

if(e[j]>e[j+1]) {

t=e[j]; e[j]=e[j+1]; e[j+1]=t;

p=j;

}

}

}

u 希爾排序

void shell(int e[], int n)

{ int j, k, h, y;

for(h=n/2; h>0; h=h/2)

for(j=h; j<n; j++) {

y=e[j];

for(k=j-h; k>0&&y<e[k]; k-=h)

e[k+h]=e[k];

e[k+h]=y;

}

}

u 堆排序

void sift(e, n, s)

int e[];

int n;

int s;

{ int t, k, j;

t=e[s];

k=s; j=2*k+1;

while(j<n) {

if(j<n-1&&e[j]<e[j+1])

j++;

if(t<e[j]) {

e[k]=e[j];

k=j;

j=2*k+1;

}else break;

}

e[k]=t;

}

void heapsorp (int e[], int n)

{ int i, k, t;

for(i=n/2-1; i>=0; i--)

sift(e, n, i);

for(k=n-1; k>=1; k--) {

t=e[0]; e[0]=e[k]; e[k]=t;

sift(e, k, 0);

}

}

u 快速排序

void r_quick(int e[], int low, int high)

{ int i, j, t;

if(low<high) {

i=low; j=high; t=e[low];

while(i<j) {

while (i<j&&e[j]>t) j--;

if(i<j) e[I++]=e[j];

while (i<j&&e[i]<=t) i++;

if(I<j) e[j--]=e[i];

}

e[i]=t;

r_quick(e,low,i-1);

r_quick(w,i+1,high);

}

}

另外,外排序是對大型文件的排序,待排序的記錄存儲在外存中,在排序過程中,內存只存儲文件的一部分記錄,整個排序過程需進行多次的內外存間的交換。

*** 查找

查找就是在按某種數據結構形式存儲的數據集合中,找出滿足指定條件的結點。

按查找的條件分類,有按結點的關鍵碼查找、關鍵碼以外的其他數據項查找或其他數據項的組合查找等。按查找數據在內存或外存,分內存查找和外存查找。按查找目的,查找如果只是為了確定指定條件的結點存在與否,成為靜態查找;查找是為確定結點的插入位置或為了刪除找到的結點,稱為動態查找。

這里簡單介紹幾種常見的查找方法。

u 順序存儲線性表的查找

這是最常見的查找方式。結點集合按線性表組織,採用順序存儲方式,結點只含關鍵碼,並且是整數。如果線性表無序,則採用順序查找,即從線性表的一端開始逐一查找。而如果線性表有序,則可以使用順序查找、二分法查找或插值查找。

u 分塊查找

分塊查找的過程分兩步,先用二分法在索引表中查索引項,確定要查的結點在哪一塊。然後,再在相應塊內順序查找。

u 鏈接存儲線性表的查找

對於鏈接存儲線性表的查找只能從鏈表的首結點開始順序查找。同樣對於無序的鏈表和有序的鏈表查找方法不同。

u 散列表的查找

散列表又稱雜湊表,是一種非常實用的查找技術。它的原理是在結點的存儲位置和它的關鍵碼間建立一個確定的關系,從而讓查找碼直接利用這個關系確定結點的位置。其技術的關鍵在於解決兩個問題。

I. 找一個好的散列函數

㈣ 面試JAVA程序員最基本的面試題有哪些

java異常機制的原理與應用
答:每當程序出現異常之後,如果程序沒有進行相應的處理,則程序會出現中斷現象。
實際上,產生了異常之後,JVM會拋出一個異常類的實例化對象,如果此時使用了try語句捕獲的話,則可以進行異常的處理,否則,交給JVM進行處理。當try語句捕獲異常之後,將與catch語句的異常類型進行匹配,如果匹配成功則執行catch內的語句。簡單的應用:在所以throws語句的地方加入try-catch。標准應用:try-catch-finally-throw-throws一起使用。
2. 垃圾回收機制的優點
答:釋放無用的對象所佔用的空間。方式:自動回收,手動回收。使用System.gc(),實際上調用Runtime.getRuntime().gc()
3. Error與Exception區別
答:Error是jvm進行處理,是jvm出錯
exception是可以由程序處理的,可以用try-catch捕獲的
4. final,finally,finallize
答:final定義的變數的值不能改變,定義的方法不能被覆蓋,定義的類不能被繼承
finally是異常的統一出口,finallize是垃圾回收前的收尾工作,是Object類定義的
5. Anonymous Inner Class是否可以extends,是否可以implements Interface
答:允許繼承和實現,因為匿名內部類就是在抽象類和介面的基礎上發展起來的
6. Static Nested Class 與Inner Class的區別
答:使用Static定義的Class就是外部類,可以通過外部類. 內部類直接訪問
而Inner Class是不能被外部訪問的,只能通過外部類的實例再找到內部類實例。
7. HashMap and HashTable?
答:HashMap:1) released in jdk 1.2,new Class 2)採用非同步處理方式,性能較高,是非線程安全的 3)允許null
HashTable:1)released in jdk 1.0 ,old Class 2)採用同步處理方式,性能低,是線程安全的3)不允許null
8. assert代表什麼?
答:asserts是jdk 1.4之後發布的新關鍵字,表示斷言,即程序執行到某個地方肯定是預計的值,一般開發很少使用。要使用assert,必須加上 -ea參數
9. gc是什麼?
答:gc是garbage collection,垃圾回收,使用gc可以進行垃圾空間的釋放
10. String s = new String("xyz")產生了幾個對象?
答:一個匿名對象xyz,在棧空間內。一個new實例化的對象,在堆空間內。
11. sleep() and wait()?
答:sleep()是Thread類定義方法,表示線程的休眠,可以自動喚醒
wait()方法是Object類定義的方法,需要手動notify()和notifyAll()//sleep()不釋放資源,wait()釋放資源
12. java中存在goto,但不能使用
13.數組有沒有length(),String有沒有length()?
答:數組有length屬性,String有length()
14. Overload與Override的區別
答:Overload:重載
|- 在一個類中定義的若干方法
|- 所有的方法名相同,但參數類型或個數不同
|- 只有參數有關,與返回類型無關
Override:覆寫
|- 在繼承的關系中
|- 子類定義了父類同名的方法,參數類型或個數最好完全一樣。
|- 訪問許可權不能更嚴格
15. Set里的元素不能重復,用什麼方法區分?==與equals()方法的區別
答:set里的元素是不能重復的,用iterator()方法來區分重復與否,==屬於地址比較,
==用於比較引用和比較基本數據類型時具有不同的功能:
比較基本數據類型,如果兩個值相同,則結果為true
而在比較引用時,如果引用指向內存中的同一對象,結果為true
16. 列出常見的 runtime exception
答:NumberFormatException/ArrayOutIndexofBoundException/NullPointerException/ClassCastException
17. abstract class 和 interface有什麼區別?
答:抽象類:
|-由抽象方法和常量、變數、全局常量、構造方法、普通方法組成
|-使用abstract聲明
|-子類要通過extends繼承抽象類,子類如果不是抽象類,則必須覆寫抽象類的全部抽象方法
|-存在單繼承的局限
|-抽象類可以實現若干個介面
介面:
|-由抽象方法和全局常量組成
|-使用interface關鍵字
|-子類要通過implements實現介面,子類如果不是抽象類,則必須覆寫抽象類的全部抽象方法
|-一個子類可以實現多個介面
|-介面不能繼承一個抽象類,但允許繼承多個介面
18. 啟動一個線程要用start(),因為要通知jvm進行cpu資源的分配
19. try{}裡面有一個return,問finally{}裡面的代碼是否執行,在什麼時機執行?
答:finally{}裡面的代碼執行,在return之前。
20. 寫一個singleton
答:singleton的核心就是構造方法私有化,Class,Runtime都採用單例
package com.leongod.demo;
public class Singleton(){
private static final sin = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return sin;
}
}
21. 程序設計:輸入一組數字,然後排序輸出
答:package com.leongod.demo;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class IO {
public static void main(String[] args) throws Exception {
BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
System.out.println("請輸入一組數字,中間用空格分割:");
String str = buf.readLine();
Set<Integer> set = new TreeSet<Integer>();
String[] arr = str.split(" ");

for(String s : arr) {
if (s.matches("\\d+")) {
set.add(Integer.parseInt(s));
}
}

Iterator<Integer> it = set.iterator();
System.out.println("排序後的結果:");
while (it.hasNext()) {
System.out.print(it.next() + ",");
}
}
}
22.列出目錄內的文件
package com.leongod.demo;
import java.io.File;
import com.sun.org.apache.xpath.internal.functions.FuncBoolean;
public class FileDemo {
public static void main(String[] args) {
?? File file = new File("D:" + File.separator + "kongkong");
?? fun(file);
}

public static void fun(File file) {
if (file.isDirectory()) {
File[] lf = file.listFiles();
if (lf != null) {
for(File f : lf) {
fun(f);
}
}
}else {
System.out.println(file.toString());
}
}
}
23. char可以存一個中文漢字嗎?
答:可以,使用了unicode編碼
24.多線程有幾種實現方法,都是什麼?同步有幾種實現方法,都是什麼?
答:兩種多線程方法,繼承Thread類,實現Runnable介面
|-Thread類是Runnable介面的子類
|-使用Runnable介面可以實現資源共享的目的
|-所有線程操作都必須通過Thread類的start()方法啟動
兩種實現同步的方法:
|-同步代碼塊:Synchronized(this)
|-同步方法
25.f=3.4是不對的,3.4默認是double類型的
26.String and StringBuffer?
答:String 不可以修改,StringBuffer可以修改
27.Class.forname向容器中載入驅動程序
28.int與Integer有什麼區別?
答:int是基本數據類型,Integer是包裝類
在jdk1.5以後,可以實現自動裝箱和拆箱
29.2*8有效的方法是移位操作:2<<3
30.請說出類集框架的完整結構
答:類級框架的最大介面:Collection、Map、Iterator、Enumeration
Collection:存放單值
|-List:允許有重復內容
|-ArrayList:非同步處理,新的操作類,非線程安全
|-Vector:同步處理,舊的操作類,線程安全,支持Enumeration
|-Set:不允許有重復的內容,依靠hashCode()和equals()進行重復的驗證
|-HashSet:無序存放
|-TreeSet:有序存放,按Comparable排序
|-Map:存放一對值
|-HashMap:新的類,非同步處理,非線程安全,允許有null
|-HashTable:舊的類,同步處理,線程安全,不允許有null
|-TreeMap:有序排列,按key配需
|-Iterator:迭代輸出,依靠collection介面中的iterator方法輸出,是新的輸出標准
31.是否可以繼承String類?答:不可以,因為使用了final關鍵字

㈤ java基礎面試題有哪些

下面是10道java基礎面試題,後附答案

1.什麼是 Java 虛擬機?為什麼 Java 被稱作是「平台無關的編程語言」?

Java 虛擬機是一個可以執行 Java 位元組碼的虛擬機進程。Java 源文件被編譯成能被 Java 虛擬機執行的位元組碼文件。

Java 被設計成允許應用程序可以運行在任意的平台,而不需要程序員為每一個平台單獨重寫或者是重新編譯。Java 虛擬機讓這個變為可能,因為它知道底層硬體平台的指令長度和其他特性。

2.「static」關鍵字是什麼意思?Java 中是否可以覆蓋(override)一個 private 或者是static 的方法?

「static」關鍵字表明一個成員變數或者是成員方法可以在沒有所屬的類的實例變數的情況下被訪問。

Java 中 static 方法不能被覆蓋,因為方法覆蓋是基於運行時動態綁定的,而 static 方法是編譯時靜態綁定的。static 方法跟類的任何實例都不相關,所以概念上不適用。

3.JDK 和 JRE 的區別是什麼?

Java 運行時環境(JRE)是將要執行 Java 程序的 Java 虛擬機。它同時也包含了執行 applet 需要的瀏覽器插件。Java 開發工具包 (JDK)是完整的 Java 軟體開發包,包含了 JRE,編譯器和其他的工具(比如:JavaDoc,Java 調試器),可以讓開發者開發、編譯、執行 Java 應用程序。

4.是否可以在 static 環境中訪問非 static 變數?

static 變數在 Java 中是屬於類的,它在所有的實例中的值是一樣的。當類被 Java 虛擬機載入的時候,會對 static 變數進行初始化。如果你的代碼嘗試不用實例來訪問非 static 的變數,編譯器會報錯,因為這些變數還沒有被創建出來,還沒有跟任何實例關聯上。

5.Java 支持的數據類型有哪些?什麼是自動拆裝箱?

Java 語言支持的 8 中基本數據類型是:

byte

short

int

long

float

double

boolean

char

自動裝箱是 Java 編譯器在基本數據類型和對應的對象包裝類型之間做的一個轉化。比如:把 int 轉化成 Integer,double 轉化成 double,等等。反之就是自動拆箱。

6.Java 支持多繼承么?

不支持,Java 不支持多繼承。每個類都只能繼承一個類,但是可以實現多個介面。

7.Java 中,什麼是構造函數?什麼是構造函數重載?什麼是復制構造函數?

當新對象被創建的時候,構造函數會被調用。每一個類都有構造函數。在程序員沒有給類提供構造函數的情況下,Java 編譯器會為這個類創建一個默認的構造函數。

Java 中構造函數重載和方法重載很相似。可以為一個類創建多個構造函數。每一個構造函數必須有它自己唯一的參數列表。

Java 不支持像 C++中那樣的復制構造函數,這個不同點是因為如果你不自己寫構造函數的情況下,Java 不會創建默認的復制構造函數。

8.Java 中的方法覆蓋(Overriding)和方法重載(Overloading)是什麼意思?

Java 中的方法重載發生在同一個類裡面兩個或者是多個方法的方法名相同但是參數不同的情況。與此相對,方法覆蓋是說子類重新定義了父類的方法。方法覆蓋必須有相同的方法名,參數列表和返回類型。覆蓋者可能不會限制它所覆蓋的方法的訪問。

9.介面和抽象類的區別是什麼?

Java 提供和支持創建抽象類和介面。它們的實現有共同點,不同點在於:

介面中所有的方法隱含的都是抽象的。而抽象類則可以同時包含抽象和非抽象的方法。

類可以實現很多個介面,但是只能繼承一個抽象類

類如果要實現一個介面,它必須要實現介面聲明的所有方法。但是,類可以不實現抽象類聲明的所有方法,當然,在這種情況下,類也必須得聲明成是抽象的。

抽象類可以在不提供介面方法實現的情況下實現介面。

Java 介面中聲明的變數默認都是 final 的。抽象類可以包含非 final 的變數。

Java 介面中的成員函數默認是 public 的。抽象類的成員函數可以是 private, protected 或者是 public。

介面是絕對抽象的,不可以被實例化。抽象類也不可以被實例化,但是,如果它包含 main 方法的話是可以被調用的。

10.什麼是值傳遞和引用傳遞?

對象被值傳遞,意味著傳遞了對象的一個副本。因此,就算是改變了對象副本,也不會影響源對象的值。

對象被引用傳遞,意味著傳遞的並不是實際的對象,而是對象的引用。因此,外部對引用對象所做的改變會反映到所有的對象上。

最後祝你面試順利!

㈥ Java面試題,常見面試題及答案匯總

Java最新面試題附贈答案

Q1: Java內部類和子類之間有什麼區別?

答案:內部類是指在一個外部類的內部再定義一個類,內部類對外部類有訪問許可權,可以訪問類中定義的所有變數和方法。子類是從父類(superclass)中繼承的類,子類可以訪問父類所有public和protected的欄位和方法。

Q2: 靜態方法和靜態變數的目的是什麼?

答案:靜態變數被類的所有實例共用,靜態類只能訪問類的靜態變數,或調用類的靜態方法。

Q3: Java語言中有哪些常見的訪問說明符,有什麼意義?

答案:Java中的訪問說明符是放在類名之前,用於定義訪問范圍的關鍵字,常見的訪問說明符有以下幾類:

Public:公共,能被項目中的任何一個Class、Method、Field訪問。

Protected:受保護,能被同類或子類訪問,不能從外部訪問。

Default:默認,只能被同一個包的ClassMethod、Field訪問。

Private:私有,只能被本類訪問。

Q4: 什麼是數據封裝及其意義?

答案:封裝是面向對象編程中用於在單個單元中組合屬性和方法。封裝可以幫助程序員遵循模塊化方法進行軟體開發,每個對象都有自己的一組方法和變數,並且可以獨立干其他對象來執行其功能。另外,封裝也有數據隱藏的目的。

Q5: 什麼是 singleton class(單例類)? 並給出其用法的實際例子。

答案:單例類只能有一個實例,必須自己創建自己的唯一實例,必須給所有其他對象提供這一實例。單例做差枯使用場景的最佳實踐是由於某些驅動程序限制,或由於許可問題的限制只能連接資料庫

Q6: 什麼是循環? Java中有哪些循環?

答案:循環用於編程中重復執行語句,Java中的循環有三類:

1、for循環

for循環用於執行指定重復次數的語句,當程序員明確知道循環次數可以使用for循環。

2、While循環

當語句滿足條件時開始進行重復執行,直到語句不再滿足條件退出循環。While循環中在執行語句之前先檢查是否滿足條件。

3、do while循環

Do while 和while循環基本類似,唯一不同的是do while是先執行語句再檢查條件,也就是說dowhile循環至少會執行一次語句。

Q7: 什麼是無限循環? 如何聲明無限循環?

答案:無限循環是指無條件執行,無限運行。無限循環可以由定義中斷語句塊來結束。

Q8: Java中的double和float變數有什麼區別?

答案: float是單精度浮點數,內存中佔用4位元組double是雙精慶冊度浮點數,內存中佔用8位元組。

Q9: Java中的Final關鍵字是什麼意思純洞? 請舉例說明。

答案: final是Java中的關鍵字,有「無法改變」、「終態」的含義,final類不能被繼承,沒有子類,final類中的方法默認是final的,且不能被子類的方法覆蓋,但可以被繼承。final成員變數表示常量,只能被賦值一次,賦值後值不再改變。final不能用於修飾構造方法。下面的例子中,const_val被聲明且賦值為常量100:Private Final int const_val=100而當一個方法被聲明為final之後,它不能被子類覆蓋,而且會比其他方法都快。

Q10: 舉例說明什麼是三元運算符?

答案:三元運算符,也稱為條件運算符,根據布爾值來決定將哪個值分配給變數,它被表示為...? ...:...

在下面的示例中,如果rank為1,status=Done,否則status=Pending。

Q11: 什麼是Java Packages? 其意義是什麼?

答案:為了更好地組織類,Java 提供了包機制,用於區別類名的命名空間。

包的作用:

1、把功能相似或相關的類或介面組織在同一個包中,方便類的查找和使用。

2、如同文件夾一樣,包也採用了樹形目錄的存儲方式。同一個包中的類名字是不同的,不同的包中的類的名字是可以相同的,當同時調用兩個不同包中相同類名的類時,應該加上包名加以區別。因此,包可以避免名字沖突。3、包也限定了訪問許可權,擁有包訪問許可權的類才能訪問某個包中的類。

熱點內容
ftprpm安裝包下載 發布:2025-03-15 09:03:53 瀏覽:720
如何判斷背包配置 發布:2025-03-15 09:03:00 瀏覽:898
淘寶api源碼 發布:2025-03-15 09:00:00 瀏覽:158
壓縮復原修車 發布:2025-03-15 08:46:52 瀏覽:77
linux調試匯編 發布:2025-03-15 08:38:09 瀏覽:106
手機上編寫c語言 發布:2025-03-15 08:17:53 瀏覽:754
上傳迅雷下載速度 發布:2025-03-15 08:07:50 瀏覽:554
好看解壓書 發布:2025-03-15 08:04:18 瀏覽:672
文字頁游源碼 發布:2025-03-15 08:02:29 瀏覽:315
怎麼看自己微信密碼 發布:2025-03-15 07:53:58 瀏覽:791