Java基础面试题

120 阅读6分钟

1.java的基本数据类型有哪些?

java的基本数据类型有byte 1字节,short 2字节,int 4字节, long 8字节,double 8字节,float4字节,char 2字节, boolean1字节

2.Integer

享元空间:使用static存储了 -128 ~ 127 范围的数据进行复用

3.说一下static关键字:

  1. 修饰变量时,是静态变量,在方法区中,被多个当前类的对象共享。有线程安全问题。直接通过类名访问
  2. 修饰方法时,该方法为静态方法,在方法区中,直接通过类名访问,只能访问静态变量
  3. 修饰代码块时,该代码块会先于构造器之前执行,且只会执行一次
  4. 修饰类时,一般做为内部类

4.说一下final关键字

  1. 修饰变量时,说明当前变量是一个常量,只能初始化一次。常量要求建议大写.如果不直接对变量进行初始化,那么必须在代码块中或构造器中初始化,否则报错. image.png
  2. 修饰方法时,当前方法不能被重写
  3. 修饰类时,当前类不能被继承,比如Stirng类就是被fianl修饰的类.
  4. final相关的关键字finally、finalize,finally。finally一般使用try...catch块中,表示最终一定会执行的代码。finalize方法一般在GC时会调用。

5.说一下java的三大特性

java的特性有封装、继承、多态。 image.png

6. 说一下抽象和接口的区别

image.png

7.说一下java异常体系,以及常见的异常有哪些?

java异常体系最上层的是Throwable类,Thrwoable下有Eorr和Exception两个子类,其中Error一般不由程序员捕获或处理。Exception异常分为RuntimeException运行时异常,和非运行时异常,也就是编译时异常。常见的运行时异常有

  1. NullPoniterException空指针

  2. ArrayIndexOutOfBoundsException数组下标越界

  3. ClassCastException类型转换异常

  4. NumberFormatException数字格式化异常

  5. ArithmeticException异常,算数异常

  6. IllegalArgumentException,非法参数异常

    常见的编译时异常有:

  7. IOException io异常

  8. FileNotFoundException 文件未找到异常

  9. SQLException sql异常

异常在项目中的使用:

  1. 自定义异常
  2. 全局异常处理器
  3. 声明式事务

8.Object类中有哪些方法

  1. toString 该方法用于返回对象的字符串表示形式。默认情况下,它返回的是对象的类名和对象的哈希码的十六进制表示。通常被重写以提供更具体的对象状态描述
  2. equals用来比较两个对象是否相等。默认实现是比较两个对象的引用是否相同。通常会根据业务逻辑重写此方法来实现值相等的比较。
  3. hashCode 返回对象的哈希码值,用于集合类如HashMap中的快速查找。当重写了equals方法时,通常也需要重写hashCode方法,确保相等的对象拥有相同的哈希码
  4. getClass 返回当前对象的Class对象,可以用来获取对象所属类的信息,如类名、构造器、方法等。
  5. wait 写在同步代码块中,让当前线程处于等待状态,会释放锁。等待其他线程调用 notify 或 notifyAll 方法唤醒,再执行
  6. notify
  7. notifyAll
  8. clone 创建并返回此对象的一个浅拷贝。默认抛出CloneNotSupportedException异常,除非类实现了Cloneable接口。
  9. finalize 一般在GC时调用

9.说一下你对string的认识

String是一个常量类,不能被继承。String类型的变量是引用型变量,它的值存储在堆中方法区的字符串常量池中。字符串常量池有复用机制,同一个字符串不会被创建多次。JDK8以后将存储string的数组有char[]改成了byte[],因为字符串值是拉丁字符居多而之前使用的char数组每一个char占用两个字节而拉丁字符只需要一个字节就可以存储,剩下的一个字节就浪费了,造成内存的浪费,gc的更加频繁。 String常用的方法有:

  1. length返回字符串的长度
  2. trim去除字符串首尾的空白字符(包括空格、制表符、换行符等)
  3. getBytes将字符串转换为字节数组,默认使用平台的默认字符集进行编码(UTF-8)
  4. subString返回从指定开始索引到结束索引(不包括)之间的子字符串。
  5. indexOf返回指定字符或子字符串在字符串中第一次出现的位置,如果未找到则返回 -1。
  6. lastIndexOf返回指定字符或子字符串在字符串中最后一次出现的位置,如果未找到则返回 -1.
  7. split根据指定的分隔符将字符串分割成一个字符串数组。
  8. equals比较两个字符串是否相等,区分大小写.
  9. toUpperCase将字符串中的所有字符转换为大写。
  10. toLowerCase将字符串中的所有字符转换为小写。
  11. valueOf将各种数据类型(如基本数据类型、对象等)转换为字符串。

10.方法的重写与重载

重载是在同一类中,方法名相同,方法参数列表不同,返回值类型不限的方法。

重写是发生在继承情况下,子类重写父类方法,方法名,参数列表,返回值都与父类相同,但方法体不同。

11.==和equals的区别

在java中,Object是所有类的父类. equals是Object中的方法,其底层调用的就是==的用法。所以如果子类不对equals进行重写, 他俩的用法是相同的。即在比较基本数据类型时比较的是值,在比较引用数据类型时比较的是地址值。若子类对equals进行重写需要看重写的逻辑,一般是根据对象的属性去判断两个对象是否相等。重写equals方法,一般都会重写hashCode方法。一是因为Java的规范,二是为了保证操作不重复集合时的正确性。比如单列集合中的set集合。hashCode又称哈希值 他是经过哈希运算得到的一个整数值 任何东西经过哈希运算之后都能得到一个固定的整数值 如果两个对象的哈希值不一样,那就说明内容一定不相等,但哈希值一样,但是内容不一定一样,这种现象被称为哈希碰撞。 如果产生哈希碰撞,再调用equals比较内容。