第一部分 Java 基础

120 阅读4分钟

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中可以用来修饰类,方法和变量

  1. final修饰的类不能被继承
  2. final修饰的方法不能被重写
  3. 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可以在原来的对象进行操作,性能较好

StringBufferStringBuilder的区别是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();