Java面试八股文(2023最新)--Java基础面试题

本文详细介绍了Java编程的基础知识,包括Java的概述,Jdk、Jre和Jvm的区别,跨平台性原理,字节码的作用,以及Java与C++的区别。同时,涵盖了数据类型、流程控制、面向对象特性、类与接口、内部类、重写与重载、对象相等判断等内容,深入讲解了String类的特性和内存管理,以及反射机制和常用API的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

 Java概述

1.什么是Java

2.Jdk,Jre和Jvm的区别

3.什么是跨平台性,原理是什么

4.什么是字节码,采用字节码的好处

5.Java和C++的区别

6.Oracle JDK和OpenJDK的区别

基础

7.Java有哪些数据类型

8.switch能否作用在byte,long,string上?

9.用最有效率的方式计算2乘以8

10.Math.round(11.5)等于多少?Math.round(-11.5)多少?

11.java采用何种编码方案?有何特点?

12.java注解

13.访问修饰符 public,private,protected,默认 的区别

14.&和&&的区别

15.final有什么用?

16.final finally finalize的区别

17.this关键字的用法

18.super关键字的用法

19. this与super的区别

20. static存在的意义

21.static的独特之处

22. static的应用场景

23. static的注意事项

流程控制语句

24. break,continue,return的区别

25. 如何跳出多重嵌套循环

面向对象

26.面向对象与面向过程的区别

27. 面向对象特征

28. 什么是多态机制?Java如何实现多态?

类与接口

29. 抽象类和接口的对比

30. 抽象类和普通类的区别?

31. 创建对象用什么关键字?对象实例与对象引用有何不同?

变量与方法

32. 成员变量和局部变量的区别有哪些?

33. 构造方法特性

34. 静态变量与普通变量的区别

内部类

35. 什么是内部类?

36. 内部类的优点以及应用场景?

重写(Overload)与重载(Override)

37. 构造器是否可以重写

38. 重载和重写的区别

对象相等判断

39. ==和equals的区别

40. 对象的相等与指向他们的引用相等,两者有何不同?

Java包

41. JDK常用包有哪些

42. import java和javax的区别

IO流

43. java中io流分几种?

44. Files的常用方法?

反射

45.什么是反射机制?

46. 反射机制的优缺点

47. 反射的应用场景

48. Java获取反射的三种方法

常用API

49. 字符型常量和字符串常量的区别

50. 什么是字符串常量池?

51. String有哪些特性

52. String str = "i" 与 String str = new String("i")一样吗?

53. String常用的方法?

54. 使用HashMap时,用String做key有什么好处?

55. String和StringBuffer,StringBuilder区别?为什么String不可变?

包装类

56. 自动装箱与自动拆箱

57. int和integer有什么区别


 Java概述

1.什么是Java

  • Java是一门面向对象编程语言,不仅吸收了C++的各种优点,还摒弃了C++里难以理解的多继承,指针等概念,因此Java语言具有功能强大和简单易用两个特征.Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程.

2.Jdk,Jre和Jvm的区别

jdk包含jre,jre包含jvm

  • JVM(Java virtual Machine):
    Java虚拟机,它能够将class文件中的字节码指令进行识别并且调用操作系统上的api完成动作,JVM是跨平台的核心.作用:保证Java语言跨平台
  • JRE(Java Runtime Environment):
    Java运行环境.包含JVM标准实现以及java核心类库.作用:Java程序的运行环境.
  • JDK(java Development Kit):
    Java开发工具包.JDK是整个Java开发的核心,集成了Jre和一些工具.作用:Java程序的开发环境

3.什么是跨平台性,原理是什么

  • 所谓跨平台性是指Java编写的程序,一次编译之后,可以在多个系统平台上运行.
  • 实现原理:
    java程序通过Java虚拟机在系统平台运行,只要该系统安装相应的java虚拟机,该系统就可以运行Java程序

4.什么是字节码,采用字节码的好处

  • 字节码:Java源代码经过java虚拟机编译后产生的文件(.class文件),它面向虚拟机
  • 采用字节码的好处:
    Java语言通过字节码的方式,在一定程度上解决了传统解释性语言执行效率底的问题,同时又保留了解释性语言可移植的特点.所以Java程序运行比较高效,而且,由于字节码并不专对一种特定的机器,因此,无需重新编译即可在多种不同的计算机运行.

