牛客-Java专项练习

本篇博客用于记录在牛客网做的Java专项练习中的错题或重要的题。

1. 

牛客-Java专项练习

【注】构造方法没有返回类型

2. 

牛客-Java专项练习牛客-Java专项练习

【注】finially块会在try块的return语句之前执行,并且如果在finially块中有return语句,那么该return就是最终的返回结果

3. 

牛客-Java专项练习牛客-Java专项练习

【注】8大基本类型与引用类型的默认值

4. 

牛客-Java专项练习

【注】匿名类写法

5. 

牛客-Java专项练习

6. 

牛客-Java专项练习

【注】使用java命令运行class文件的时候class文件不需要加后缀

7. 

牛客-Java专项练习

【注】这里调用的是run方法,不是start方法

8. 

牛客-Java专项练习

【注】

A:ConcurrentHashMap使用锁分段技术,首先将数据分成一段一段地存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问。

B:牛客-Java专项练习

C:牛客-Java专项练习返回的是一个内部类ArrayList

9. 

牛客-Java专项练习

【注】枚举中有三个成员变量,所以调用三次构造方法

10. 

牛客-Java专项练习

【注】垃圾回收器主要是回收堆上的对象,而方法在方法区中

11. 

牛客-Java专项练习

【注】wait方法必须要用try、catch捕获或用throws抛出InterruptedException;wait方法和notify方法必须是对锁对象进行调用

12.

牛客-Java专项练习

13.

牛客-Java专项练习

【注】基本类型、修饰符、循环、条件、异常、多线程、最常用、不常用

14.

牛客-Java专项练习

15. 

牛客-Java专项练习

16.

牛客-Java专项练习

17.

牛客-Java专项练习

18.

牛客-Java专项练习

牛客-Java专项练习

牛客-Java专项练习

牛客-Java专项练习

19.

牛客-Java专项练习

【注】new一个子类的时候,会默认调用父类的默认构造方法

20.

牛客-Java专项练习

【注】整数/整数=整数

21.

牛客-Java专项练习

【注】静态代码块 -> 非静态代码块 -> 构造方法

22.

牛客-Java专项练习

【注】这应该是Error的描述

23.

牛客-Java专项练习

牛客-Java专项练习

24.

牛客-Java专项练习

【注】只要记住i++是先使用再加就行了

25.

牛客-Java专项练习

26.

牛客-Java专项练习牛客-Java专项练习牛客-Java专项练习牛客-Java专项练习

public abstract class A {

    /**
     * 1. 抽象类可以有构造方法
     */
    public A() {}

    /**
     * 2. 抽象类中的字段任意
     */
    public int a = 1;
    String b = "";
    private static final int C = 2;

    /**
     * 3. 抽象类中可以包含不是abstract的方法
     */
    public void func() {}
    protected void func1() { }
    void func2() { }
    private void func3() { }

    /**
     * 4. 抽象类中的方法可以是public、protected和default的,不能是private的
     */
    public abstract void aFunc();
    protected abstract void aFunc1();
    abstract void aFunc2();
    //private abstract void aFunc3();       //Illegal combination of modifiers: 'abstract' and 'private'

    /**
     * 5. 抽象类中可以有static方法
     */
    public static void f() {}
}
public interface B {

    /*public B() {
        //1. 接口不能有构造方法,因为接口中的方法都是abstract的,不能有body
    }*/

    /**
     * 2. 接口中的字段默认是 public static final
     */
    int A = 1;

    /**
     * 3. 接口中的方法默认是 public abstract
     */
    void func();

    /**
     * 4. 接口中可以有default方法(JDK1.8)
     */
    default void func1() {}

    /**
     * 5. 接口中可以有static方法(JDK1.8)
     */
    static void f() {}
}v

牛客-Java专项练习

27.

牛客-Java专项练习

28.

牛客-Java专项练习

【注】finalize方法只会被调用一次,final修饰的引用变量内容是可变的

29.

牛客-Java专项练习

【注】static类不能implements

30.

牛客-Java专项练习

31.

牛客-Java专项练习牛客-Java专项练习

牛客-Java专项练习

32.

牛客-Java专项练习

33.

牛客-Java专项练习

【注】父类的构造函数不能继承,只能调用

34. 

牛客-Java专项练习

【注】File类是对目录及其属性进行操作的类,读写要用流

35.

牛客-Java专项练习牛客-Java专项练习

【注】牛客-Java专项练习只是不推荐,但是编译能通过

36.

牛客-Java专项练习

37.

牛客-Java专项练习

牛客-Java专项练习

38. 

牛客-Java专项练习牛客-Java专项练习

【注】局部内部类是方法中的类或代码块中的类,不能加访问修饰符

39.

牛客-Java专项练习牛客-Java专项练习

40.

牛客-Java专项练习

41.

牛客-Java专项练习

【注】final只能保证基本类型的内存可见性

42.

牛客-Java专项练习

【注】形参对应函数定义,实参对应函数调用

43.

牛客-Java专项练习牛客-Java专项练习

44.

牛客-Java专项练习

【注】

