JAVA中最基本最常用的功能_Java最常见的208道面试题 _Java基础

《Java最常见的208道面试题》,这份“网红版”的面试题,出自网上大佬王磊的博客,特此声明并非我原创,当然这不是重点。实不相瞒小编最近也在蠢蠢欲动,准备加入求职的浪潮,所以我特意看了这份面试题。但是因为网上的答案参差不齐,还有一些错误的地方,先生准备整理一份答案,今日份Java基础,如有错误的地方请指正。

1.JDK 和 JRE 有什么区别?

JRE( Java Runtime Environment)顾名思义是java运行时环境,包含了java虚拟机,java基础类库。是使用Java编写的程序运行所需要的软件环境,是提供给想运行java程序的用户使用的。

JDK(Java Development Kit)是程序员使用Java语言编写java程序所需的开发工具包,是提供给程序员使用的。JDK包含了JRE,同时还包含了编译java源码的编译器javac,还包含了很多java程序调试和分析的工具:jconsole,jvisualvm等工具软件,还包含了java程序编写所需的文档和demo例子程序。

2.== 和 equals 的区别是什么?

(1)对于==,比较值是否相等.

如果作用于基本数据类型的变量,则直接比较其存储的 “值”是否相等。

如果作用于引用类型的变量,则比较的是所指向的对象的地址。

(2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量,equals继承Object类,比较的是是否是同一个对象

如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址。

诸如String、Date等类对equals方法进行了重写的话,比较的是所指向的对象的内容。

3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?

不对,如果两个对象x和y满足x.equals(y) == true,它们的哈希码(hash code)应当相同。Java对于eqauls方法和hashCode方法是这样规定的:

(1)如果两个对象相同(equals方法返回true),那么它们的hashCode值一定要相同。

(2)如果两个对象的hashCode相同,它们并不一定相同。

4.final 在 java 中有什么作用?

(1)修饰类:表示该类不能被继承。

(2)修饰方法:表示方法不能被重写。

(3)修饰变量:表示变量只能一次赋值以后值不能被修改(常量)。

5.java 中的 Math.round(-1.5) 等于多少?

Math.round(-1.5)的返回值是-1.四舍五入的原理是在参数上加0.5然后进行下取整。

6.String 属于基础的数据类型吗?

不是。Java中的基本数据类型只有8个:byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type),剩下的都是引用类型(reference type)。

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

这道题也可以换个说法:String和StringBuilder、StringBuffer的区别?

Java平台提供了两种类型的字符串:String和StringBuffer/StringBuilder,它们可以储存和操作字符串。其中String是只读字符串,也就意味着String引用的字符串内容是不能被改变的。而StringBuffer/StringBuilder类表示的字符串对象可以直接进行修改。StringBuilder是Java 5中引入的,它和StringBuffer的方法完全相同,区别在于它是在单线程环境下使用的,因为它的所有方面都没有被synchronized修饰,因此它的效率也比StringBuffer要高。

8.String str="i"与 String str=new String(“i”)一样吗?

不一样。两个对象,一个是常量池,一个是用new创建在堆上的对象,分配到堆内存。

9.如何将字符串反转?

方法很多,可以使用StringBuffer/StringBuilder中的reverse()方法。有一道很常见的面试题是用递归实现字符串反转,代码如下所示:

public static String reverse(String oriStr) {

if (oriStr == null || oriStr.length() <= 1) {

return oriStr;

}

return reverse(oriStr.substring(1)) + oriStr.charAt(0);

}

复制代码

10.String 类的常用方法都有那些?

列举部分如下:

length()//返回该字符串的长度

charAt(int index)//返回字符串中指定位置的字符

substring(int beginIndex)/substring(int beginIndex, int endIndex)方法可以提取字符串中的子串

compareTo(String anotherString)/equals(Object anotherObject)//字符串比较

concat(String str)//字符串拼接

indexOf(int ch/String str)//查找字符串

toLowerCase()//返回将当前字符串中所有字符转换成小写后的新串

toUpperCase()返回将当前字符串中所有字符转换成大写后的新串

contains(Stringstr)//判断参数s是否被包含在字符串中

11.抽象类必须要有抽象方法吗?

抽象类不一定要有抽象方法。代码如下:

abstract class test1 {

public static String reverse(String oriStr) {

if (oriStr == null || oriStr.length() <= 1) {

return oriStr;

}

return reverse(oriStr.substring(1)) + oriStr.charAt(0);

}

}

复制代码

12.普通类和抽象类有哪些区别?

(1)普通类可以实例化,抽象类不能直接实例化(抽象类如果要实例化,抽象类必须指向实现所有抽象方法的子类对象)

(2)普通类不能包含抽象方法,抽象类可以。

13.抽象类能使用 final 修饰吗?

不能。首先用final修饰本身就是一个错误,其次如果用final修饰就不能够继承。

14.接口和抽象类有什么区别?

首先抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用。一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类。接口比抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法,而接口中不能定义构造器而且其中的方法全部都是抽象方法。抽象类中的成员可以是private、默认、protected、public的,而接口中的成员全都是public的。抽象类中可以定义成员变量,而接口中定义的成员变量实际上都是常量。有抽象方法的类必须被声明为抽象类,而抽象类未必要有抽象方法。

15.java 中 IO 流分为几种?

(1)按照流的流向分,可以分为输入流和输出流;

(2)按照操作单元划分,可以划分为字节流和字符流;

(3)按照流的角色划分为节点流和处理流。

16.BIO、NIO、AIO 有什么区别?

BIO:线程发起IO请求,不管内核是否准备好IO操作,从发起请求起,线程一直阻塞,直到操作完成。

NIO:线程发起IO请求,立即返回;内核在做好IO操作的准备之后,通过调用注册的回调函数通知线程做IO操作,线程开始阻塞,直到操作完成。

AIO:线程发起IO请求,立即返回;内存做好IO操作的准备之后,做IO操作,直到操作完成或者失败,通过调用注册的回调函数通知线程做IO操作完成或者失败。

17.Files的常用方法都有哪些?

Files.exists() 检测文件路径是否存在

Files.createFile()创建文件

Files.createDirectory()创建文件夹

Files.delete() 删除文件或者目录

Files.copy() 复制文件

Files.move() 移动文件

Files.size()查看文件个数

Files.read() 读取文件

Files.write()写入文件

更多精彩内容关注微信公众号:Java先生 下一期 Java最常见208道面试题_容器

复制代码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值