JAVA 基础八股,面试八股高频

张开发
2026/5/31 7:28:57 15 分钟阅读
JAVA 基础八股,面试八股高频
1、JAVA特点既可以编译又可以解释JAVA编写一次出处运行面向对象继承封装多态JAVA有自己的垃圾回收机制自动管理内存和回收不再使用的对象。支持多线程2、JVM、JDK、JRE三者之间关系JVMjava的虚拟机将java的字节码编译成机器码并执行程序。JVM提供了内存管理、垃圾回收、安全性等功能。JDK是java的开发工具包是java程序所需的工具集合。包含了JVM、编译器、调试器以及一系列的类库。JDK提供了开发、编译、调试和运行JAVA程序运行所需要的全部工具和环境 。JREjava运行所需要的最小环境。3、JAVA解释和编译都有的原因首先经过编译之后生成字节码文件然后进入JVM中就有两个步骤既能编译又能解释。编译首先java的源代码会将其编译成字节码JIT会将其保存起来解释JVM中一个方法调用计数器当累计计数大于一定值的时候就会使用JIT进行编译成机器码文件否则就是用解释器进行解释执行然后字节码也是经过解释器进行解释运行的。4、JAVA和python的区别Java是已经编译的语言java的编译器将器编译成字节码然后让虚拟机进行解释。Python就是一种解释的语言翻译的时候会在执行程序的同时进行翻译。在JAVA中参数传递只有值传递一种方式不支持引用传递java中所有参数都是值传递。5、JAVA的数据类型基本数据类型和引用数据类型。基本数据类型分为三类数值型整数类型byte、short2、int4字节32位、long8和浮点类型floatdouble科学计数法字符型char布尔型boolean 通常占1个字节6、自动转换和强制转换当一个范围较小的数值或变量转换为一个范围较大的时候会进行自动转换反之会执行强制转换。7、自动拆箱与装箱装箱将基本数据类型转换为包装类型引用数据类型拆箱将包装类型拆解为基本数据类型8、JAVA面向对象编程封装、继承、多态封装指将数据和操作数据的方法捆绑在一起形成一个独立的对象。对象的属性私有化的过程。继承子类自动的共享父类的数据结构和方法能够进行代码复用通过继承来建立类与类之间的数据方法。class Person {protected String name;protected int age;public void eat() {System.out.println(吃饭);}}class Student extends Person {private String school;public void study() {System.out.println(学习);}}多态执行一段java的代码运行的时候会根据对象类型不同产生不同的结果。可以提高代码的扩展性和复用。多态的前置条件子类继承父类子类重写父类的方法父类引用指向子类的对象9、重载和重写的区别重载发生在同一个类中一个类有多个名字相同但是参数个数不同为方法的重载重写发生在子类和父类之间如果子类和父类具有一样的方法参数相同返回的类型相同、方法相同但是方法体不同称为重写。10、This关键字的作用This本身是一个对象代表的是对象的本身可以理解为直线对象本身的一个指针。This的用法有三种普通的直接引用this相当于是指向当前对象本身。形参与成员变量名字重命名用this来区分public Person(String name,int age){this.namename;this.ageage;}引用本类的构造方法11、抽象类和接口的区别实现方式接口用implements而抽象类的关键字为extends。一个类可以有多个接口但是一个类只能继承一个抽象类。方法方式接口只有定义不能用方法实现抽象类既可以定义也可以实现方法。访问修饰符接口成员变量默认为public static final必须赋初值不能被修改其所有的成员方法都是public、abstract的。抽象类中成员变量默认default可在子类中被重新定义也可被重新赋值抽象方法被abstract修饰不能被private、static、synchronized和native等修饰必须以分号结尾不带花括号。变量 抽象类可以包含实例变量和静态变量而接口只能包含常量。12、继承和抽象区别继承是一种允许子类继承父类的属性和方法通过继承子类可以重用父类的代码。抽象是一种隐藏复杂性和只显示必要部分的技术。在面向对象编程中抽象可以通过抽象类abstract和接口实现。抽象类只能做其他类的父类不能被实例化13、FinalFinal修饰一个类表示这个类不能被继承String 类、Integer 类和其他包装类都是用 final 修饰的。Final修饰方法方法不能被重写Final修饰变量变量一旦初始化便不能再次修改。14、为什么重写equals必须重写hashcode因为基于哈希的集合类需要基于这一点来正确存储对象和查找对象。具体地说hashmap通过对象的哈希码将其存储在不同的桶中当查找对象时需要用key确定在哪个桶中。如果重写了 equals()方法而没有重写 hashCode()方法那么被认为相等的对象可能会有不同的哈希码从而导致无法在 HashMap 中正确处理这些对象。15、JAVA是值传递还是引用传递是值传递不是引用传递。引用对象传递的是地址不是对象的本身16、深拷贝和浅拷贝的区别浅拷贝会创建一个新对象但是对象的属性和原来相同。深拷贝也会创建一个新对象但会递归复制所有的引用对象确保新对象和原对象独立17、JAVA创建对象New 通过调用类的构造方法来创建对象。Person person new Person();反射机制反射机制允许在运行时创建对象并且可以访问类的私有成员在框架和工具类中比较常见。Class clazz Class.forName(Person);Person person (Person) clazz.newInstance();Clone拷贝创建Person person new Person();Person person2 (Person) person.clone();序列化机制创建18、Stringstring是java的一个类属于引用数据类型使用final修饰是不可变类一旦string对象被创建存储的文本内容就不能被改变无法被继承。19、String和stringbuilder、stringbuffer的区别String、StringBuilder和StringBuffer在 Java 中都是用于处理字符串的它们之间的区别是String 是不可变的平常开发用得最多当遇到大量字符串连接时就用 StringBuilder它不会生成很多新的对象StringBuffer 和 StringBuilder 类似但每个方法上都加了 synchronized 关键字所以是线程安全的。20、IntegerInteger a 127;Integer b 127;a和b是相等的。这是因为 Java 在自动装箱过程中会使用Integer.valueOf()方法来创建Integer对象。Integer.valueOf()方法会针对数值在-128 到 127 之间的Integer对象使用缓存。因此a和b实际上引用了常量池中相同的Integer对象。21、Java异常处理体系Try-catch-finally语句和throw关键字实现。Throw是java语言中所有错误和异常的积累有两个主要的子类error和exception这两个类分别代表了java异常处理体系中的两个分支。Error代表严重的错误这类错误通常是程序无法处理的。比如OutOfMemoryError 表示内存不足。Exception 类代表程序可以处理的异常。它分为两大类编译时异常Checked Exception和运行时异常Runtime Exception。异常处理的方式抛出异常throw和throws补获异常 try catch。21、Java 中 IO 流分为几种数据流的方向输入或输出、处理的数据单位字节或字符、流的功能以及流是否支持随机访问等。22、BIO、NIO 和 AIO同步式阻塞:线程在执行 I/O 操作时被阻塞无法处理其他任务适用于连接数较少的场景同步非阻塞模式:线程在等待 I/O 时可执行其他任务通过 Selector 监控多个 Channel 上的事件适用于连接数多但连接时间短的场景。异步IO:使用异步 I/O 模型线程发起 I/O 请求后立即返回当 I/O 操作完成时通过回调函数通知线程适用于连接数多且连接时间长的场景。同步式阻塞相当于餐馆服务员只服务一桌从点菜到客人走而同步非阻塞相当于这个服务员负责一个区域的人不同的桌子可以随时找他而异步阻塞是客人点完菜之后服务员该干啥干啥去。23、反射、应用、原理反射允许JAVA在运行时检查和操作类的方法和字段。通过反射可以动态地获取类的字段、方法、构造方法。反射功能主要通过 java.lang.Class 类及 java.lang.reflect 包中的类如 Method, Field, Constructor 等来实现。有些信息在编译的时候无法确定但是在运行时又想要获取类的信息、创建类的方法和实例这时候就要用到反射。应用场景spring框架利用反射动态加载和管理BeanJAVA的动态代理机制使用反射来创建代理的类。JUnit 和 TestNG 等测试框架使用反射机制来发现和执行测试方法。

更多文章