Java高频面试题基础篇01

Posted 技术人小柒

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java高频面试题基础篇01相关的知识,希望对你有一定的参考价值。

一、Java 语⾔具有哪些特点?

(1)Java 为纯⾯向对象的语⾔。它能够直接反应现实⽣活中的对象。
(2)具有平台⽆关性。Java 利⽤ Java 虚拟机运⾏字节码,⽆论是在 Windows、Linux 还是 MacOS 等其它平台对 Java 程序进⾏编译,编译后的程序可在其它平台运⾏。
(3)很好的可移植性。Java 为解释型语⾔,编译器把 Java 代码编译成平台⽆关的中间代码,然后在 JVM 上解释运⾏,具有很好的可移植性。
(4)Java 提供了很多内置类库。如对多线程⽀持,对⽹络通信⽀持,最重要的⼀点是提供了垃圾回收器。
(5)Java 具有较好的安全性和健壮性。Java 提供了异常处理和垃圾回收机制,去除了 C++中难以理解的指针特性。

二、JDK 与 JRE 有什么区别?

JDK:Java 开发⼯具包(Java Development Kit),提供了 Java 的开发环境和运⾏环境
JRE:Java 运⾏环境(Java Runtime Environment),提供了 Java 运⾏所需的环境
JDK 包含了 JRE。如果只运⾏ Java 程序,安装 JRE 即可。要编写 Java 程序需安装 JDK。

三、简述 Java 基本数据类型。

byte: 占⽤ 1 个字节,取值范围-128 ~ 127;
short: 占⽤ 2 个字节,取值范围-215 ~ 215-1;
int:占⽤ 4 个字节,取值范围-231 ~ 231-1;
long:占⽤ 8 个字节;
float:占⽤ 4 个字节;
double:占⽤ 8 个字节;
char: 占⽤ 2 个字节;
boolean:占⽤⼤⼩根据实现虚拟机不同有所差异。

四、简述⾃动装箱拆箱。

对于 Java 基本数据类型,均对应⼀个包装类。
(1)装箱就是⾃动将基本数据类型转换为包装器类型,如 int->Integer;
(2)拆箱就是⾃动将包装器类型转换为基本数据类型,如 Integer->int。

五、简述 Java 访问修饰符。

default: 默认访问修饰符,在同⼀包内可⻅;
private: 在同⼀类内可⻅,不能修饰类;
protected : 对同⼀包内的类和所有⼦类可⻅,不能修饰类;
public: 对所有类可⻅。

六、构造⽅法、成员变量初始化以及静态成员变量三者的初始化顺序?

先后顺序:静态成员变量、成员变量、构造⽅法
详细的先后顺序:⽗类静态变量、⽗类静态代码块、⼦类静态变量、⼦类静态代码块、⽗类⾮静态变量、⽗类⾮静态代码块、⽗类构造函数、⼦类⾮静态变量、⼦类⾮静态代码块、⼦类构造函数。

七、Java 代码块执⾏顺序。

⽗类静态代码块(只执⾏⼀次);⼦类静态代码块(只执⾏⼀次);⽗类构造代码块;⽗类构造函数;⼦类构造代码块;⼦类构造函数;普通代码块。

八、⾯向对象的三⼤特性?

(1)继承:对象的⼀个新类可以从现有的类中派⽣,派⽣类可以从它的基类那继承⽅法和实例变量,且派⽣类可以修改或新增新的⽅法使之更适合特殊的需求;
(2)封装:将客观事物抽象成类,每个类可以把⾃身数据和⽅法只让可信的类或对象操作,对不可信的进⾏信息隐藏;
(3)多态:允许不同类的对象对同⼀消息作出响应。不同对象调⽤相同⽅法即使参数也相同,最终表现⾏为是不⼀样的。

九、为什么 Java 语⾔不⽀持多重继承?

为了程序的结构能够更加清晰从⽽便于维护。假设 Java 语⾔⽀持多重继承,类 C 继承⾃类 A 和类 B,如果类 A 和 B 都有⾃定义的成员⽅法 f() ,那么当代码中调⽤类 C 的 f() 会产⽣⼆义性。
Java 语⾔通过实现多个接⼝间接⽀持多重继承,接⼝由于只包含⽅法定义,不能有⽅法的实现,类 C 继承接⼝ A 与接⼝ B 时即使它们都有⽅法 f() ,也不能直接调⽤⽅法,需实现具体的 f() ⽅法才能调⽤,不会产⽣⼆义性。
多重继承会使类型转换、构造⽅法的调⽤顺序变得复杂,会影响到性能。

十、简述 Java 的多态。

Java 多态可以分为编译时多态运⾏时多态
编译时多态主要指⽅法的重载,即通过参数列表的不同来区分不同的⽅法。
运⾏时多态主要指继承⽗类和实现接⼝时,可使⽤⽗类引⽤指向⼦类对象
运⾏时多态的实现:主要依靠⽅法表,⽅法表中最先存放的是 Object 类的⽅法,接下来是该类的⽗类的⽅法,最后是该类本身的⽅法。如果⼦类改写了⽗类的⽅法,那么⼦类和⽗类的那些同名⽅法共享⼀个⽅法表项,都被认作是⽗类的⽅法。因此可以实现运⾏时多态。

