牛客-Java专项练习
本篇博客用于记录在牛客网做的Java专项练习中的错题或重要的题。
1.
【注】构造方法没有返回类型
2.
【注】finially块会在try块的return语句之前执行,并且如果在finially块中有return语句,那么该return就是最终的返回结果
3.
【注】8大基本类型与引用类型的默认值
4.
【注】匿名类写法
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