軟件測試時Java面試題


目錄

1、Java常用的數據類型

2、Java中arrayList和array的區別

3、Java中list、set和map的區別

4、Object類下常用的方法

5、equals()方法和“==”的區別

6、java中創建對象的方式

7、final關鍵字

8、java 中操作字符串都有哪些類?它們之間有什么區別? 

 

1、Java常用的數據類型

  分類 數據類型 占用二進制字節 舉例 類型默認值 基本數據類型封裝類

基本數據類型

(四類八種)

整型 字節型(byte) 8位 byte a = 100 0 Byte
短整型(shot) 16位 short s = 1000 0 Short
整型(int) 32位 int a = 100000 0 Integer
長整型(long) 64位 long a = 100000L 0L Long
浮點型 單精度(float) 32位 float f1 = 234.5f 0.0f Float
雙精度(double) 64位 double d1 = 123.4 0.0d Double
字符型 字符型(char) 16位 char letter = 'A' 'u0000' Character
布爾型 布爾型(boolean) 1位 boolean one = true false Boolean
引用數據類型 calss     null  
接口 interface     null  
數組 arr     null  
空類型 null     null  

數據類型轉換圖標(圖片來源:https://www.cnblogs.com/liangxiaofeng/p/5721506.html

PS:黃色標示需要強制轉換,藍色標示自動轉換,白色標識不需要轉換

2、Java中arrayList和array的區別

array:數組,容量固定不可變,同一個數組只能存放類型一樣的數據(基本數據類型/引用數據類型),聲明時必須指定長度,使用效率比集合高

1 int[] a=new int[10];
2 int a[]=new int[10];
3 int a[]={1,2,3,4};

 

arrayList:動態數組(集合的一種),數組的一種高級實現,容量可變,可動態的添加、刪除元素,只能存儲引用數據類型,聲明時不必須指定其長度,使用效率比數組低。

1 ArrayList list = new ArrayList(10);
2 ArrayList list1 = new ArrayList(); 

3、Java中list、set和map的區別

list、set和map都屬於集合接口,都在java.util包下面:

接口

繼承的接口 區別 相關常見實現類 實現類的特點
list列表 collection接口 有序(每個元素對應一個下標)、元素可重復、可插入多個null值作為元素,可用for循環和迭代器進行遍歷 ArrayList動態數組 動態數組,不帶泛型的時候允許任何符合規則的元素插入,可自動擴容,可根據下標隨機訪問元素,非同步,查詢優於LinkedList,增刪遜於LinkedList(需要移動數據)
LinkedList雙向鏈表 不能隨機訪問,從鏈表兩端開始遍歷查找,非同步
Vector矢量 操作與ArrayList相同,同步,線程安全
Stack堆棧,繼承自Vector 繼承自Vector,后進先出,常用方法push()\pop()\peek()獲取棧頂元素\empty()判斷堆棧是否為空\search()

set

集合

collection接口 無序(本身順序按照元素本身的hashCode排列),元素不可重復、最多只能有一個null元素,只能用迭代器進行遍歷 HashSet 號稱查詢最快的集合,元素順序取決於元素的哈希碼,不能保證元素順序不變
TreeSet 由二叉樹對實現,基於TreeMap,不允許由null值,使用元素值的自然順序排列
LinkedSet 根據元素的哈希值決定元素的存儲位置,同時使用鏈表維護元素的順序,遍歷時以元素添加時的順序進行訪問,訪問速度優於HashSet,插入性能遜於HashSet
EnumSet

map

映射

map集合中每個元素包含一個鍵值對,鍵key不可重復,鍵對應的值value可重復

HashMap

繼承自AbstractMap類,可接受為null的鍵值(key)和值(value),線程不安全 

HashTable

繼承自Dictionary類,不接受為null的鍵值(key)和值(value),線程安全

TreeMap
WeakHashMap  基於java弱引用,對象隨時可能被回收,適用於緩存

4、Object類下常用的方法

https://www.cnblogs.com/qwddqy/p/7570850.html(詳細)

Object類是所有類的父類,位於java.lang包中,數組也是Object類的子類。任何類的對象,都可以調用Object類中的方法,包括數組對象。

Object類的常用方法

  •  toString方法;
    1.    toString方法可以將任何一個對象轉換成字符串返回,返回值的生成算法為:getClass().getName() + '@' + Integer.toHexString(hashCode())。
  •  equals方法;
    1.    Object類中的equals方法,用來比較兩個引用的虛地址。當且僅當兩個引用在物理上是同一個對象時,返回值為true,否則將返回false。
    2. 任何類可以根據實際需要,覆蓋toString及equals方法,實現自定義的邏輯。
  • hashCode方法;

    1. 獲取對象的哈希碼值,為16進制。

5、equals()方法和“==”的區別

 equals()比較兩個對象的地址,“==”比較兩個對象的值(內容)

  • equals方法與hashCode方法關系(詳細:https://www.cnblogs.com/shenliang123/archive/2012/04/16/2452206.html
    •  如果兩個對象使用equals比較返回true,那么它們的hashCode值一定要相同。
    • 如果兩個對象equals比較返回false,那么它們的hashCode值不一定不同,重寫equals方法時請必須重寫hashcode,以保證equals方法相等時兩個對象hashcode返回相同的值。如果你不按照規范來,就不一定相同了。

6、java中創建對象的方式

 詳細:https://www.cnblogs.com/wxd0108/p/5685817.html

使用new關鍵字

最常見也是最簡單的創建對象的方式了。通過這種方式,我們可以調用任意的構造函數(無參的和帶參數的)。

Employee emp1 = new Employee();
} → 調用了構造函數
使用Class類的newInstance方法

可以使用Class類的newInstance方法創建對象。這個newInstance方法調用無參的構造函數創建對象。

  1. Employee emp2 = (Employee) Class.forName("org.programming.mitra.exercises.Employee").newInstance();
  2. 或者
  3. Employee emp2 = Employee.class.newInstance();
} → 調用了構造函數
使用Constructor類的newInstance方法

