1.
【注】构造方法没有返回类型
2.
【注】finially块会在try块的return语句之前执行,并且如果在finially块中有return语句,那么该return就是最终的返回结果
3.
【注】8大基本类型与引用类型的默认值
4.
【注】匿名类写法
5.
6.
【注】使用java命令运行class文件的时候class文件不需要加后缀
7.
【注】这里调用的是run方法,不是start方法
8.
【注】
A:ConcurrentHashMap使用锁分段技术,首先将数据分成一段一段地存储,然后给每一段数据配一把锁,当一个线程占用锁访问其中一个段数据的时候,其他段的数据也能被其他线程访问。
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.
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.
105.
【注】使用ObjectOutputStream和ObjectInputStream可以将对象进行传输。
106.
107.
108.
109.
110.
111.
【注】接口不能实现接口。
112.
【注】<<=左移赋值,>>>= 右移赋值,左边空出的位以0填充
113.
【注】-n=~n+1
114.
【注】
public class TestInnerClass {
private int val1 = 11;
private static int val2 = 22;
public void func1() {
int a = 10;
class LocalInnerClass { //局部内部类 //不能被访问控制符和static修饰
public void func() {
//a++; //Variable 'a' is accessed from within inner class, needs to be final or effectively final
System.out.println(a);
}
}
}
public static void func2() {
new Thread(new Runnable() { //匿名内部类 //无构造方法(名字都没有哪来的构造方法)
@Override
public void run() { }
}).start();
}
class MemberInnerClass { //成员内部类
public void func() {
System.out.println(val1 + " " + val2); //可以访问外部类所有资源
func1();
func2();
}
}
static class StaticInnerClass { //静态内部类
static int cc = 33; //只有静态内部类中可以使用static修饰
public void func() {
//System.out.println(val1); //不可以访问外部类非静态资源
System.out.println(val2); //可以访问外部类静态资源
func2();
}
}
}