牛客-Java专项练习f

版权声明:YETA https://blog.csdn.net/qq_28958301/article/details/89088371

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

1. 

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

2. 

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

3. 

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

4. 

扫描二维码关注公众号,回复: 5975324 查看本文章

【注】匿名类写法

5. 

6. 

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

7. 

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

8. 

【注】

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

B:

C:返回的是一个内部类ArrayList

9. 

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

10. 

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

11. 

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

12.

13.

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

14.

15. 

16.

17.

18.

19.

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

20.

【注】整数/整数=整数

21.

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

22.

【注】这应该是Error的描述

23.

24.

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

25.

26.

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

27.

28.

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

29.

【注】static类不能implements

30.

31.

32.

33.

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

34. 

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

35.

【注】只是不推荐,但是编译能通过

36.

37.

38. 

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

39.

40.

41.

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

42.

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

43.

44.

【注】

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

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

45.

46.

【注】B选项

47.

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

48.

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

49.

【注】

50.

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

51.

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.

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

53.

54.

55.

【注】

2进制 -> 8进制

2进制 -> 16进制

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

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

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

56.

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

57.

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

58.

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

59.

60.

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

61.

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

62.

63.

【注】

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

等价于

int temp1 = x++;

int temp2 = ++x;

y = temp1 + temp2;

64.

【注】

javac.exe是编译.java文件

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

javadoc.exe是生成Java说明文档

jdb.exe是Java调试器

javaprof.exe是剖析工具

65.

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

66.

【注】

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

67.

68.

【注】

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

69.

【注】

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

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

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

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

70.

【注】

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

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

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

71.

72.

73.

74.

【注】接口中的方法默认是public abstract,实现该接口的子类中的实现的方法的访问控制符只能是public

75.

76.

77.

【注】

public class Test1 extends Test2 {
    static {
        System.out.println("Test1 static");
    }

    {
        System.out.println("Test1");
    }

    public Test1() {
        System.out.println("Test1 constructor");
    }

    public static void main(String[] args) {
        new Test1();
    }
}

class Test2 {
    static Test3 test3 = new Test3();

    static {
        System.out.println("Test2 static");
    }

    public Test2() {
        System.out.println("Test2 constructor");
    }

    {
        System.out.println("Test2");
    }
}

class Test3 {
    public Test3() {
        System.out.println("Test3 constructor");
    }
}

//Test3 constructor
//Test2 static
//Test1 static
//Test2
//Test2 constructor
//Test1
//Test1 constructor

初始化过程:按顺序执行父类的static变量和static块 -> 按顺序执行子类的static变量和static块 -> 按顺序执行父类的普通变量和普通块 -> 父类的构造方法 -> 按顺序执行子类的普通变量和普通块 -> 子类的构造方法

78.

79.

【注】equals()比较相同对象,不相同对象直接返回false

80.

【注】application对象只有一个

81.

82.

【注】

-Xmx:最大堆大小

-Xms:初始堆大小

-Xmn:年轻代大小

-XXSurvivorRatio:年轻代中Eden区与Survivor区的大小比值,注意Survivor区有2个,所以3x+x+x=5120,x=1024,2个就是2048

83.

【注】

public Method[] getDeclaredMethods()返回类或接口声明的所有方法,包括public, protected, default (package) 访问和private方法的Method对象,但不包括继承的方法。当然也不包括它所实现接口的方法。

public Method[] getMethods()返回类的所有public方法,包括其继承类的公用方法,当然也包括它所实现接口的方法。

84.

85.

【注】父类的构造方法本身就不能被子类继承,所以final没有意义,构造方法的目的是创建一个新的对象,所以static没有意义,另外不支持synchronized和native的构造方法。

86.

【注】将second方法中的v改名,就很清除了,这只是个引用,下面的v=val;这是改变了这个引用指向另一个对象,并不能改变原指向的对象的内容。

87.

【注】System.arraycopy是native方法,所以效率高。

88.

【注】当前静态类型是Base,实际类型是Son,Base中没有methodB方法,所以编译不通过。

89.

【注】匿名类没有名字,但是构造方法要求与类名相同。

90.

91.

92.

93.

【注】如果子目录中有父目录中相同的类,会造成困扰。

94.

【注】一个Unicode字符占2个字节。

95.

96.

【注】创建Servlet实例由容器完成,且在init()方法之前。

97.

【注】最终类就是final类,不能被继承。

98.

99.

【注】字符串常量池一个,堆中一个,如果字符串常量池中已存在,才只创建一个。

100.

【注】defult不能修饰变量。

101.

【注】

102.

【注】数组初始化没有指定值则全部为0。

103.

104.

猜你喜欢

转载自blog.csdn.net/qq_28958301/article/details/89088371