Java面试八股文-基础篇

Java面试八股文-基础篇,第1张

目录

1、java中 *** 作字符串都有哪些类?它们之间有什么区别?

2、JDK和JRE有什么区别?

3、continue、break和return的区别是什么?/终止for循环的方式

4、面向对象三大特征

5、重写和重载的区别

6、final、finally、finalize三者的区别?

7、throw和throws的区别

8、接口和抽象类有什么共同点和区别?

9、为什么要有接口和继承?

10、抽象方法能不能加final?

11、Java为什么被称为平台无关性语言?

12、反射的运用场景

13、JDK中哪些东西用了反射?


1、java中 *** 作字符串都有哪些类?它们之间有什么区别?
  • *** 作字符串的类有:String、StringBuffer、StringBuilder。

  • String和StringBuffer、StringBuilder的区别在于String声明的是不可变的对象,每次 *** 作都会生成新的String对象,然后将指针指向新的String对象,而StringBuffer、StringBuilder可以在原有对象的基础上进行 *** 作,所以在经常改变字符串内容的情况下最好不要使用String。

  • StringBuffer和StringBuilder最大的区别在于,StringBuffer是线程安全的,而StringBuilder是非线程安全的,但StringBuilder的性能高于StringBuffer,所以在单线程环境下推荐使用StringBuilder,多线程环境下推荐使用StringBuffer。

2、JDK和JRE有什么区别?
  • JDK:Java开发工具包,提供了Java的开发环境和运行环境。

  • JRE:Java运行环境,为Java的运行提供了所需环境。

  • JDK包含了JRE,同时还包含了编译Java源码的编译器javac,还包含了很多Java程序调试和分析的工具。如果只需要运行Java程序,只安装JRE就可以了,如果需要编写Java程序,需要安装JDK。

3、continue、break和return的区别是什么?/终止for循环的方式
  • continue:指跳出当前的这一次循环,继续下一次循环。

  • break:指跳出整个循环体,继续执行循环下面的语句。

  • return:用于跳出所在方法,结束该方法的运行。return一般有两种用法:

    • return;:直接使用return结束方法执行,用于没有返回值函数的方法

    • returnvalue;:return一个特定值,用于有返回值函数的方法

4、面向对象三大特征
  • 封装:封装是指把一个对象的状态信息(也就是属性)隐藏在对象内部,不允许外部对象直接访问对象的内部信息。但是可以提供一些可以被外界访问的方法来 *** 作属性。

  • 继承:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。

  • 多态:表示一个对象具有多种状态,具体表现为父类的引用指向子类的对象

5、重写和重载的区别
  • 从概念上来看

    • 重载:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。

    • 重写:子类继承父类以后,可以对父类中同名同参数的方法,进行覆盖 *** 作。

  • 从规则上来看

    • 重载:

      • 重载可以有不同的访问修饰符

      • 重载能够抛出不同的异常

      • 重载一定要有不同的参数列表

    • 重写:

      • 重写访问修饰符的限制一定要大于被重写方法的访问修饰符

      • 重写的参数列表要完全和被重写的方法相同

      • 重写返回的类型要和被重写的方法的返回类型相同

      • 重写方法一定不可以抛出新的检查异常或者是比被重写方法申明更加宽泛的检查型异常

  • 从类的属关系上来看

    • 重写:重写是垂直关系,是子类和父类之间的关系

    • 重载:重载是水平关系,是同一个类中方法之间的关系

6、final、finally、finalize三者的区别?
  • final可以修饰类,变量,方法,修饰的类不能被继承,修饰的变量不能重新赋值,修饰的方法不能被重写。

  • finally用于抛异常,finally代码块内语句无论是否发生异常,都会执行finally,常用于一些流的关闭。

  • finalize方法用于垃圾回收。一般情况下不需要我们实现finalize。

7、throw和throws的区别
  • throw 表示抛出一个异常类的对象,生成异常对象的过程。声明在方法体内。

  • throws 属于异常处理的一种方式,声明在方法的声明处。

8、接口和抽象类有什么共同点和区别?
  • 共同点:

    • 都不能被实例化。

    • 都可以包含抽象方法。

    • 都可以有默认实现的方法(Java 8 可以用 default 关键在接口中定义默认方法)。

  • 区别:

    • 抽象类的子类使用 extends 来继承;接口用 implements 来实现。

    • 抽象类可以有构造函数;接口不能有。

    • 接口主要用于对类的行为进行约束,实现某个接口就具有了对应的行为。抽象类主要用于代码复用,强调的是所属关系。

    • 一个类只能继承一个类,但是可以实现多个接口。

    • 接口中的成员变量只能是 public static final 类型的,不能被修改且必须有初始值,而抽象类的成员变量默认 default,可在子类中被重新定义,也可被重新赋值。

9、为什么要有接口和继承?
  • 继承减少了代码的冗余,提高了代码的复用性,便于功能的扩展,但是继承只能单继承,有局限性,而接口可以实现多个接口。

10、抽象方法能不能加final?
  • 不能,定义抽象类就是让其他类继承的,如果定义为 final 该类就不能被继承,这样彼此就会产生矛盾,所以 final 不能修饰抽象类。

11、Java为什么被称为平台无关性语言?
  • Java 虚拟机实现平台无关性,JVM 有针对不同系统的特定实现(Windows,Linux,macOS),目的是使用相同的字节码,都会给出相同的结果。字节码和不同系统的 JVM 实现是 Java 语言“一次编译,随处可以运行”的关键所在。

12、反射的运用场景
  • 动态代理

  • 注解

13、JDK中哪些东西用了反射?
  • 在JDK中,主要有以下类来实现Java反射机制,这些类都位于java.lang.reflect包中:

  • Class类:代表一个类。

  • Field 类:代表类的成员变量(成员变量也称为类的属性)。

  • Method类:代表类的方法。

  • Modifier类:代表修饰符。

  • lConstructor 类:代表类的构造方法。

  • Array类:提供了动态创建数组,以及访问数组的元素的静态方法。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/920047.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存