本文已参与「新人创作礼」活动,一起开启掘金创作之路。
- 个人简介:微信公众号关注:SteveCode。为您分享更多的知识学术。生于忧患死于安乐
文档:面试题:Java 基础.note 链接:note.youdao.com/noteshare?i…
一、Java 基础
1.JDK 和 JRE 有什么区别?
jdk(Java development kit)Java开发工具包,包含jre和Java工具与Java基础类库。针对开发者。
jre(Java runtime Environment)Java运行环境,包含jvm 与Java核心类库,针对Java用户。
jvm Java虚拟机 是用来解释执行字节码的类文件。
2.== 和 equals 的区别是什么?
==:如果是基本数据类型 比较的是值;引用类型比较的是内存地址。
equals:比较的是:内容
string 类型不同 重写了equals方法,
有的值会从常量池中获取。
3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗?
不对,有相同的hashcode()但是不一定equals()方法结果为true。
hashCode返回对象的哈希码,equals()判断两个对象是否相等。先去判断hashCode()是否相等,再去判断equals()是否相等。提高对比的准确性。
hashcode相同,两个对象不一定相等。
equals相等那么这两个对象一定相等,且hashcode也一定相等。
先判断hashcode是否相等,如果相等,再判断equals是否相等,如果相等就是同一对象。否则就是不同的对象。
equals比较是绝对可靠的
hashcode比较不是绝对可靠的
4.final 在 java 中有什么作用?
可以修饰类:该类不能继承
修饰方法:不能重写
修饰成员变量:必须初始化值
如果成员变量基本数据类型,表示这个值不可以修改。
如果是成员变量引用数据类型:表示这个引用地址不会发大亨改变。但是引用所指向的对象的内容可以发生改变。
5.java 中的 Math.round(-1.5) 等于多少?
四舍五入 正数 加一
负数减一
public class test { public static void main(String[] args){ System.out.println(Math.round(1.3)); //1 System.out.println(Math.round(1.4)); //1 System.out.println(Math.round(1.5)); //2 System.out.println(Math.round(1.6)); //2 System.out.println(Math.round(1.7)); //2 System.out.println(Math.round(-1.3)); //-1 System.out.println(Math.round(-1.4)); //-1 System.out.println(Math.round(-1.5)); //-1 System.out.println(Math.round(-1.6)); //-2 System.out.println(Math.round(-1.7)); //-2 } }
6.String 属于基础的数据类型吗?
不属于,是引用类型。
7.java 中操作字符串都有哪些类?它们之间有什么区别?
String、StringBuffer、StringBuilder
- String : final修饰,String类的方法都是返回new String。即对String对象的任何改变都不影响到原对象,对字符串的修改操作都会生成新的对象。
- StringBuffer : 对字符串的操作的方法都加了synchronized,保证线程安全。
- StringBuilder : 不保证线程安全,在方法体内需要进行字符串的修改操作,可以new StringBuilder对象,调用StringBuilder对象的append、replace、delete等方法修改字符串。
- blog.csdn.net/meism5/arti…
8.String str="i"与 String str=new String(“i”)一样吗?
不一样,将值分配到常量池中,后者将值分配到堆内存中。前者创建了有一个对象,后者可能创建了两个对象。
*9.如何将字符串反转?
class Myreverse { public static void main(String[] args) { String s = "1234"; String reverse1 = ""; 第一种:利用下标去数据 for (int i = 0; i < s.length(); i++) { reverse1=s.charAt(i)+reverse1; System.out.println(s.charAt(i)); System.out.println(reverse1); } System.out.println(reverse1); System.out.println("======================"); 反转的方法: StringBuilder builder = new StringBuilder(s); System.out.println(builder.reverse().toString()); } }
10.String 类的常用方法都有那些?
length()、charAt()、indexof()、replace()替换、equals()判断内容是否相等、blog.csdn.net/sinat_41920…
11.抽象类必须要有抽象方法吗?
抽象类中可以没有抽象方法,但是有抽象方法的类一定是抽象类。
12.普通类和抽象类有哪些区别?
关键字上:普通类没有关键字abstract修饰,抽象类需要加上abstract
实例化上:抽象类不能实例化,必须有有子类继承抽象类,才可以实例化。普通类可以实例化
方法上:抽象类可以没有方法体,普通类必须要有方法体
抽象类不能final修饰
抽象方法不能是private修饰
13.抽象类能使用 final 修饰吗?
不能,因为final类修饰的类不能被继承,而抽象类需要子类区继承他,才能实现其抽象方法。
14.接口和抽象类有什么区别?
方法上:接口中的方法都是抽象的,抽象类中可以有非抽象方法。
实例化上:接口不能实例化,抽象类可以实例化(前提:该抽象类被继承)
继承性:接口多继承性,类的单继承性
实现方式:接口需要实现,抽象类需要继承
方法体上:接口只能做申明不能做实现,抽象类可以做申明也可以做实现。
变量:接口中的变量是常量,抽象类中的的变量是普通变量。
**15.java 中 IO 流分为几种?
按流向:输入流、输出流
处理数据不同:字节流(视频、音频、doc等)、字符流(纯文本)
功能:节点流、处理流
**16.BIO、NIO、AIO 有什么区别?
bio同步阻塞io
nio同步非非阻塞io
aio异步非阻塞io
**17.Files的常用方法都有哪些?
Files文件里面的方法都是静态的。
Files. exists():检测文件路径是否存在。
Files. createFile():创建文件。
Files. createDirectory():创建文件夹。
Files. delete():删除一个文件或目录。
Files. copy():复制文件。
Files. move():移动文件。
Files. size():查看文件个数。
Files. read():读取文件。
Files. write():写入文件。