JavaSE基础面试题(全面整理版)

本文汇总了 Java SE 面试中常见的基础问题,包括 JDK 与 JRE 的区别、== 与 equals 的比较、hashCode() 和 equals() 的关系、final 的作用、Math.round() 方法、String 类的特性、字符串操作类对比、线程安全与非安全类的区别、多线程概念、JVM 运行时数据区、垃圾回收机制、设计模式、反射机制、异常处理、网络协议等多个方面,旨在全面梳理 Java 基础知识。
摘要由CSDN通过智能技术生成
1.JDK 和 JRE 有什么区别?

JDK是Java的开发工具,它不仅提供了Java程序运行所需的JRE,还提供了一系列的编译,运行等工具,如javac,java,javaw等。
JRE只是Java程序的运行环境,它最核心的内容就是JVM(Java虚拟机)及核心类库。

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

==号比较的是内存地址
equals()比较的是字符串的内容

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

不一定。同时反过来equals为true,hashCode也不一定相同。
hashCode()返回该对象的哈希码值;equals()返回两个对象内容是否相等。

4.final 在 java 中有什么作用?
	// final 修饰的类不能被继承,常用于修饰工具类,不允许第三方修改使用
	final class tools {
    
	    String tool;
	}
	
	class A {
   
	   final boolean name = false; 
	   // final 修饰的变量变成常量,只能被赋值一次(基本类型)
	   final int age;
	   {
   
	   // final 修饰的变量可在构造方法或构造代码块内初始化
	       age = 21; 
	   }   
	   // final 修饰的方法不能被重写,但可以重载
	 final void method() {
    
	     System.out.println("final method");
	 }
	}

class B extends A {
   
    String gender;
    // 错误写法,重写父类中的方法
    // public void method() {
   
    //      
    // }
     
     // 允许重载被final修饰的方法
    public void method(String gender) {
   
        this.gender = gender;
    }
}

    public class Demo1 {
   
    public static void main(String[] args) {
   
   // final 修饰引用类型,地址值仅赋值一次且不能改变,但对象属性值可以改变
        final B b = new B(); 
        // b = new B(); error
        b.gender = "男";
        System.out.println(b.gender);
    }
}

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

原则:同时向正无穷方向取舍,取较大的值 -1

6.String 属于基础的数据类型吗?
  • 基本数据类型如下
    在这里插入图片描述
  • 引用数据类型:数组、接口、对象
  • String类

    String类并不是基本数据类,而是一个类(class),是java等编程语言中的字符串。
    String类是不可变的,对String类的任何改变,都是返回一个新的String类对象。
    String 对象是 System.Char 对象的有序集合,用于表示字符串。
    String 对象的值是该有序集合的内容,并且该值是不可变的。

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

String、StringBuffer、StringBuilder
String : final修饰,String类的方法都是返回new String。即对String对象的任何改变都不影响到原对象,对字符串的修改操作都会生成新的对象。
StringBuffer : 对字符串的操作的方法都加了synchronized,保证线程安全。
StringBuilder : 不保证线程安全,在方法体内需要进行字符串的修改操作,可以new StringBuilder对象,调用StringBuilder对象的append、replace、delete等方法修改字符串。

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

不一样。前者是一个常量,后者又重新new了一个对象,内存空间不一样

9.如何将字符串反转?

https://blog.csdn.net/cghu1201/article/details/78490934

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

https://blog.csdn.net/qq_25406669/article/details/79021911

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

1.抽象类可以没有抽象方法,但是如果你的一个类已经声明成了抽象类,即使这个类中没有抽象方法,它也不能再实例化,即不能直接构造一个该类的对象。
2.如果一个类中有了一个抽象方法,那么这个类必须声明为抽象类,否则编译通不过。

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

1.抽象类不能被实例化。
2.抽象类可以有构造函数,被继承时子类必须继承父类一个构造方法,抽象方法不能被声明为静态。
3.抽象方法只需申明,而无需实现,抽象类中可以允许普通方法有主体
4.含有抽象方法的类必须申明为抽象类
5.抽象的子类必须实现抽象类中所有抽象方法,否则这个子类也是抽象类
6.抽象类是否可以有构造函数?
答案是可以有。抽象类的构造函数用来初始化抽象类的一些字段,而这一切都在抽象类的派生类实例化之前发生。不仅如此,抽线类的构造函数还有一种巧妙应用:就是在其内部实现子类必须执行的代码

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