5.Java和C++的区别

  • 都是面向对象语言,都支持继承,封装,多态.
  • Java不提供指针来直接访问内存,程序内更加安全.
  • java类是单继承,C++支持多继承;Java类不支持多继承,但是接口可以多继承.
  • Java有自动内存管理机制,不需要程序员手动释放无用内存.

6.Oracle JDK和OpenJDK的区别

  1. OracleJDK版本每三年发布一次,而OpenJDK每三个月发布一次
  2. OpenJdk是完全开源的,而OracleJdk是OpenJdk的一个实现,不完全开源
  3. OracleJdk更加稳定,两者代码几乎相同,但OracleJdk有一些错误的修复.
  4. 在响应性和Jvm性能方面,更加推荐OracleJdk
  5. OracleJdk不会提供长期支持版本,用户必须更新到最新版本获得支持

基础

7.Java有哪些数据类型

定义:Java是强类型语言,对于每一种数据类型都定义了明确的具体的数据类型,在内存中分配了不同大小的内存空间

  • 基本数据类型:
    • 整数类型(byte(1字节),short(2字节),int(4字节),long(8字节))
    • 浮点型(float(4字节),double(8字节))
    • 字符型(char(2字节))
    • 布尔型(boolean(1字节))
  • 引用数据类型:
    • 类(class):接口(interface),数组([])

8.switch能否作用在byte,long,string上?

  • 在java5之前,switch(expr)中,expr只能byte,short,char,int.Java5开始,Java中引用枚举类型,expr也可以是枚举类型,从java7开始,expr可以是字符串(string),但是long目前在所有版本都是不可以的

9.用最有效率的方式计算2乘以8

  • 2<<3(左移3位相当于2的3次方,右移三位相当于除以2的三次方)

10.Math.round(11.5)等于多少?Math.round(-11.5)多少?

  • 前者返回值12,后者返回值-11

11.java采用何种编码方案?有何特点?

  • Java采用Unicode编码标准,为每个字符制定了一个唯一的数值,因此在任何语言,平台,程序都可以放心使用

12.java注解

  • 单行注释
    • //注释文字
  • 多行注释
    • /* 注释文字*/
  • 文档注释
    • /** 注释文字 */

13.访问修饰符 public,private,protected,默认 的区别

  • 定义:java中,可以使用访问修饰符来保护对类,变量,方法和构造方法的访问,java支持4种不同的访问权限.
  • 分类
    • private: 在同一类内可见.适用对象:变量,方法.不能修饰类
    • default:什么都不写,同一个包可见,不使用任何修饰符.适用对象:类,接口,变量,方法
    • protected:对同一包内的类和所有子类可见 适用对象:变量,方法.不能修饰外部类
    • public:对所有类可见.适用对象:类,接口,变量,方法

14.&和&&的区别

  • &运算符两边都为true结果才为true
  • &&运算符第一个表达式为false,则不计算后面的表达式
    • 注意:|运算符和||运算符也是如此

15.final有什么用?

  • 被final修饰的类不能被继承
  • 被final修饰的方法不能被重写
  • 被funal修饰的变量不能被改变,被修饰的不可变的是变量的引用,而不是指向的内容,指向的内容是可以改变的

16.final finally finalize的区别

  • final可以修饰类,变量,方法,修饰类表示该类不能被继承,修饰方法表示该方法不能被重写,修饰变量表示该变量不能被重新赋值
  • finally一般作用try catch代码块中,处理异常时我们将一定执行的代码放在finally代码块中,表示无论是否出现异常,都会执行,一般存放关闭资源的代码
  • finalize是一个方法,属于Object类的一个方法,而Object方法是所有类的父类,该方法一般由垃圾回收来调用,当我们调用System.gc()方法时,由垃圾回收调finalize(),回收垃圾,一个对象是否可以回收的最后判断.

