1.存在使i + 1 < i的數嗎()
答案:存在
解析:如果i爲int型,那麼當i爲int能表示的最大整數時,i+1就溢出變成負數了,此時不就<i了嗎。
2.存在使i > j || i <= j不成立的數嗎()
答案:存在
解析:比如Double.NaN或Float.NaN
3.下面哪個流類屬於面向字符的輸入流( )
A BufferedWriter B FileInputStream C ObjectInputStream D InputStreamReader
答案:D
解析:Java的IO操作中有面向字節(Byte)和麪向字符(Character)兩種方式。
以InputStream(輸入)/OutputStream(輸出)爲後綴的是字節流; 以Reader(輸入)/Writer(輸出)爲後綴的是字符流。
4. ArrayList list = new ArrayList(20);中的list擴充幾次()
5.下面程序的運行結果是什麼()
class HelloA { public HelloA() {
System.out.println("HelloA");
}
{ System.out.println("I'm A class"); } static { System.out.println("static A"); }
}
public class HelloB extends HelloA {
public HelloB() {
System.out.println("HelloB");
}
{ System.out.println("I'm B class"); }
static { System.out.println("static B"); }
public static void main(String[] args) { new HelloB();
}
}
答案:
static A
static B
I'm A class
HelloA
I'm B class
HelloB
6.下面代碼的運行結果爲:()
import java.io.*;
import java.util.*;
public class foo{
public static void main (String[] args){
String s;
System.out.println("s=" + s);
}
}
答案:由於String s沒有初始化,代碼不能編譯通過;Java中所有定義的基本類型或對象都必須初始化才能輸出值。
7.選項中哪一行代碼可以替換題目中//add code here而不產生編譯錯誤?()
Apublic abstract void method(int a);
B constInt = constInt + 5;
C public int method();
D public abstract void anotherMethod() {}
答案:A
解析:考察抽象類的使用。
8. 閱讀Shape和Circle兩個類的定義。在序列化一個Circle的對象circle到文件時,下面哪個字段會被保存到文件中? ( )
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
class Shape
{
public String name;
}
public class Circle extends Shape implements Serializable{
private float radius;
transient int color;
public static String type = "Circle";
public static void main(String[] args) {
//1.try-with-resource創建文件流
try (ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("E:/eclipse/workspace/work/circle.txt"))){
Circle circle = new Circle();
//2.將對象序列化到文件
oos.writeObject(circle);
} catch (Exception e) {
e.printStackTrace();
}
}
}
A name
B radius
C color
D type
答案:B
解析 1.父類無序列化,2.transient 3.static (反序列化時可以看到這個值,不過值爲類的靜態值而不是反序列化值)
9.輸出內容
public class Dervied extends Base {
private String name = "dervied";
public Dervied() {
tellName();
printName();
}
public void tellName() {
System.out.println("Dervied tell name: " + name);
}
public void printName() {
System.out.println("Dervied print name: " + name);
}
public static void main(String[] args){ new Dervied();
}
}
class Base {
private String name = "base";
public Base() {
tellName();
printName();
} public void tellName() {
System.out.println("Base tell name: " + name);
} public void printName() {
System.out.println("Base print name: " + name);
}
}
答案:
Dervied tell name: null
Dervied print name: null
Dervied tell name: dervied
Dervied print name: dervied
10.以下程序的執行結果是什麼
class Base{
void test() {
System.out.println(“Base.test()”);
}
}
public class Child extends Base {
void test() {
System.out.println(“Child.test()”);
}
public static void main(String[] a) {
Child anObj = new Child();
Base baseObj = (Base)anObj;
baseObj.test();
}
}
A Child.test() Base.test()
B Base.test() Child.test()
C Base.test()
D Child.test()
解答:D
測試代碼相當於:Base baseObj = new Child();父類的引用指向子類的實例,子類又重寫了父類的test方法,因此調用子類的test方法。
11.以下程序的執行結果是什麼
class Base{
static void test() {
System.out.println(“Base.test()”);
}
}
public class Child extends Base {
void test() {
System.out.println(“Child.test()”);
Base.test(); //Call the parent method
}
static public void main(String[] a) {
new Child().test();
}
}
A Child.test() Base.test()
B Child.test() Child.test()
C 編譯報錯.
D 運行報錯.
解答:C
靜態方法不能在子類中被重寫
12.以下程序的執行結果是什麼;’ ?’ 是空格的意思.
public class Base{
private void test() {
String aStr = “?One?”;
String bStr = aStr;
aStr.toUpperCase();
aStr.trim();
System.out.println(“[" + aStr + "," + bStr + "]“);
}
static public void main(String[] a) {
new Base().test();
}
}
A [ONE,?One?]
B [?One?,One]
C [ONE,One]
D [ONE,ONE]
E [?One?,?One?]
解答:E
13.下面關於變量及其範圍的陳述哪些是不正確的( )
A.實例變量是類的成員變量
B.實例變量用關鍵字static聲明
C.在方法中定義的局部變量在該方法被執行時創建
D.局部變量在使用前必須被初始化
解答:BC
由static修飾的變量稱爲類變量或是靜態變量;方法加載的時候創建局部變量
14.編譯運行以下程序後,關於輸出結果的說明正確的是
public class Conditional{
public static void main(String args[ ]){
int x=4;
System.out.println(“value is “+ ((x>4) ? 99.9 :9));
}
}
A、 輸出結果爲:value is 99.99
B、 輸出結果爲:value is 9
C、 輸出結果爲:value is 9.0
D、 編譯錯誤
解答:C
三目運算符中:第二個表達式和第三個表達式中如果都爲基本數據類型,整個表達式的運算結果由容量高的決定。99.9是double類型 而9是int類型,double容量高。
15.關於以下程序代碼的說明正確的是( ):
class HasStatic{
private static int x=100;
public static void main(String args[ ]){
HasStatic hs1=new HasStatic( );
hs1.x++;
HasStatic hs2=new HasStatic( );
hs2.x++;
hs1=new HasStatic( );
hs1.x++;
HasStatic.x - -;
System.out.println(“x=”+x);
}
}
A、5行不能通過編譯,因爲引用了私有靜態變量
B、10行不能通過編譯,因爲x是私有靜態變量
C、程序通過編譯,輸出結果爲:x=101
D、程序通過編譯,輸出結果爲:x=102
E、程序通過編譯,輸出結果爲:x=103
解答:D
靜態變量是所有對象所共享的,所以上述代碼中的幾個對象操作是同一靜態變量x, 靜態變量可以通過類名調用。
16.下列哪種說法是正確的()
A.實例方法可直接調用超類的實例方法
B.實例方法可直接調用超類的類方法
C.實例方法可直接調用其他類的實例方法
D.實例方法可直接調用本類的類方法
解答:D
A. 實例方法不可直接調用超類的私有實例方法
B. 實例方法不可直接調用超類的私有的類方法
C.要看訪問權限
17.下面代碼的執行結果是?
import java.util.*;
public class ShortSet{
public static void main(String args[]){
Set<Short> s=new HashSet<Short>();
for(Short i=0;i<100;i++){
s.add(i);
s.remove(i-1);
}
System.out.println(s.size());
}
}
A.1
B.100
C.Throws Exception
D.None of the Above
解答:B
i是Short類型, i-1是int類型,其包裝類爲Integer,所以s.remove(i-1)不能移除Set集合中Short類型對象;只有將(i-1)強轉爲Short類型的時候,才能移除Set集合中的對象
18.以下關於面向對象概念的描述中,不正確的一項是()
A.在現實生活中,對象是指客觀世界的實體
B.程序中的對象就是現實生活中的對象
C.在程序中,對象是通過一種抽象數據類型來描述的,這種抽象數據類型稱爲類(class)
D.在程序中,對象是一組變量和相關方法的集合
解答:B
面向過程強調的是每一個功能的具體實現步驟,面向對象強調的是對象調用功能
19.插入排序算法,將元素插入一個有序隊列:第一步取數,第二步插入
public static void injectionSort(int[] number) {
// 第一個元素作爲一部分,對後面的部分進行循環
for (int j = 1; j < number.length; j++) {
int tmp = number[ j ];
int i = j – 1;
while (tmp < number[ i ]) {
number[i + 1] = number[ i ];
i - -;
if (i == -1)
break;
}
number[i + 1] = tmp;
}
}
20.冒泡排序,元素上浮:第一步循環次數,第二步元素上浮
//N個數字冒泡排序,總共要進行N-1趟比較,每趟的排序次數爲(N-i)次比較
public static void bubbleSort(int[] arr){
//一定要記住判斷邊界條件,很多人不注意這些細節,面試官看到你的代碼的時候都懶得往下看,你的代碼哪個項目敢往裏面加?
if(arr==null||arr.length<2){
return;
}
//需要進行arr.length趟比較
for(int i = 0 ;i<arr.length-1;i++){
//第i趟比較
for(int j = 0 ;j<arr.length-i-1;j++){
//開始進行比較,如果arr[j]比arr[j+1]的值大,那就交換位置
if(arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
// System.out.println("最終得出的數組爲:");
// for (int k =0 ; k < arr.length;k++){
// System.out.print(arr[k]+" ");
// }
}
21.選擇排序:挑選元素放到指定位置。第一步,選擇位置;第二步,選擇元素
public static void selectSort(int [] arr,int n){
for (int i = 0; i < n - 1; i++) {
int index = i;
int j;
// 找出最小值得元素下標
for (j = i + 1; j < n; j++) {
if (arr[j] < arr[index]) {
index = j;
}
}
int tmp = arr[index];
arr[index] = arr[i];
arr[i] = tmp;
System.out.println(Arrays.toString(arr));
}
}
22.下列程序的運行結果是什麼?
public class Test {
public static void main(String[] args) {
String str = NULL;
System.out.println(str);
}
}
A. NULL
B. 編譯時報錯
C. ""
D.運行時報錯
23、下列程序執行結果是什麼?
public class Text{
public static void main(String[] args){
int a=10,b=4,c=20,d=6;
System.out.println(a++*b+c*--d);
}
}
A、144
B、164
C、140
D、160
解答:C
在java中執行加減乘除基本運算時,已就遵循先乘除後加減的原則,而++a與a++的區別在於,++a是先自增後在參與運算,a++是先參與運算之後在自增,所以最終答案是10*4+20*5=140
24、下列哪兩個選項不能直接導致線程停止?
A. 跳出同步代碼塊
B. 調用wait方法
C. 調用notify方法
D. 調用讀取流的方法
E. 設置線程的優先權
25.下列程序的運行結果是什麼:
public class TestInner {
class Foo {
public int i = 3;
}
public static void main (String args[]) {
Object o = (Object) new TestInner().new Foo();
Foo foo = (Foo)o;
System.out.println(foo.i);
}
}
26.public class Text{
public static void main(String[] args){
int i=12;
System.out.println(i+=i-=i*=i);
}
}
A、程序無法編譯
B、100
C、0
D、-120
解答:D
本題我們先將i+=i-+i*=i編號 => i1+=i2-=i3*=i4;在計算之前先明白i1=i2=i3=i4=i=12;先計算i3=i*i=144,;再計算i1+=i2即爲i1=i1+i2=24,此時i1=i2=24;最後計算i2-=i3即爲i2=i2-i3=-120;
總結出下來就是,對於同一個變量,左邊變量變化對右邊
變量產生影響,而右邊變量的變化對左邊變量不產生影響。
27、 下列選項中,哪些選項與第2行相等:
1. public interface Foo{
2. int k = 4;
3. }
A. final int k = 4;
B. Public int k = 4;
C. static int k = 4;
D. Private int k = 4;
E. Abstract int k = 4;
F. Volatile int k = 4;
G. Transient int k = 4;
H. protected int k = 4;
ABC
解析:Interface 變量等同於 public static final int k = 4;
28、 下列代碼的執行結果是什麼:
public class foo {
static String s;
public static void main (String[]args) {
System.out.println (“s=” + s);
}
}
A. 代碼編譯成功並輸出“s=”
B. 代碼編譯成功並輸出“s=null”
C. 因爲變量s沒有初始化,所以代碼編譯失敗
D. 代碼編譯成功,但在調用toString的時候拋出NullPointerException異常
解答:B
String爲引用數據類型,引用類型數據成員的默認值爲null
29.從下面代碼中選擇出錯誤的代碼段()
public class Something {
void doSomething () {
private String s ="";
int l = s.length();
}
}
30.請看如下代碼
class Person {
private int a;
public int change(int m){
return m;
}
}
public class Teacher extends Person{
public int b;
public static void main(String arg[]){
Person p = new Person();
Teacher t = new Teacher();
int i;
// point x
}
}
下面哪些放在// point x?行是正確的?
A, i = m;
B, i = b;
C, i = p.a;
D, i = p.change(3);
E, i = t.b;
解答:DE
A.不同的作用域
B.靜態方法中不能直接使用非靜態成員變量
C.類外不能訪問其它類私有的成員
D,E.在類方法中可以通過實例化對象調用類中的實例成員。