Java 基础
1. JDK和JRE有什么区别?
- JDK:Jave Development Kit的简称,java开发工具包,包含了java开发环境和运行环境
- JRE:Java Runtime Environment的简称,java运行环境,为了java的运行提供了运行环境
JDK包含了JRE,JDK不仅包含了java的运行环,还包含了编译java源码的编译器javac,还包括java程序调试和分析的工具。简单来说,如果要运行java程序,只需要安装JRE,如果要编写java程序,则需要安装JDK
2. == 和 equals 的区别是什么?
== 对于基本类型比较的是值,对于对象比较的是引用,而equals默认比较的是引用,我们通过重写euqals方法使得它比较的是值,如String类
3. 两个对象的hashCode()相同,equals的值也相同吗?
不一定相同
String str1 = "通话";
String str2 = "重地";
System.out.println(String.format("str1: %d, str2: %d\n", str1.hashCode(), str2.hashCode()));
System.out.println(str1.equals(str2));
// 执行结果
// str1: 1179395, str2: 1179395
// false
4. final在Java中的用法
final在Java中可以用来修饰类,方法和变量
- 被
final修饰的类不能被继承 - 被
final修饰的方法不能被重写 - 被
final修饰的变量必须初始化,如果是基本类型,初始化之后的值不能修改,如果为对象,则初始化之后的引用不能修改
5. java中的Math.round(-1.5)等于多少?
等于-1,该方法的值为四舍五入。
Math.floor(2.2) = 2.0; // 下取整
Math.ceil(2.2) = 3.0; // 上取整
Math.round(2.2) = 2.0; // 四舍五入
6. String属于基本数据类型吗?
String不属于基本的数据类型,基本的数据类型有:byte,short,int,long,float,double,boolean,char,String属于对象
7. Java中操作字符串有哪些类?它们有哪些区别?
Java中操作字符串的类有String, StringBuffer. StringBuilder
String每次声明的都是不可变对象,每次操作都要生成新的对象,然后重新指向这个新的对象,而StringBuffer和StringBuilder可以在原来的对象进行操作,性能较好
StringBuffer和StringBuilder的区别是StringBuffer是线程安全的,StringBuilder是非线程安全的。在单线程下推荐使用StringBuilder,在多线程下推荐使用StringBuffer
8. String str = “i”和String str = new String("i")相同吗?
不相同,区别在于内存分配的方式,第一种JVM会将其分配到常量池中,而第二种会分配到Java堆内存中
9. 如何将字符串反转?
StringBuffer sb = new StringBuffer("abcdefg");
sb.reverse();
10. String类常用的方法
indexOf(): 取字符的下标
charAt(): 取下标的值
replace(): 字符串替换
trim(): 去除字符串两边的空白
split(): 切割字符串,返回字符串数组
getBytes(): 转换为字节数组
length(): 长度
toLowerCase(): 转换为下写
toUpperCase(): 转换为大写
substring(): 截取子串
euqals(): 字符串比较
11. 抽象类必须要有抽象方法吗?
不是
public abstract class Test {
public static void test() {
System.out.println("test");
}
}
12. 普通类和抽象类有什么区别?
- 普通类中不能有抽象方法,抽象类中可以有抽象方法
- 抽象类不能直接被实例化,普通类可以直接被实例化
13. 抽象类能被final修饰吗?
不能,抽象类需要实现子类后才可以被实例化,而被final修饰的类不能被继承,也就无法实现子类
14. 抽象类和接口的区别?
- 类使用extents继承,接口使用implements继承
- 构造函数:抽象类可以用构造函数,接口中不能有构造函数
- main函数:抽象类可以有main方法并能够运行,接口中不能有main方法
- 访问修饰符:接口中的方法默认用public修饰,抽象类中的方法可以使用其他的修饰符
15. Java中I/O的分类:
按功能来分:输入流和输出流
按类型来分:字节流和字符流
字节流和字符流的区别在于:字节流按8位传输以字节为单位输入输出数据,字符流按16位以字符为单位输入输出数据
16. BIO,NIO和AIO的概念
- BIO:Block IO,传统使用的IO,是同步阻塞式IO,特点是使用模式简单,并发处理能力差
- NIO:New IO,是BOI的升级版本,实现了同步非阻塞IO,服务端和客户端通过Channel(通道)进行传输,实现了多路复用
- AIO:Asychronous IO,是NIO的升级版本,实现了异步非阻塞IO,异步非阻塞IO的操作是基于事件和回调机制
17 Files的方法
Files.exists();
Files.create();
Files.createDirectory();
Files.delete();
Files.copy();
Files.move();
Files.size();
Files.write();
Files.read();