3w 字长文爆肝 Java 基础面试题!太顶了!!! (4)

static 可以修饰代码块,主要分为两种,一种直接定义在类中,使用 static{},这种被称为静态代码块,一种是在类中定义静态内部类,使用 static class xxx 来进行定义。

static 可以用于静态导包,通过使用 import static xxx 来实现,这种方式一般不推荐使用

static 可以和单例模式一起使用,通过双重检查锁来实现线程安全的单例模式。

深入理解请参考这篇文章

final 关键字是干什么用的?谈谈你的理解

final 是 Java 中的关键字,它表示的意思是 不可变的,在 Java 中,final 主要用来

修饰类,final 修饰的类不能被继承,不能被继承的意思就是不能使用 extends 来继承被 final 修饰的类。

修饰变量,final 修饰的变量不能被改写,不能被改写的意思有两种,对于基本数据类型来说,final 修饰的变量,其值不能被改变,final 修饰的对象,对象的引用不能被改变,但是对象内部的属性可以被修改。final 修饰的变量在某种程度上起到了不可变的效果,所以,可以用来保护只读数据,尤其是在并发编程中,因为明确的不能再为 final 变量进行赋值,有利于减少额外的同步开销。

修饰方法,final 修饰的方法不能被重写。

final 修饰符和 Java 程序性能优化没有必然联系

抽象类和接口的区别是什么

抽象类和接口都是 Java 中的关键字,抽象类和接口中都允许进行方法的定义,而不用具体的方法实现。抽象类和接口都允许被继承,它们广泛的应用于 JDK 和框架的源码中,来实现多态和不同的设计模式。

不同点在于

抽象级别不同:类、抽象类、接口其实是三种不同的抽象级别,抽象程度依次是 接口 > 抽象类 > 类。在接口中,只允许进行方法的定义,不允许有方法的实现,抽象类中可以进行方法的定义和实现;而类中只允许进行方法的实现,我说的方法的定义是不允许在方法后面出现 {}

使用的关键字不同:类使用 class 来表示;抽象类使用 abstract class 来表示;接口使用 interface 来表示

变量:接口中定义的变量只能是公共的静态常量,抽象类中的变量是普通变量。

重写和重载的区别

在 Java 中,重写和重载都是对同一方法的不同表现形式,下面我们针对重写和重载做一下简单的区分

子父级关系不同,重写是针对子级和父级的不同表现形式,而重载是在同一类中的不同表现形式;

概念不同,子类重写父类的方法一般使用 @override 来表示;重写后的方法其方法的声明和参数类型、顺序必须要与父类完全一致;重载是针对同一类中概念,它要求重载的方法必须满足下面任何一个要求:方法参数的顺序,参数的个数,参数的类型任意一个保持不同即可。

构造器能否被重载,能否被重写?

这道题考到你对于构造器的理解和认识。

我们 Java 中创建一个对象其实就是调用了该对象的构造方法,比如下面代码

InstanceObject IO = new InstanceObject() ; // 调用了无参构造方法 InstanceObject IO = new InstanceObject(xxx) ; // 调用了有参数的构造方法

而重载的概念是什么呢?

它是指我们可以定义一些名称相同的方法,通过定义不同的输入参数来区分这些方法,然后再调用时,JVM 就会根据不同的参数样式,来选择合适的方法执行

也就是说,重载的概念更多描述的是对相同命名的方法的不同描述。那么我们上面这段代码很显然就是重载了,因为名称相同,我可以通过有无参数来判断调用不同的构造方法来进行初始化。

那么构造器能否被重写呢?这里我们先来看一下什么是重写

重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。从重写的概念定义来说我们就知道构造器不能被重写了。

首先,构造器没有返回值,第二点,构造器的名称必须和类名一致。

你总不能在类 A 中写了 public A();在类 B 中也写 public A() 吧,这显然是不能通过编译的。

byte的取值范围是多少,怎么计算出来的

byte 的取值范围是 -128 -> 127 之间,一共是 256 个。一个 byte 类型在计算机中占据一个字节,那么就是 8 bit,所以最大就是 2^7 = 1111 1111。

Java 中用补码来表示二进制数,补码的最高位是符号位,最高位用 0 表示正数,最高位 1 表示负数,正数的补码就是其本身,由于最高位是符号位,所以正数表示的就是 0111 1111 ,也就是 127。最大负数就是 1111 1111,这其中会涉及到两个 0 ,一个 +0 ,一个 -0 ,+0 归为正数,也就是 0 ,-0 归为负数,也就是 -128,所以 byte 的范围就是 -128 - 127。

HashMap 和 HashTable 的区别

相同点

HashMap 和 HashTable 都是基于哈希表实现的,其内部每个元素都是 key-value 键值对,HashMap 和 HashTable 都实现了 Map、Cloneable、Serializable 接口。

不同点

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

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