面试 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)hashCode
与 equals
:
- hashCode 方法: 返回对象的哈希码值,是一个int类型的整数。哈希码用于快速定位对象在哈希表中的位置。在Java中,如果两个对象通过
equals
方法相等,那么它们的hashCode
值必须相等,但反之则不成立。 - equals 方法: 用于比较两个对象是否在逻辑上相等。在重写
equals
方法时,通常也需要重写hashCode
方法,以确保相等的对象具有相等的哈希码。
开源项目地址:https://gitee.com/falle22222n-leaves/vue_-book-manage-system
前后端总计已经 700+ Star,1W+ 访问!
⭐点赞⭐收藏⭐不迷路!⭐