秋招冲刺应届生JAVA岗-每日5道高频面试题Day6- 基础篇


  • 个人主页: IT学习日记
  • 版权: 本文由【IT学习日记】原创、在CSDN首发
  • 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)、有任何问题欢迎私信,看到会及时回复!

一: 前言
  • 大家好,这里是IT学习日记,一个非双一流大学毕业的深漂族,年少曾憧憬大厂,面试过许多家公司,也曾踩过无数坑,深知面试技巧和知识广度与深度对一个应届生乃至工作多年的开发者的重要性
  • 故特意收集了各个公司、大厂的面试高频题,通过每天打卡的方式,和大家一起记录和学习,希望能够帮助到应届生和开发者们少走弯路,一起冲向大厂!!!

每日壁纸


二: 面试题目

一:请选出下面关于重写和重载说法正确的选项


  • A: 在子类中,如果方法没有被public修饰符修饰,则该方法不能重载(Overload)
  • B: 重写(Override)只需要满足方法名和参数类型相同即可
  • C: 重写(Override)要求方法的方法名、参数(包括参数类型和参数顺序)、返回值类型都要相同
  • D: 有相同的方法名、参数名、参数类型则表示该方法被重写了

答案: C


  A选项错误: 重载方法与方法的修饰符和返回值类型无关,只跟参数列表(包括参数类型、参数顺序、参数个数)和方法名有关。


在这里插入图片描述


  B选项错误: 重写发生在子类与父类或者子类和接口之间,要求如下(简称:两同两小一大原则):

  • 两同: 表示重写的参数列表(包括参数类型、参数顺序、参数个数)和方法名需要相同。
  • 两小: 表示方法的返回值类型要小于或等于父类的返回值类型和方法抛出的异常要小于或等于父类方法抛出的异常
  • 一大: 表示重写的方法访问修饰符要大于或等于父类方法的修饰符

  @Override注解时JDK自带的注解之一,用于重写的方法之上,如果方法不满足重写的条件,则编译不通过,在重写方法时,建议添加该注解,提高代码可读性



  D选项错误: 说法不正确,重写的方法需要遵循"两同两小一大"原则。

二:请选出下面对应重载说法错误的选项


  • A: 重载方法的方法名必须相同
  • B: 重载方法的区别是参数列表(参数个数或者参数类型)
  • C: 重载方法的返回值必须一致
  • D: 重载方法的实现可以不一样

答案: C (重载只与方法的参数列表和方法名相关,与方法的返回值类型和方法修饰符类型无关)


三:请选出下面说法正确的选项


  • A: 静态方法不能被重写
  • B: 静态方法不能被private修饰
  • C: 私有方法不能被重载
  • D: 静态方法不能通过对象进行调用

答案: A


  A选项正确: 静态方法可以被继承,但是不能被重写。因为静态方法是属于类级别的,在加载到JVM时就已经确定了,但重写是表现多态的一种方式,通过父类引用指向子类,然后在运行时再确定具体的类型从而执行不同的逻辑。


在这里插入图片描述


  B选项错误: 静态方法和普通方法一样可以被public、protected,默认修饰符、private修饰。


在这里插入图片描述


  C选项错误: 重载是表示相同的方法名有不同的参数列表的方法,与返回值类型和访问修饰符无关。


  D选项错误: 静态方法是属于类级别的方法,可以通过类名和实例对象名调用(不推荐使用实例调用静态方法)。



四: 下面那个选项替换到"here"可以让结果输出为:son


public class DemoFather {
    private String name;
    public static void main(String[] args) {
        DemoFather item = new DemoSon();
        // here
    }
}

class DemoSon extends DemoFather{
    private String name;
    public String output(){
        name = "son";
        return name;
    }
}

  • A: System.out.println(item.name);
  • B: System.out.println(item.output());
  • C: System.out.println(((DemoSon)item).output());
  • D: System.out.println((DemoFather)item).output());

答案: C (使用父类引用指向子类,想调用子类的方法,需要将父类类型强制转换成子类类型再进行调用)



五: 下面代码执行会输出什么结果?


class Parent {
    public Parent() {
        System.out.println("A");
    }
}

public class Son extends Parent {
    public Son() {
        System.out.println("B");
    }

    public static void main(String[] args) {
        Parent a = new Son();
        a = new Parent();
    }
}

答案: A B A (因为Son继承了Parent类,在加载Son类时会先去加载它的父类,所以会先执行父类的构造方法)


每日小结


   不积跬步,无以至千里;不积小流,无以成江海。今天播种努力的种子,总会有一天发芽!

   欢迎大家关注,如果觉得文章对你有帮助,不要忘记一键三连哦,你的支持是我创作更加优质文章的动力,希望大家都能够早日拿到心仪的Offer,有任何面试问题可以私信我,欢迎大家投稿面试题目哦!

以上是关于Java高频面试题基础篇01的主要内容,如果未能解决你的问题,请参考以下文章

Java开发基础面试题,java研发工程师年终总结

Java面试题

「腾讯」Java高级工程师面试高频题:JVM+Redis+并发+算法+框架

面试题Java基础篇-常见面试题总结p3

Java面试高频题:Spring Boot+JVM+Nacos高并发+高可用已撸完

面试题Java基础篇-常见面试题总结p1