本文目錄一覽:
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基礎,練習題。
選擇題 (25道)
1. 下列選項中,不屬於Java語言特點的一項是( C )。
A:分散式 B:安全性 C:編譯執行 D:面向對象
2. Java語言的特點與 C/C+ +語言的比較中說法錯誤的是:( D )
A:簡單性Java繼承了 C/C+ +的語法 ,丟棄了其中不常用又容易引起混淆的功能。
B:Java是一種純面向對象的語言 ,具有封裝、繼承 ( Inheritance)和多態( Polymorphism)的特點。
C:Java應用程序可憑藉URL打開並訪問網路上的對象。
D:解釋型Java寫成的源代碼需要被編譯成高階的位元組碼 ,它們與機器架構有關。
3. 閱讀下列代碼,選出該代碼段正確的文件名( C )。
class A{
void method1(){
System.out.println(“Method1 in class A”);
}
}
public class B{
void method2(){
System.out.println(“Method2 in class B”);
}
public static void main(String[] args){
System.out.println(“main() in class B”);
}
}
A: A.java B:A.class C: B.java D: B.class
4. 如果一個類的文件名為Student.java,但是類的代碼為:
public class Student {
public static void main(String[] args) {
System.out.println(82);
}}
那麼下列說法正確的是:( B )
A:程序運行結果為8; B:程序運行結果為2;
C:程序運行結果為0; D:程序編譯錯誤,不能運行;
5. 符合對象和類的關係的是( D )。
A:教師和學生 B:書和房子
C:狗和貓 D:飛機和交通工具
6. 關於垃圾回收機制描述不正確的是( B )
A:垃圾回收機制不須通過程序員調用相應方法,也能自動啟動。
B:java程序員用System.gc()方法一定能進行垃圾回收;
C:垃圾回收機制屬於jvm自動操作,java程序員可以不進行垃圾回收操作。
D:垃圾回收機制並不是由操作系統自動執行。
7. 編譯下面源程序會得到哪些文件( D )?
class A1{
}
class A2 exdends A1{
}
public class B{
public static void main(String[] args){
}
}
A: 只有B.class文件 B:只有A1.class和A2.class文件
C: 編譯不成功 D:A1.class、A2.class和B.class文件
8. 下列關於基本數據類型的說法中,不正確的一項是( D )。
(A)boolean類型變數的值只能取真或假
(B)float是帶符號的32位浮點數
(C)double是帶符號的64位浮點數
(D)char是8位Unicode字元
9. 下列(D )是合法的標識符?
A:12class B:void C:-5 D:_blank
10. 在編寫Java程序時,如果不為類的成員變數定義初始值,Java會給出它們的默認值,下列說法中不正確的一個是( D )。
A:byte的默認值是0 B:boolean的默認值是false
C: char類型的默認值是』\0』 D: long類型的默認值是0.0L
11. 下列程序執行的結果是:( B )
public class News {
public static void main(String[] args) {
System.out.println(1+2+ “aa”+3);
}}
A: “12aa3” B: “3aa3 ” C: “12aa” D: “aa3”
12. 表達式(12==0) (1/0 1)的值為( B )。
A: true B: false C: 0 D: 運行時拋出異常
13. 下列循環體執行的次數是( C )。
int y=2, x=4;
while(–x != x/y){ }
A : 1 B: 2 C : 3 D : 4
14. 已知如下代碼:
switch(m){
case 0: System.out.println(“Condition 0”);
case 1: System.out.println(“Condition 1”);
case 2: System.out.println(“Condition 2”);
case 3: System.out.println(“Condition 3”);break;
default:System.out.println(“Other Condition”);
}
當m的值為( D )時,輸出「Condition 3」
(A)2 (B)0、1 (C)0、1、2 (D)0、1、2、3
15. 下列語句輸出的結果是:( C )
public class X3 {
public static void main(String[] args) {
for(int i=0; i10; i++){
if(i==5) break;
System.out.print(i);
}
}
}
A:編譯錯誤; B:1234;C:01234;D:12345;
16. 下列語句輸出的結果是:( D )
public class Lx1 {
public static void main(String[] args) {
for(int i=0;i5;i++){
switch(i){
case 0:System.out.print(“B”);
case 1:System.out.print(“e”);break;
case 2:System.out.print(“g”);
case 3:System.out.print(“!”);break;
case 4:System.out.print(“!”);break;
default:System.out.print(“!”);
}
}
}
}
A:Beg!!! B:Beeg! C:Beg! D:Beeg!!!
17. 下面foreach循環的程序輸出結果是( D )。
public class Lx1{
public static void main(String[] args) {
String s1[]={“歡迎您”,”3″,”G”,”同”,”學”,};
Arrays.sort(s1);
for(String s0:s1)
System.out.print (s0);
}
}
A:歡迎您3G同學 B:3G歡迎您同學 C:同學歡迎您3G D:3G同學歡迎您
18. 閱讀以下程序,選擇正確的運行結果:( B )
public class Lx1 {
public static void main(String[] args) {
byte d[]=”YOUIHE你我他”.getBytes();
String s=new String(d,6,2);
System.out.println(s);
}
}
A:HE; B:你; C:我; D:他
19. 設有下列數組定義語句:
int a[][]= {{1, 2}, {3}};
則對此語句的敘述正確的是( D )。
A: 定義了一個名為a的一維數組 B: a數組 a[1][1]為0
C: a數組元素的下標為1~3 D: 數組中每個元素的類型都是整數
20. 下列程序輸出的結果是:( B )
public class Lx1 {
public static void main(String[] args) {
String a[][] ={{“”,””,””,””},{“”},{“”,””}};
System.out.println(a[2].length);
}
}
A:1 B:2 C:3 D:4
21. 關於以下程序的說明,正確的是( C )
1. class StaticStuff
2. {
3. static int x=10;
4. static { x+=5;}
5. public static void main(String args[ ])
6. {
7. System.out.println(「x=」 + x);
8. }
9. static { x/=3;}
10. }
A、4行與9行不能通過編譯,因為缺少方法名和返回類型
B、9行不能通過編譯,因為只能有一個靜態初始化器
C、編譯通過,執行結果為:x=5
D、編譯通過,執行結果為:x=3
22. 給出下面代碼,關於該程序以下哪個說法是正確的?( C )
public class Person{
static int arr[] = new int[5];
public static void main(String a[]) {
for(int i=0;i
System.out.print(arr[0]);
}
}
A、編譯時將產生錯誤 B、編譯時正確,運行時將產生錯誤 C、輸出零 D、輸出空
23. 下面程序中類ClassDemo中定義了一個靜態變數sum,分析程序段的輸出結果。( C )
class ClassDemo {
public static int sum=1;
public ClassDemo() {
sum = sum + 5;}
}
public class ClassDemoTest{
public static void main(String args[]) {
ClassDemo demo1=new ClassDemo();
ClassDemo demo2=new ClassDemo();
System.out.println(demo1.sum);}
}
A: 0 B: 6 C: 11 D: 2
24. 下面關於方法的說法,不正確的是( C )。
A: Java中的構造方法名必須和類名相同
B: 方法體是對方法的實現,包括變數聲明和合法語句
C: 如果一個類定義了構造方法,也可以用該類的默認構造方法
D: 類的私有方法不能被其他類直接訪問
25. 在Java中下列說法正確的是( C )
A) 一個子類可以有多個父類,一個父類也可以有多個子類
B) 一個子類可以有多個父類,但一個父類只可以有一個子類
C) 一個子類可以有一個父類,但一個父類可以有多個子類
D) 上述說法都不對
JAVA基礎測試題
1 跟java運行的機制有關,java先載入靜態域,static int x=10; ,然後靜態塊static { x+=5;},static { x/=3;}(雖然位置在後但先運行) ,然後靜態方法static void main
所以x=10,x=15,x=5.
2 A因為int [ ] x = new int[25],數組建立後,每個元素默認值為0;x[24]=0;x[25] 下標越界,x[0]=0;
3 switch(i)不接受long型,int或者枚舉型可以。i=Integer.parseInt(args[0]);雖然這樣每課時i還是long型的。
4 c,沒什麼好說的,就是這麼規定的!
Java基礎面試題都有哪些?
1.java異常機制的原理與應用\x0d\x0a答:每當程序出現異常之後,如果程序沒有進行相應的處理,則程序會出現中斷現象。\x0d\x0a實際上,產生了異常之後,JVM會拋出一個異常類的實例化對象,如果此時使用了try語句捕獲的話,則可以進行異常的處理,否則,交給JVM進行處理。當try語句捕獲異常之後,將與catch語句的異常類型進行匹配,如果匹配成功則執行catch內的語句。簡單的應用:在所以throws語句的地方加入try-catch。標準應用:try-catch-finally-throw-throws一起使用。 \x0d\x0a\x0d\x0a2. 垃圾回收機制的優點\x0d\x0a答:釋放無用的對象所佔用的空間。方式:自動回收,手動回收。使用System.gc(),實際上調用Runtime.getRuntime().gc()\x0d\x0a\x0d\x0a3. Error與Exception區別\x0d\x0a答:Error是jvm進行處理,是jvm出錯\x0d\x0aexception是可以由程序處理的,可以用try-catch捕獲的\x0d\x0a\x0d\x0a4. final,finally,finallize\x0d\x0a答:final定義的變數的值不能改變,定義的方法不能被覆蓋,定義的類不能被繼承\x0d\x0afinally是異常的統一出口,finallize是垃圾回收前的收尾工作,是Object類定義的\x0d\x0a\x0d\x0a5. Anonymous Inner Class是否可以extends,是否可以implements Interface\x0d\x0a答:允許繼承和實現,因為匿名內部類就是在抽象類和介面的基礎上發展起來的\x0d\x0a\x0d\x0a6. Static Nested Class 與Inner Class的區別\x0d\x0a答:使用Static定義的Class就是外部類,可以通過外部類. 內部類直接訪問\x0d\x0a而Inner Class是不能被外部訪問的,只能通過外部類的實例再找到內部類實例。\x0d\x0a\x0d\x0a7. HashMap and HashTable?\x0d\x0a答:HashMap:1) released in jdk 1.2,new Class 2)採用非同步處理方式,性能較高,是非線程安全的 3)允許null\x0d\x0aHashTable:\x0d\x0a1)released in jdk 1.0 ,old Class \x0d\x0a2)採用同步處理方式,性能低,是線程安全的\x0d\x0a3)不允許null\x0d\x0a\x0d\x0a8. assert代表什麼?\x0d\x0a答:asserts是jdk 1.4之後發布的新關鍵字,表示斷言,即程序執行到某個地方肯定是預計的值,一般開發很少使用。要使用assert,必須加上 -ea參數\x0d\x0a\x0d\x0a9. gc是什麼?\x0d\x0a答:gc是garbage collection,垃圾回收,使用gc可以進行垃圾空間的釋放\x0d\x0a\x0d\x0a10. String s = new String(“xyz”)產生了幾個對象?\x0d\x0a答:一個匿名對象xyz,在棧空間內。一個new實例化的對象,在堆空間內。\x0d\x0a\x0d\x0a11. sleep() and wait()?\x0d\x0a答:sleep()是Thread類定義方法,表示線程的休眠,可以自動喚醒\x0d\x0await()方法是Object類定義的方法,需要手動notify()和notifyAll()//sleep()不釋放資源,wait()釋放資源\x0d\x0a\x0d\x0a12. Overload與Override的區別\x0d\x0a答:Overload:重載\x0d\x0a |- 在一個類中定義的若干方法\x0d\x0a |- 所有的方法名相同,但參數類型或個數不同\x0d\x0a |- 只有參數有關,與返回類型無關\x0d\x0aOverride:覆寫\x0d\x0a |- 在繼承的關係中\x0d\x0a |- 子類定義了父類同名的方法,參數類型或個數最好完全一樣。\x0d\x0a |- 訪問許可權不能更嚴格\x0d\x0a\x0d\x0a13. abstract class 和 interface有什麼區別?\x0d\x0a答:抽象類:\x0d\x0a |-由抽象方法和常量、變數、全局常量、構造方法、普通方法組成\x0d\x0a |-使用abstract聲明\x0d\x0a |-子類要通過extends繼承抽象類,子類如果不是抽象類,則必須覆寫抽象類的全部抽象方法\x0d\x0a |-存在單繼承的局限\x0d\x0a |-抽象類可以實現若干個介面\x0d\x0a介面:\x0d\x0a |-由抽象方法和全局常量組成\x0d\x0a |-使用interface關鍵字\x0d\x0a |-子類要通過implements實現介面,子類如果不是抽象類,則必須覆寫抽象類的全部抽象方法\x0d\x0a |-一個子類可以實現多個介面\x0d\x0a |-介面不能繼承一個抽象類,但允許繼承多個介面
Java題目 求教 基礎題
你的變數寫的沒有問題,這個類里的方法塊之外的可以叫全局變數,但是system.out是需要編譯方法編譯才能輸出的
原創文章,作者:EOQYL,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/316863.html