博主总结面试题目终极之战——Java专栏——第二期(15题)

DBC 390 0

一、单例模式中,两个基本要点是

构造函数私有

静态工厂方法

以上都不对

唯一实例

温馨提示

答案很明显,具体可以看这三篇文章。

什么是单例模式:

创建型设计模式-单例设计模式和应用

1年前 (2021-07-12) 0
博主总结面试题目终极之战——Java专栏——第二期(15题)插图
  • 说到单例模式,那就避免不了两个经典:饿汉和懒汉

饿汉

单例模式中的饿汉实现和选择问题

1年前 (2021-07-12) 0
博主总结面试题目终极之战——Java专栏——第二期(15题)插图2

懒汉

单例模式中的懒汉实现+双重检查锁定+内存模型

1年前 (2021-07-12) 0
博主总结面试题目终极之战——Java专栏——第二期(15题)插图4

二、以下代码可以使用的修饰符是:()

public interface Status {
 /*INSERT CODE HERE*/  int MY_VALUE=10;
 }

final

static

abstract

public

温馨提示

接口中字段的修饰符:public static final(默认不写)
接口中方法的修饰符:public abstract(默认不写)

三、以下说法错误的是()

其他选项均不正确

java线程类优先级相同

Thread和Runnable接口没有区别

如果一个类继承了某个类,只能使用Runnable实现线程

温馨提示

这一题有点意思的,题目说的是要找的是错误的说法,A选项答案是正确的,所以说法也是正确的,所以不选A。挺有意思,记录一下,审题很关键![aru_35]

四、以下描述正确的是

CallableStatement是PreparedStatement的父接口

PreparedStatement是CallableStatement的父接口

CallableStatement是Statement的父接口

PreparedStatement是Statement的父接口

温馨提示

具体看这张图
博主总结面试题目终极之战——Java专栏——第二期(15题)插图6

五、下面有关java final的基本规则,描述错误的是?

final修饰的类不能被继承

final修饰的成员变量只允许赋值一次,且只能在类方法赋值

final修饰的局部变量即为常量,只能赋值一次。

final修饰的方法不允许被子类覆盖

温馨提示
  • 答案为:B
    • final修饰的成员变量为基本数据类型是,在赋值之后无法改变。当final修饰的成员变量为引用数据类型时,在赋值后其指向地址无法改变,但是对象内容还是可以改变的。
    • final修饰的成员变量在赋值时可以有三种方式。
      • 1、在声明时直接赋值。
      • 2、在构造器中赋值。
      • 3、在初始代码块中进行赋值。

六、输出结果为

String str = "";
System.out.print(str.split(",").length);
温馨提示

解析看下面

    /**  * String split 这个方法默认返回一个数组,  * 如果没有找到分隔符,  * 会把整个字符串当成一个长度为1的字符串数组  * 返回到结果, 所以此处结果就是1  */  private static void testSpringSpilte(){
        String str = "12,3";
        String str2 = "123";
        System.out.print(str.split(",").length);
        System.out.print(str2.split(",").length);
    }
}
结果  2  1

七、以下代码执行的结果显示是多少( )?

public class Demo {
  class Super {

    int flag = 1;

    Super() {
      test();
    }

    void test() {
      System.out.println("Super.test() flag=" + flag);
    }
  }
  class Sub extends Super {

    Sub(int i) {
      flag = i;
      System.out.println("Sub.Sub()flag=" + flag);
    }
    void test() {
      System.out.println("Sub.test()flag=" + flag);
    }
  }
  public static void main(String[] args) {
    new Demo().new Sub(5);
  }
}

Sub.test() flag=1
Sub.Sub() flag=5

Sub.Sub() flag=5
Sub.test() flag=5

Sub.test() flag=0
Sub.Sub() flag=5

Super.test() flag=1
Sub.Sub() flag=5

温馨提示
  • 在继承中代码的执行顺序为:
    • 1.父类静态对象,父类静态代码块
    • 2.子类静态对象,子类静态代码块
    • 3.父类非静态对象,父类非静态代码块
    • 4.父类构造函数
    • 5.子类非静态对象,子类非静态代码块
    • 6.子类构造函数
  • 对于本题来说:在只想new Sub(5)的时候,父类先初始化了 int flag = 1,然后执行父类的构造函数Super(),父类构造函数中执行的test()方法,因子类是重写了test()方法的,因此父类构造函数中的test()方法实际执行的是子类的test()方法,所以输出为Sub.test() flag=1,接着执行子类构造函数Sub(5) 将flag赋值为5,因此输出结果Sub.Sub() flag=5。最终选择了A。

八、关于上面代码片段叙述正确的是()

byte b1=1,b2=2,b3,b6;  
final byte b4=4,b5=6;  
b6=b4+b5;  
b3=(b1+b2);  
System.out.println(b3+b6);

输出结果:13

语句:b6=b4+b5编译出错

语句:b3=b1+b2编译出错

运行期抛出异常

温馨提示
  • 被final修饰的变量是常量,这里的b6=b4+b5可以看成是b6=10;在编译时就已经变为b6=10了
  • 而b1和b2是byte类型,java中进行计算时候将他们提升为int类型,再进行计算,b1+b2计算后已经是int类型,赋值给b3,b3是byte类型,类型不匹配,编译不会通过,需要进行强制转换。
  • Java中的byte,short,char进行计算时都会提升为int类型。

发表评论 取消回复
表情 图片 链接 代码

分享