Java面试题——第五篇(Java基础)

1. main方法为什么是静态的,能不能改为非静态的

由于JVM在运行Java应用程序的时候,首先会调用main方法,调用时不实例化这个类的对象,而是通过类名直接调用因此需要限制为public static。
不能改为非静态,main方法必须声明为静态的,这样JVM才可以调用main方法而无需实例化他的类。

2. main方法能被重写吗

在Java中静态方法在编译时会编译在一起,main方法是静态方法,所以在Java中不能重写静态方法。

3. Java语法糖是什么意思

指在计算机语言中添加的某种语法,这种语法对语言的功能没有影响,但是更方便程序员适用,简而言之,语法糖让程序更加简洁,有更高的可读性。
常见的语法糖包括

  • 自动装箱拆箱
  • 泛型
  • 增强的for循环
  • 字符串连接符(+)
  • 方法引用

4. 为什么重写equals还要重写hashcode

HashMap中,如果要比较key是否相等,要同时使用这两个函数。因为自定义的类的hashcode()方法继承于Object类,其hashcode码为默认的内存地址。 这样,即便有相同含义的两个对象,比较也是不相等的。HashMap中比较key是这样的,先求出key的hashcode(),比较其值是否相等,若相等在比较equals(),若相等则认为是相等。 否则,认为他们不相等。

5. 如何实现对象克隆

  1. 实现cloneable接口并重写object类中的clone方法。
  2. 实现Serializable接口,通过对象的序列化和反序列化实现克隆,可以实现真正的深度克隆。

6. 内部类的分类有哪些

在Java中,内部类是一个相对独立的类,但他被定义在另一个类的内部。内部类可以访问其外部类的所有成员,并提供了更好的封装性和代码组织方式。根据定义的位置和特性,内部类主要分为以下几种。

  1. 成员内部类
  • 定义:定义在类内部但在方法外的内部类。
  • 特点:
    – 可以访问外部类的所有成员(包括私有成员)。
    – 是非静态的,必须通过外部类的实例来创建。
    – 可以被定义为private、protected、public或默认访问级别。
  1. 静态内部类
  • 定义:使用static关键字修饰的内部类。
  • 特点:
    – 只能访问外部类的非静态成员。
    – 可以通过外部类名直接创建,不需要外部类的实例。
    – 可以被定义为private、protected、public或默认访问级别。
  1. 局部内部类(也称作方法内部类)
  • 定义:定义在方法或者代码块内部的内部类。
  • 特点:
    – 他的作用域仅限于定义他的方法或者代码块。
    – 可以访问外部类的所有成员。
    – 不能定义静态成员(包括静态方法和静态变量)
    – 不能使用访问修饰符修饰。
  1. 匿名内部类
  • 定义:没有名字的内部类,通常用于实现接口或者抽象类的实例化。
    在这里插入图片描述

7. 局部内部类和匿名内部类访问局部变量的时候,为什么变量必须加上final

示例:

public class Outer{
  void outMethod(){
    final int a = 10;
    class Inner{
      void innerMethod(){
		System.out.println(a);
      }
    }
  }
}

上述例子,变量a必须加上final,因为生命周期不一致,局部变量直接存储在栈中,当方法结束后,非final的局部变量就被销毁。而局部内部类对局部变量的引用依然存在,如果局部内部类要调用局部变量时,就会出错,加了final,可以确保局部内部类使用的变量与外层的局部变量区分开。

8. 抽象方法是否可同时是静态方法、本地方法或者被synchronized修饰

都不能
抽象方法需要子类重写,而静态方法无法被重写。
本地方法是native实现的
synchronized和方法的实现细节有关,抽象方法不涉及实现细节。

9. 类的实例化顺序

比如父类静态数据,构造函数,字段,子类静态数据,构造函数,字段,他们的执行顺序。
先静态、先父后子。
一个类的实例化过程

  1. 父类中的static代码块,当前类的static。
  2. 顺序执行父类的普通代码块。
  3. 父类构造函数。
  4. 子类普通代码块。
  5. 子类构造函数
  6. 子类方法执行。

10. float f = 3.2 是否正确

不正确
3.2是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型,会造成精度丢失,因此需要强制类型转换
float f = (float) 3.2.

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值