常见Java笔面试题集(一)

常见Java笔面试题集(一)
1.什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言”?
答:Java源文件被编译成能被Java虚拟机执行的字节码文件,Java虚拟机是一个可以执行Java字节码的虚拟机进程。Java语言编译程序只需生成能在Java虚拟机上运行的字节码文件,不需要程序员为每一个平台单独重写或重新编译,就可以在不同平台不加修改的运行,Java虚拟机知道底层硬件平台的指令长度和其他属性,把字节码解释成具体平台上的机器指令执行。
2.JDK和JRE的区别是什么?
答:JRE是将要执行Java程序的Java虚拟机,JDK是完整的Java软件开发包,包换JRE、编译器和其他工具,可以让开发者开发、编译、执行Java应用程序。
3.被static修饰的语句或变量

  • 随着类的加载而加载,类中的静态代码块进存在类加载时执行一次,且优与主方法
  • 优先于对象,被所有对象所共享,可直接被类名调用
  • 静态方法只能访问静态成员变量
  • 静态方法中不同使用this和super关键字
  • main方法为静态方法

总的来说:不管是静态方法还是静态成员,都是类级别存在,随类的加载而加载,优先于对象存在,而非静态成员和方法都是对象级别的,静态方法中不能调用非静态的成员和方法(此时对象还未存在)。

4.接口与抽象类的区别
答:(接口)

  • 接口中只有方法的申明,方法没有方法体,成员函数默认是public修饰的
  • 接口中只有常量没有变量,定义的变量编译时默认加上public static final修饰
  • 接口中是绝对抽象的,没有构造方法,不能实例化对象
  • 接口中定义的方法都必须有实现类实现,实现类不能实现接口中的方法,则定义为抽象类
    ( 抽象类用abstract修饰)
  • 抽象类可以包含抽象方法和非抽象方法,abstract不能与final、static、private并列修饰同一个方法
  • 抽象类不能创建对象,抽象类不一定包含抽象方法,若该类有抽象方法,该类必须是抽象类
  • 类可以实现多个接口,但是只能继承一个抽象类
  • 不能直接使用抽象类,必须使用子类继承或实现

5.final关键字的规则

  • final修饰的类不能被继承,abstract不能与final同修饰一个类
  • final修饰的成员变量只允许赋值一次且只能通过构造方法赋值
  • final修饰的局部变量为常量且只能赋值一次
  • final修饰的方法不允许被子类重写,可以被子类继承

6.super关键字的规则
答:子类的构造方法总是先调用父类中的构造方法,如果子类的构造方法没有明显指出调用父类哪一个构造方法,默认调用父类无参数构造方法。若父类没有无参数构造方法,子类需要在自己构造函数中显示的调用父类的有参数构造方法,用super(参数)的形式调用父类构造函数,并写在子类构造函数第一句。
7.super的初始化过程
答:首先初始化父类中的静态变量和静态代码块,顺序执行。然后初始化子类中的静态变量和静态代码块,顺序执行。其次初始化父类中的非静态变量和非静态代码块,再执行父类构造函数。最后初始化子类的非静态变量和非静态代码块,再执行子类构造函数。
8.this关键字使用规则
答:

  • 能访问除构造方法以外的所有属性、方法,通过(this.方法或属性)的形式进行调用
  • 在构造方法中使用 this(参数列表) 的形式,相当于调用本类中其他构造方法,必须放在该构造方法的第一句位置
  • 不能在静态方法中使用this,this相当于实例对象,静态方法中不存在实例对象

9.方法重载和方法覆盖的区别
答:方法重载是发生在同一类中两个或者两个以上的方法的方法名相同但参数不同的情况。方法覆盖发生在子类重写父类中的方法,方法覆盖必须有相同的方法名,参数列表和返回类型。
10.什么是值传递和引用传递?
答:值传递是对基本数据类型而言,传递的是该变量的一个副本,改变副本不影响原变量。引用传递是对对象型变量而言,传递是该对象地址的一个副本,并不是原变量本身,对引用对象进行操作也会改变原对象值。

猜你喜欢

转载自blog.csdn.net/m0_37862403/article/details/89091573