子类和父类中用static修饰的同名方法,看似override,实际不是,调用子类的该方法会指向父类的该方法,并且在父类中该方法overload,overload是静态分派,因为静态类型是Collection,所以指向形参是Collection的方法。

如果去掉子类和父类中的static修饰后,就是override,调用该子类的该方法就指向子类的该方法。

45.

牛客-Java专项练习

46.

牛客-Java专项练习

【注】B选项牛客-Java专项练习

47.

牛客-Java专项练习

【注】因为限制jdk1.7,所以A正确,jdk1.8中接口中也可以定义非抽象方法

48.

牛客-Java专项练习

【注】常用ASCII码值:' '为32;'0'为48;'A'为65;'a'为97

49.

牛客-Java专项练习

【注】牛客-Java专项练习

50.

牛客-Java专项练习

【注】short 128的二进制为0000 0000 1000 0000,强制转型byte,截取后8位,第一位为符号位,所以是-128

51.

牛客-Java专项练习

public class Test1 {

    public static void main(String[] args) {
        new Son().func1();
    }
}

public class Father {

    public Father() {
    }

    public void func1() {
        System.out.println("father func1");
        func2();
    }

    public void func2() {
        System.out.println("father func2");
    }
}

public class Son extends Father {

    public Son() {
    }

    @Override
    public void func2() {
        System.out.println("son func2");
    }
}

//father func1
//son func2

【注】如代码中所示,在main方法中是new Son().func1(),执行流程是:因为子类中没有func1方法,所以调用父类的func1方法 -> 因为子类override了父类的func2方法,所以调用子类的func2方法(因为最开始的入口是子类)

52.

牛客-Java专项练习

【注】.表示除\n之外的任意字符;*表示任意多个;+表示一个或多个;?表示0或一个;.*?表示非贪婪匹配,找到最小的就可以了;(?=Expression) 表死顺序环视;这道题的Expression是\\(,表示匹配括号

53.

牛客-Java专项练习牛客-Java专项练习

54.

牛客-Java专项练习

55.

牛客-Java专项练习

牛客-Java专项练习

【注】

2进制 -> 8进制

牛客-Java专项练习

2进制 -> 16进制

牛客-Java专项练习

8、10、16进制 -> 2进制(除2取余法)

牛客-Java专项练习

牛客-Java专项练习

牛客-Java专项练习

10进制 -> 8、16进制(除8、除16取余法)

牛客-Java专项练习

2、8、16进制 -> 10进制(按权展开法)

牛客-Java专项练习牛客-Java专项练习

56.

牛客-Java专项练习

【注】static从上到下按顺序执行

57.

牛客-Java专项练习

【注】str1在编译期就能够确定并存入了常量池,但是str2是在运行时才确定,如果str2="he" + "llo",那么这也是在编译期就能确定的

58.

牛客-Java专项练习

【注】extends Thread不要求override run方法,如果没有override,则会调用Thread的run方法,implements Runnable则要求override run方法

59.

牛客-Java专项练习

牛客-Java专项练习

牛客-Java专项练习

60.

牛客-Java专项练习

【注】0X是16进制,0是8进制

61.

牛客-Java专项练习

【注】管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系

62.

牛客-Java专项练习

63.

牛客-Java专项练习

【注】

y = (x++) + (++x);

等价于

int temp1 = x++;

int temp2 = ++x;

y = temp1 + temp2;

64.

牛客-Java专项练习

【注】

javac.exe是编译.java文件

java.exe是执行编译好的.class文件

javadoc.exe是生成Java说明文档

jdb.exe是Java调试器

javaprof.exe是剖析工具

65.

牛客-Java专项练习

【注】spring提供了javabean的配置,jdbc的集成,事物管理,异常配置等。也提供了aop框架,但是没有提供日志框架,需要利用aop结合log4j等日志框架

66.

牛客-Java专项练习

【注】

A、C选项方法名、形参与父类方法相同,表示override,但是要求子类的方法的访问修饰符权限要大于等于父类的方法,所以A选项错误;B、D选项虽然方法名与父类相同,但是形参不同,所以是子类的特有方法

牛客-Java专项练习

67.

牛客-Java专项练习牛客-Java专项练习

68.

牛客-Java专项练习

【注】

中间件是一种独立的系统软件或服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源。中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口,但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递。通过中间件,应用程序可以工作于多平台或OS环境。(简单来说,中间件并不能提高内核的效率,一般只是负责网络信息的分发处理)

69.

牛客-Java专项练习

【注】

A:CopyOnWriteArrayList适用于写少读多的并发场景

B:ReadWriteLock即为读写锁,他要求写与写之间互斥,读与写之间互斥,读与读之间可以并发执行。在读多写少的情况下可以提高效率

C:ConcurrentHashMap是同步的HashMap,读写都加锁

D:volatile只保证多线程操作的可见性,不保证原子性

70.

牛客-Java专项练习

【注】

A选项表示依赖关系,比如A类的方法中用B类做参数

B选项表示组合关系,比如A类的某个字段是B类

C选项表示继承关系,比如A类继承B类,就可以说A is a B