和Class類的newInstance方法很像, java.lang.reflect.Constructor類里也有一個newInstance方法可以創建對象。我們可以通過這個newInstance方法調用有參數的和私有的構造函數。

  1. Constructor <Employee> constructor = Employee.class.getConstructor();
  2. Employee emp3 = constructor.newInstance();
} → 調用了構造函數
使用clone方法

無論何時我們調用一個對象的clone方法,jvm就會創建一個新的對象,將前面對象的內容全部拷貝進去。用clone方法創建對象並不會調用任何構造函數。

要使用clone方法,我們需要先實現Cloneable接口並實現其定義的clone方法。

Employee emp4 = (Employee) emp3.clone();
} → 沒有調用構造函數
使用反序列化

當我們序列化和反序列化一個對象,jvm會給我們創建一個單獨的對象。在反序列化時,jvm創建對象並不會調用任何構造函數。
為了反序列化一個對象,我們需要讓我們的類實現Serializable接口

  1. ObjectInputStream in = new ObjectInputStream(new FileInputStream("data.obj"));
  2. Employee emp5 = (Employee) in.readObject();
} → 沒有調用構造函數

7、final關鍵字

final關鍵字可以用來修飾類、方法和變量(包括成員變量和局部變量 )

被修飾的類不能被繼承,被修飾的方法不能被重寫,被修飾的變量只能被賦值一次( 基本類型不能修改初始值,引用數據類型不能修改初始址)

8、java 中操作字符串都有哪些類?它們之間有什么區別? 

String\StringBuffer\StringBuilder

繼承關系 特性 常用方法
String
  1. public final class String
  2. extends Object
  3. implements Serializable, Comparable <String>, CharSequence
  • 常量,創建之后不可變
  • 處理少量數據

String()

contains()

equals()

format()

length()

...

StingBuffer
  1. public final class StringBuffer
  2. extends Object
  3. implements Serializable, CharSequence
  • 對象,可變字符序列
  • 線程安全,可用於多線程
  • 處理大量數據 

append()末尾增加元素

insert()指定位置插入元素

...

StringBuilder
  1. public final class StringBuilder
  2. extends Object
  3. implements Serializable, CharSequence
  • 對象,可變字符序列
  • 線程不安全,不適合多線程
  • 處理 大量數據 

append()末尾增加元素

insert()指定位置插入元素

....


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM