31道Java核心面试题,一次性打包送给你 (5)

1)编译器无法决定调用哪个重写的方法,因为只从变量的类型上是无法做出判断的,要在运行时才能决定;但编译器可以明确地知道该调用哪个重载的方法,因为引用类型是确定的,参数个数决定了该调用哪个方法。

2)多态针对的是重写,而不是重载。

31道Java核心面试题,一次性打包送给你

如果在一个类中有多个相同名字的方法,但参数不同,则称为方法重载。

父类中有一个方法,子类中有另外一个和它有相同签名(方法名相同,参数相同、修饰符相同)的方法时,则称为方法重写。子类在重写父类方法的时候可以加一个 @Override 注解。

19、`main()` 方法可以重载吗?

可以,一个类中可以有多个名称为“main”的方法:

public class MainTest {
    public static void main(String[] args) {
        System.out.println("main(String[] args)");
    }

    public static void main(String[] args,String arg) {
        System.out.println("(String[] args,String arg");
    }
}

但该类在运行的时候,只会找到一个入口,即 public static void main(String[] args)。

20、一个 Java 源文件中有多个 public 类吗?

一个 Java 源文件中不能有多个 public 类。

31道Java核心面试题,一次性打包送给你

21、什么是 Java 的 package(包)?

在 Java 中,我们使用 package(包)对相关的类、接口和子包进行分组。这样做的好处有:

使相关类型更容易查找

避免命名冲突,比如说 com.itwanger.Hello 和 com.itwangsan.Hello 不同

通过包和访问权限控制符来限定类的可见性

可以使用 package 关键字来定义一个包名,需要注意的是,这行代码必须处于一个类中的第一行。强烈建议在包中声明类,不要缺省,否则就失去了包结构的带来的好处。

包的命名应该遵守以下规则:

应该全部是小写字母

可以包含多个单词,单词之间使用“.”连接,比如说 java.lang

名称由公司名或者组织名确定,采用倒序的方式,比如说,我个人博客的域名是 ,所以我创建的包名是就是 com.itwanger.xxxx。

每个包或者子包都在磁盘上有自己的目录结构,如果 Java 文件时在 com.itwanger.xxxx 包下,那么该文件所在的目录结构就应该是 com->itwanger->xxxx。

默认情况下,java.lang 包是默认导入的,我们不需要显式地导入该包下的任何类。

package com.cmower.bb;

public class PackageTest {
    public static void main(String[] args) {
        Boolean.toString(true);
    }
}

Boolean 类属于 java.lang 包,当使用它的时候并不需要显式导入。

22、什么是访问权限修饰符?

访问权限修饰符对于 Java 来说,非常重要,目前共有四种:public、private、protected 和 default(缺省)。

一个类只能使用 public 或者 default 修饰,public 修饰的类你之前已经见到过了,现在我来定义一个缺省权限修饰符的类给你欣赏一下。

class Dog {
}

哈哈,其实也没啥可以欣赏的。缺省意味着这个类可以被同一个包下的其他类进行访问;而 public 意味着这个类可以被所有包下的类进行访问。

假如硬要通过 private 和 protected 来修饰类的话,编译器会生气的,它不同意。

31道Java核心面试题,一次性打包送给你

private 可以用来修饰类的构造方法、字段和方法,只能被当前类进行访问。protected 也可以用来修饰类的构造方法、字段和方法,但它的权限范围更宽一些,可以被同一个包中的类进行访问,或者当前类的子类。

可以通过下面这张图来对比一下四个权限修饰符之间的差别:

31道Java核心面试题,一次性打包送给你

同一个类中,不管是哪种权限修饰符,都可以访问;

同一个包下,private 修饰的无法访问;

子类可以访问 public 和 protected 修饰的;

public 修饰符面向世界,哈哈,可以被所有的地方访问到。

23、什么是 final 关键字?

final 关键字修饰类的时候,表示该类无法被继承。比如,String 类就是 final 的,无法被继承。

final 关键字修饰方法的时候,表示子类无法覆盖它。

final 关键字修饰变量的时候,表示该变量只能被赋值一次,尽管变量的状态可以更改。

关于 final 更详细的内容,可以参照我之前写了另外一篇文章:

我去,你竟然还不会用 final 关键字

24、什么是 static 关键字?

static 关键字可以用来修饰类变量,使其具有全局性,即所有对象将共享同一个变量。

static 关键字可以用来修饰方法,该方法称为静态方法,只可以访问类的静态变量,并且只能调用类的静态方法。

关于 static 更详细的内容,可以参照我之前写了另外一篇文章:

面试官:兄弟,说说Java的static关键字吧

25、finally 和 finalize 有什么区别?

finally 通常与 try-catch 块一起使用,即使 try-catch 块引发了异常,finally 块中的代码也会被执行,用于释放 try 块中创建的资源。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpfppw.html