Java基础面试题(常见)

147 阅读3分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

9.1.1 final、finally、finalize的区别

final: 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,被其修饰的类不可继承。

finally: 异常处理语句结构的一部分,表示总是执行。

finalize: Object 类的一个方法,在垃圾回收器执行的时候会调用被回收对象的此方法,可以覆盖此方法。提供垃圾收集时的其他资源回收,例如关闭文件等。该方法更像是一个对象生命周期的临终方法,当该方法被系统调用则代表该对象即将“死亡”,但是需要注意的是,我们主动行为上去调用该方法并不会导致该对象“死亡”,这是一个被动的方法(其实就是回调方法),不需要我们调用。

9.1.2 &和&&的区别

&运算符有两种用法:(1)按位与;(2)逻辑与。

&&运算符是短路与运算。

举个例子:

@Test
    public void 短路与的区别 (){
        Person person = null;
        System.out.println(person!=null && "3".equals(person.getAge()));
        System.out.println(person!=null & "3".equals(person.getAge()));
    }

&&: 短路,不会走完全代码。

&: 按位与,会走完整个代码。

总结:如果person为空,后面执行对比的话,会报空指针。

9.1.3 跳出多重循环

可以简单标识符[outer]该标识自定义名称后+冒号。

配合break +标识;

如下:

@Test
    public void 跳出多重循环(){
        outer:
        for(int i =0;i<10;i++){
            System.out.println(i);
            for(int j=0;j<10;j++){
                System.out.println(j);
                for(int k=0;k<10;k++){
                    System.out.println(k);
                    break outer;
                }
            }
        }
​
    }

9.1.4 final修饰

final修饰类: final最终类,不能被继承,不能派生子类。

final修饰方法: 1、修饰静态方法:没什么影响。 2、修饰实例方法:不能被重写,报错。

final修饰成员变量: 总规则:final修饰的变量,有且仅有被复制一次!!!

修饰静态成员变量: 定义的时候复制,要么在静态代码块中赋值。

修饰实例成员变量: 常量,final修饰的静态成员变量就是常量!(public static fianl String NAME;)

9.1.5 重载和重写的区别

重载: 发生在同一个类中,方法名必须相同,参数类型、个数、顺序必须不同。方法返回值和访问修饰符可以不同,发生在编译时。

重写: 发生在父子类中,方法名、参数列表必须相同,返回值范围小于等于父类,抛出的异常范围小于等于父类,访问修饰符范围大于等于父类;如果父类方法访问修饰符为 private 则子类就不能重写该方法。

9.1.6 类中构造器

构造器: 不能有返回值修饰,如修饰返回值不被调用。类的构造器使用private修饰,该类不给调用者new。不能重写,可以被重载。

重载例子:

public class BeanTest {
​
    public BeanTest(){
        System.out.println("类初始化构造器");
    }
    
    public BeanTest(String name){
        System.out.println(name);
    }
}

提示:不能加任何返回值类型,包括void。