Java抽象类不可以被 final修饰,抽象类需要被继承才能使用,而被final修饰的类无法被继承,所以abstract和final是不能共存的。

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

(1) 抽象类可以有构造方法,接口中不能有构造方法。
(2) 抽象类中可以有普通成员变量,接口中没有普通成员变量
(3)抽象类中可以包含静态方法,接口中不能包含静态方法
(4) 一个类可以实现多个接口,但只能继承一个抽象类。
(5)接口可以被多重实现,抽象类只能被单一继承
(6)如果抽象类实现接口,则可以把接口中方法映射到抽象类中作为抽象方法而不必实现,而在抽象类的子类中实现接口中方法
在这里插入图片描述

15.java 中 IO 流分为几种?
  • 按流向分(站在程序角度考虑)
    输入流(input)
    输出流(output)

  • 按类型分:

    字节流(InputStream/OutputStream)
    任何文件都可以通过字节流进行传输。

    字符流(Reader/Writer)
    非纯文本文件,不能用字符流,会导致文件格式破坏,不能正常执行。

    节点流(低级流:直接跟输入输出源对接)
    FileInputStream/FileOutputStream/FileReader/FileWriter/PrintStream/PrintWriter.

    处理流(高级流:建立在低级流的基础上)
    转换流:InputStreamReader/OutputStreamWriter,字节流转字符流/字符流转字节流
    缓冲流:BufferedInputStream/BufferedOutputStream BufferedReader/BufferedReader可对节点流经行包装,使读写更快

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

Java BIO : 同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。

Java NIO : 同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。

Java AIO(NIO.2) : 异步非阻塞,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理,

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

创建
createNewFile()在指定位置创建一个空文件,成功就返回true,如果已存在就不创建,然后返回false。
mkdir() 在指定位置创建一个单级文件夹。
mkdirs() 在指定位置创建一个多级文件夹。
renameTo(File dest)如果目标文件与源文件是在同一个路径下,那么renameTo的作用是重命名,如果目标文件与源文件不是在同一个路径下,那么renameTo的作用就是剪切,而且还不能操作文件夹。

删除:
delete()删除文件或者一个空文件夹,不能删除非空文件夹,马上删除文件,返回一个布尔值。
deleteOnExit()jvm退出时删除文件或者文件夹,用于删除临时文件,无返回值。

判断:
exists() 文件或文件夹是否存在。
isFile() 是否是一个文件,如果不存在,则始终为false。
isDirectory() 是否是一个目录,如果不存在,则始终为false。
isHidden() 是否是一个隐藏的文件或是否是隐藏的目录。
isAbsolute() 测试此抽象路径名是否为绝对路径名。

获取:
getName() 获取文件或文件夹的名称,不包含上级路径。
getAbsolutePath()获取文件的绝对路径,与文件是否存在没关系
length()获取文件的大小(字节数),如果文件不存在则返回0L,如果是文件夹也返回0L。
getParent() 返回此抽象路径名父目录的路径名字符串;如果此路径名没有指定父目录,则返回null。
lastModified()获取最后一次被修改的时间。

文件夹相关:
static File[] listRoots()列出所有的根目录(Window中就是所有系统的盘符)
list() 返回目录下的文件或者目录名,包含隐藏文件。对于文件这样操作会返回null。
listFiles() 返回目录下的文件或者目录对象(File类实例),包含隐藏文件。对于文件这样操作会返回null。
list(FilenameFilter filter)返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。
listFiles(FilenameFilter filter)返回指定当前目录中符合过滤条件的子文件或子目录。对于文件这样操作会返回null。

18.java 容器都有哪些?

在这里插入图片描述
在这里插入图片描述

19.Collection 和 Collections 有什么区别?

java.util.Collection是一个集合接口(集合类的一个顶级接口)。
它提供了对集合对象进行基本操作的通用接口方法。
Collection接口在Java 类库中有很多具体的实现。
Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式
其直接继承接口有List与Set。
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
│ └Stack
└Set

java.util.Collections 是一个包装类(工具类/帮助类)。
它包含有各种有关集合操作的静态多态方法。
此类不能实例化,就像一个工具类,用于对集合中元素进行排序、
搜索以及线程安全等各种操作,服务于Java的Collection框架。

  • 52
    点赞
  • 444
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值