17.this关键字的用法

  • this是一个自身的对象,代表对象本身,可以理解为指向本身对象的指针
  • this用法在Java中大概分为三种:
    • 1. 普通的直接引用,相当于指向对象本身
    • 2. 形参与成员名字重名,用this区分
      public Person(String name, int age) {
          this.name = name;
          this.age = age;
      }
  • 3. 引用本类的构造函数

    class Person{
            private String name;
            private int age;
        public Person() {}
        public Person(String name) {
            this.name = name;}
    
        public Person(String name, int age) {
            this(name);
            this.age = age;}
    }

18.super关键字的用法

  • super可以理解为指向自己超(父)类对象的指针,而这个超类是离自己最近的一个父类
  • super三种用法
    • 直接引用
    • 子类中的成员变量或方法与父类中的成员变量或方法同名,使用super区分
      class Person{
      protected String name;
      public Person(String name) {
      this.name = name;
      }
      }
      class Student extends Person{
      private String name;
      public Student(String name, String name1) {
      super(name);
      this.name = name1;
      }
      public void getInfo(){
      System.out.println(this.name); //Child
      System.out.println(super.name); //Father
      }
      }
      public class Test {
      public static void main(String[] args) {
      Student s1 = new Student("Father","Child");
      s1.getInfo();
      }
      }
    • 引用父类的构造函数

19. this与super的区别

  • super:引用当前对象的父类中的成员(用来访问父类中被隐藏的成员数据或函数,基类与派生类中有相同成员定义时如:super.变量名,super.成员函数名(实参))
  • this:代表当前对象名
  • this与super类似,super是在子类中调用父类的构造方法,this在本类中调用本类的其他构造方法
  • super()和this()均需要放在构造方法第一行
  • this和super不能出现在一个构造器,this必然会调用其他构造器,其他构造器必然也会有super 的存在,同一个给灾区有相同的语句就失去了意义
  • this和super都不能再status环境修饰 如:status变量,status方法,status语句块
  • this是一个指向本对象的指针,而super是一个java关键字

20. static存在的意义

  • static主要的意义是在于创建独立于具体对象的域的变量或者方法.以至于没有创建对象也能使用方法
  • static关键字还有一个主要的作用,用来形成静态代码块以优化程序性能.static代码块可以放置在程序的任何地方.类中可以有多个static代码块.在类初次被加载时,会按照static代码块的先后顺序执行每个代码块,并且只会执行一次
  • 为什么说static可以优化程序性能?因为它只会在类加载的时候加载一次.因此很多时候会将一些只需要进行一次的初始化操作放在static代码块中进行,

21.static的独特之处

  1. 被static修饰的变量或者方法是独立于任何对象,也就是说,这些变量和方法不属于任何一个实例对象,而是被类的实例对象所共享
  2. 在类第一次被加载的时候,就回去加载被static修饰的部分,而且只在类被第一次加载的时候进行初始化,注意是第一次用就要初始化,后面根据需要可以再次进行赋值.
  3. static变量在类加载的时候分配空间,以后创建类对象的时候不会再重新分配,赋值的话,可以被任意赋值
  4. 被static修饰的变量或者方法是优于对象存在的,也就是说当一个类加载完毕之后,即使没有创建对象,也可以进行访问.

22. static的应用场景

  • 因为static是被类额实例对象所共享,因此如果某个成员变量是被所有的对象共享,那么这个成员变量就应该被定义为静态变量
  • static常用的场景:
    • 修饰成员变量
    • 修饰成员方法
    • 静态代码块
    • 修饰类(只能修饰内部类,也就是静态内部类)
    • 静态导包

23. static的注意事项

  • 静态只能访问静态
  • 非静态既可以访问非静态,也可以访问静态的

流程控制语句

24. break,continue,return的区别

  • break:跳出总上层循环,不再执行循环(结束当前循环体)
  • continue: 跳出本次循环,继续执行下次循环(结束正在执行的,进入下一个)
  • return: 程序返回,不再执行下面的的代码(结束当前方法 直接返回)

25. 如何跳出多重嵌套循环

  • 想要跳出多重循环,可以在外面定义一个标号 例如:
public static void main(String[] args) {
    ok:
    for (int i = 0; i < 10; i++) {
        for (int j = 0; j < 10; j++) {
            System.out.println("i=" + i + ",j=" + j);
            if (j == 5) {
                break ok;
  
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月月崽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值