牛客笔试题整理(2)

1.类初始化的顺序

  1. 父类的静态变量和静态代码块赋值(按照声明顺序)
  2. 自身的静态变量和静态代码块赋值(按照声明顺序)
  3. 父类的成员变量和块赋值(按照声明顺序)
  4. 父类构造器赋值:如果父类没有无参构造器,则子类中一定要使用super(参数)指定父类的有参构造器,否则会报错
  5. 自身的成员变量和块赋值(按照声明顺序)
  6. 自身构造器赋值

2.数组是对象吗

  1. 数组是一个对象,不同类型的数组具有不同的类
  2. 两个数组用equals方法比较时,比较的是地址,Arrays.equal()可以比较数组元素。

3.枚举类的构造方法

枚举类在后台实现时,实际上是转化为一个继承了java.lang.Enum类的实体类,原先的枚举类型变成对应的实体类型,上例中AccountType变成了个class AccountType,并且会生成一个新的构造函数,若原来有构造函数,则在此基础上添加两个参数,生成新的构造函数,如上例子中:

private AccountType(){ System.out.println(“It is a account type”); }

会变成

private AccountType(String s, int i){
    super(s,i); System.out.println(“It is a account type”); }

而在这个类中,会添加若干字段来代表具体的枚举类型:

public static final AccountType SAVING;
public static final AccountType FIXED;
public static final AccountType CURRENT;

所以,有几个枚举实例,便会调用几次构造方法。

4.有关finally语句块说法正确的是

  1. 不管catch是否捕获异常,finally语句块都是要被执行的(√)
  2. 在try语句块或catch语句块中执行到System.exit(0)直接退出程序(√)
  3. finally块中的return语句会覆盖try块中的return返回(√)
  4. finally 语句块在 catch语句块中的return语句之前执行(×)

finally语句并非在catch语句块中的return语句之前执行,而是在return后面的表达式运算后执行的(此时并没有返回运算后的值,而是先把要返回的值保存起来,不管finally中的代码怎么样,返回的值都不会改变,仍然是之前保存的值),所以函数返回值是在finally执行前确定的

5.is-a:继承关系 has-a:从属关系 like-a:组合关系

  1. is-a 表示的是继承
  2. has-a 表示的是一个类中包含另一个类
  3. like-a 表示实现接口

6.Java中的四类八种基本数据类型

  1. 整数类型 byte short int long
  2. 浮点型 float double
  3. 逻辑型 boolean(它只有两个值可取true false)
  4. 字符型 char

7.Java四种访问权限

8.super()与this()

  1. super()表示调用父类构造函数、this()调用自己的构造函数,而自己的构造函数第一行要使用super()调用父类的构造函数,所以这俩不能在一个构造函数中会出现重复引用的情况
  2. super()和this()必须在构造函数第一行,所以这一点也表明他俩不能在一个构造函数中
  3. this()和super()都指的是对象,所以,均不可以在static环境中使用。包括:static变量,static方法,static语句块(里面不能使用非static类型的)。

9.off-heap堆外内存

off-heap叫做堆外内存,将你的对象从堆中脱离出来序列化,然后存储在一大块内存中,这就像它存储到磁盘上一样,但它仍然在RAM中。对象在这种状态下不能直接使用,它们必须首先反序列化,也不受垃圾收集。序列化和反序列化将会影响部分性能(所以可以考虑使用FST-serialization)使用堆外内存能够降低GC导致的暂停。堆外内存不受垃圾收集器管理,也不属于老年代,新生代。

10.判断一块内存空间是否符合垃圾收集器收集标准的标准

  1. 给对象赋值为null,以下没有调用过。
  2. 给对象赋了新的值,重新分配了内存空间。
发布了60 篇原创文章 · 获赞 6 · 访问量 1221

猜你喜欢

转载自blog.csdn.net/DLC990319/article/details/104930316