当前位置: 首页 > news >正文

软件测试时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()指定位置插入元素

相关文章:

  • 业务提前初始化执行
  • 区块链——Hyperledger Fabric2.2单点搭建网络
  • 从零开发一款图片编辑器Mitu-Dooring
  • 2022-08-30 第六小组 瞒春 学习笔记
  • 记录k8s-Calico网络插件报错问题
  • 北大肖臻老师《区块链技术与应用》系列课程学习笔记[25]以太坊-智能合约-5
  • 技术对接36
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • 【编程强训11】最近公共祖先+求最大连续bit数
  • 走进Redis之配置文件的修改使用
  • java基于springboot+vue的园区入驻停车管理系统
  • 踩坑篇-Nacos+Sping-gateway+shiro实现分布式认证权限框架
  • SSM美众针纺有限公司人事管理毕业设计-附源码051708
  • 超详细的VsCode创建SpringBoot项目(图文并茂)
  • Python、设计原则和设计模式-对象行为类设计模式(一)
  • 【JavaScript】通过闭包创建具有私有属性的实例对象
  • 【笔记】你不知道的JS读书笔记——Promise
  • 0x05 Python数据分析,Anaconda八斩刀
  • Akka系列(七):Actor持久化之Akka persistence
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • FastReport在线报表设计器工作原理
  • gcc介绍及安装
  • gulp 教程
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • Python实现BT种子转化为磁力链接【实战】
  • react-native 安卓真机环境搭建
  • React-redux的原理以及使用
  • V4L2视频输入框架概述
  • 构造函数(constructor)与原型链(prototype)关系
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 看图轻松理解数据结构与算法系列(基于数组的栈)
  • 坑!为什么View.startAnimation不起作用?
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 线上 python http server profile 实践
  • 消息队列系列二(IOT中消息队列的应用)
  • 小而合理的前端理论:rscss和rsjs
  • - 语言经验 - 《c++的高性能内存管理库tcmalloc和jemalloc》
  • 找一份好的前端工作,起点很重要
  • #162 (Div. 2)
  • (3)STL算法之搜索
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (Python第六天)文件处理
  • (编译到47%失败)to be deleted
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (删)Java线程同步实现一:synchronzied和wait()/notify()
  • (五)IO流之ByteArrayInput/OutputStream
  • (一)SpringBoot3---尚硅谷总结
  • (原創) 如何使用ISO C++讀寫BMP圖檔? (C/C++) (Image Processing)
  • (转)四层和七层负载均衡的区别
  • ******之网络***——物理***
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .NET 动态调用WebService + WSE + UsernameToken