软件测试时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

PS:黄色标示需要强制转换,蓝色标示自动转换,白色标识不需要转换

159726bf135bad5b594eec2c00b8f4ef.png

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类下常用的方法

Object类是所有类的父类,位于java.lang包中,数组也是Object类的子类。任何类的对象,都可以调用Object类中的方法,包括数组对象。

Object类的常用方法

toString方法;toString方法可以将任何一个对象转换成字符串返回,返回值的生成算法为:getClass().getName() + ‘@’ + Integer.toHexString(hashCode())。

equals方法;Object类中的equals方法,用来比较两个引用的虚地址。当且仅当两个引用在物理上是同一个对象时,返回值为true,否则将返回false。

任何类可以根据实际需要,覆盖toString及equals方法,实现自定义的逻辑。

hashCode方法;

获取对象的哈希码值,为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中创建对象的方式

使用new关键字

最常见也是最简单的创建对象的方式了。通过这种方式,我们可以调用任意的构造函数(无参的和带参数的)。

Employee emp1 = new Employee();

}→调用了构造函数

使用Class类的newInstance方法

可以使用Class类的newInstance方法创建对象。这个newInstance方法调用无参的构造函数创建对象。

Employee emp2 = (Employee) Class.forName(“org.programming.mitra.exercises.Employee”).newInstance();

或者

Employee emp2 = Employee.class.newInstance();

} →调用了构造函数

使用Constructor类的newInstance方法

和Class类的newInstance方法很像, java.lang.reflect.Constructor类里也有一个newInstance方法可以创建对象。我们可以通过这个newInstance方法调用有参数的和私有的构造函数。

Constructorconstructor = Employee.class.getConstructor();

Employee emp3 = constructor.newInstance();

}→调用了构造函数

使用clone方法

无论何时我们调用一个对象的clone方法,jvm就会创建一个新的对象,将前面对象的内容全部拷贝进去。用clone方法创建对象并不会调用任何构造函数。

要使用clone方法,我们需要先实现Cloneable接口并实现其定义的clone方法。

Employee emp4 = (Employee) emp3.clone();

} →没有调用构造函数

使用反序列化

当我们序列化和反序列化一个对象,jvm会给我们创建一个单独的对象。在反序列化时,jvm创建对象并不会调用任何构造函数。

为了反序列化一个对象,我们需要让我们的类实现Serializable接口

ObjectInputStream in = new ObjectInputStream(new FileInputStream(“data.obj”));

Employee emp5 = (Employee) in.readObject();

} →没有调用构造函数

7、final关键字

final关键字可以用来修饰类、方法和变量(包括成员变量和局部变量)

被修饰的类不能被继承,被修饰的方法不能被重写,被修饰的变量只能被赋值一次( 基本类型不能修改初始值,引用数据类型不能修改初始址)

8、java 中操作字符串都有哪些类?它们之间有什么区别?

StringStringBufferStringBuilder

继承关系

特性

常用方法

String

public final class String

extends Object

implements Serializable, Comparable, CharSequence

常量,创建之后不可变

处理少量数据

String()

contains()

equals()

format()

length()

StingBuffer

public final class StringBuffer

extends Object

implements Serializable, CharSequence

对象,可变字符序列

线程安全,可用于多线程

处理大量数据

append()末尾增加元素

insert()指定位置插入元素

StringBuilder

public final class StringBuilder

extends Object

implements Serializable, CharSequence

对象,可变字符序列

线程不安全,不适合多线程

处理 大量数据

append()末尾增加元素

insert()指定位置插入元素

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值