面试 Java 基础八股文十问十答第十三期

面试 Java 基础八股文十问十答第十三期

作者:程序员小白条个人博客

相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新!

⭐点赞⭐收藏⭐不迷路!⭐

1)在一个静态方法内调用一个非静态成员为什么是非法的?

1)在一个静态方法内调用一个非静态成员是非法的,因为静态方法属于类而不是实例,它不依赖于类的实例化。非静态成员(例如实例变量或非静态方法)需要在对象实例化后才能被访问,而静态方法在对象实例化之前就可以被调用。在静态方法内部,没有this对象的引用,因此无法直接访问非静态成员,因为非静态成员的访问需要一个实例化的对象。

2)什么是方法的返回值?返回值的作用是什么?

2)方法的返回值是指方法执行后返回的数据。在很多编程语言中,方法可以执行一些操作,并产生一个结果,这个结果就是返回值。返回值可以是任何数据类型,包括整数、浮点数、字符串、对象等。返回值的作用是让调用者获取方法执行的结果,然后可以根据需要进行后续的操作。

3)什么是内部类?

3)内部类是定义在另一个类内部的类。在许多编程语言中都支持内部类,包括Java。内部类可以访问其外部类的成员,包括私有成员,而外部类也可以访问内部类的成员。内部类的存在可以使得代码更加模块化,将相关的类组织在一起,同时可以访问彼此的私有成员,提高了封装性。内部类分为静态内部类和非静态内部类,静态内部类不持有外部类的引用,而非静态内部类持有外部类的引用。

4)内部类的分类有哪些

4)内部类的分类包括:

  • 成员内部类(Member Inner Class): 定义在类的内部,且不是static的内部类。成员内部类可以访问外部类的所有成员,包括私有成员。
  • 静态内部类(Static Inner Class): 定义在类的内部,且使用static关键字修饰。静态内部类与外部类之间的关系并不密切,它不持有外部类的引用。
  • 局部内部类(Local Inner Class): 定义在方法或作用域内,仅在定义它的块中可见。
  • 匿名内部类(Anonymous Inner Class): 没有显式地命名的内部类,通常用于创建一个只需使用一次的类的实例。

5)内部类有哪些应用场景

5)内部类的应用场景包括:

  • 封装: 内部类可以访问外部类的私有成员,从而提高了封装性。
  • 组织: 将相关的类组织在一起,形成更清晰、模块化的代码结构。
  • 回调函数: 使用匿名内部类实现接口,用于简化事件处理或回调函数的实现。
  • 实现接口: 内部类可以方便地实现接口,并且可以直接访问外部类的成员。

6)局部内部类和匿名内部类访问局部变量的时候,为什么变量必须 要加上final?

6)局部内部类和匿名内部类访问局部变量的时候,变量必须加上final关键字,是因为在内部类中,如果局部变量没有被标记为final,其生命周期可能会超过方法的生命周期,导致在方法执行完毕后仍然被内部类所引用。通过将局部变量标记为final,编译器可以确保这样的情况不会发生,从而使内部类能够安全地访问这些变量。在Java 8及以后的版本中,虽然可以省略final关键字,但实际上变量仍然是不可变的。这是因为在编译时,Java会隐式地为内部类创建一个拷贝,并将原始变量标记为final

7)构造器(constructor)是否可被重写(override)

7)构造器(constructor)不能被重写(override)。子类可以有自己的构造器,但不能覆盖(override)父类的构造器。当创建子类的对象时,会先调用父类的构造器,然后再调用子类的构造器。

8)重载(Overload)和重写(Override)的区别。重载的方法能否根据返回类型进行区分?

  • 重载(Overload): 在同一个类中,可以定义多个方法,它们具有相同的名称但不同的参数列表(参数类型、个数、顺序)。编译器根据方法的参数列表来区分不同的重载方法。
  • 重写(Override): 在子类中重新定义父类中已经存在的方法,方法名、参数列表以及返回类型必须相同。重写用于实现多态性,子类通过重写可以提供自己的实现,但方法签名必须与父类相同。

关于返回类型:重载的方法不能仅通过返回类型的不同来进行区分。两个方法如果只有返回类型不同,编译器会认为它们是相同的方法,从而导致编译错误。

9)== 和 equals 的区别是什么

9)== 和 equals 的区别:

  • ==(相等运算符): 在比较基本数据类型时,比较它们的值是否相等;在比较引用类型时,比较它们的引用地址是否相等。
  • equals 方法: 是Object类中的方法,用于比较两个对象是否在逻辑上相等。默认情况下,equals方法是比较对象的引用地址,但可以根据需要在类中重写equals方法来定义自定义的相等比较规则。

10)hashCode 与 equals (重要)

10)hashCodeequals

  • hashCode 方法: 返回对象的哈希码值,是一个int类型的整数。哈希码用于快速定位对象在哈希表中的位置。在Java中,如果两个对象通过 equals 方法相等,那么它们的 hashCode 值必须相等,但反之则不成立。
  • equals 方法: 用于比较两个对象是否在逻辑上相等。在重写 equals 方法时,通常也需要重写 hashCode 方法,以确保相等的对象具有相等的哈希码。

开源项目地址:https://gitee.com/falle22222n-leaves/vue_-book-manage-system

前后端总计已经 700+ Star,1W+ 访问!

⭐点赞⭐收藏⭐不迷路!⭐

  • 22
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小白条

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值