1.题目讲解重写后子类调用父类的方法总结:当子类重写了父类方法A,父类方法直接调用被重写的父类方法后,调用的是子类的重写的父类方法A。
class Test {
public static void main(String[] args) {
System.out.println(new B().getValue());
}
static class A {
protected int value;
public A (int v) {
setValue(v);
}
public void setValue(int value) {
this.value= value;
}
public int getValue() {
try {
value ++;
return value;
} finally {
this.setValue(value);
System.out.println(value);
}
}
}
static class B extends A {
public B () {
super(5);
setValue(getValue()- 3);
}
public void setValue(int value) {
super.setValue(2 * value);
}
}
}
// 输出的结果是 22 34 17
2.Java一律采用Unicode编码方式,每个字符无论中文还是英文字符都占用2个字节。Java的char类型,通常以UTF-16 Big Endian的方式保存一个字符。实现国际化应用常用的手段是利用ResourceBundle类
3.HashMap允许存在一个键值为null。HashMap的存储顺序是根据Hash值存储的,故无序。
4.String类型不属于包装类
5.按位与、或、异或、取反知识点,以及题目讲解公式~n=-n-1
与:& 两个都为1才为1,一个为0就为0
或:| 一个为1才就为1,否则为0
异或:^ 不同就为1,相同则为0
取反:~ 0变1,1变0
题目
int i = 5;
int j = 10;
System.out.println(i + ~j); //~j=-11,故5-11等于-6。
6.局部内部类就像是方法里面的一个局部变量一样,是不能有public、protected、private以及static修饰符的。成员内部类该类像是外部类的一个成员,可以无条件的访问外部类的所有成员属性和成员方法(包括private成员和静态成员)。
7.题目讲解锁的机制
public class Test {
private synchronized void a() {
}
private void b() {
synchronized (this) {
}
}
private synchronized static void c() {
}
private void d() {
synchronized (Test.class) {
}
}
}
// 题目:上述a和b没有static关键字,锁住的是对象;c有static关键字,锁住的是类,和d一样。
8.outputStream输出流包含flush方法。
9.强引用(会一直存在于内存中)、软引用(当内存空间不足时,垃圾回收器会回收)、弱引用(不管内存空间是否充足,都要回收)、虚引用(相当于没有引用,任何时候都可以回收)。
10.题目讲解进制转换
以下哪个式子有可能在某个进制下成立()
A.13*14=204
B.12*34=568
C.14*14=140
D.1+1=3
//设为x进制,对于A选项由于 (1*x^1+3*x^0)(1*x^1+4*x^0)=2*x^2+4*x^0解出方程式x的值为8。则A选项可以被表示。
11.Spring提供了AOP,但是spring没有提供AOP的日志系统,日志系统需要自己进行实现。
12.static和final关键字可以一起使用。
13.局部变量在创建方法栈时被初始化。HashMap是链地址法解决哈希冲突,ThreadLocal是开放定址法解决哈希冲突。
14.Ant 没有生命周期,必须定义目标和目标之间的依赖。你必须手工为每个目标附上一个任务序列。
15.默认的整数数据类型是int,默认的浮点数据类型是double。
16.题目讲解c语言和java语言下的char
char chr = 127;
int sum = 200;
chr += 1;
sum += chr;
// c语言中的char类型是一个字节,故范围是-128-127。chr+1超出的了范围127对应的补码是01111111,+1后10000000,为-128,故sum+=chr为200-128等于72
// java语言中char类型是两个字节,127+1则为128,sum输出为328
17.PreparedStatement是CallableStatement的父接口
18.元数据区不属于新生代区
19.代码讲解replaceAll方法
String classFile = "com.jd.". replaceAll(".", "/") + "MyClass.class";
输出 ///MyClass.class,原因在于replaceAll(".", "/")中的'.'表示全部字母
20.final关键字定义的常量一定需要进行初始化,否则会报错。
21.讲解线程的生命周期函数
22.File类不能读写文件,读写文件是通过字符流和字节类
23.volatile关键字包含的特性为:有序性,可见性
24.Object.wait/notify/notifyAll,Condition.await/notify/notifyAll可以实现线程之间的通知和唤醒
25.javac-D 指定编译后类层次的根目录
26.题目讲解变量的正确定义
// 'a'在此刻相当于一个数值
'a' = 1/3
27.局部内部类相当于类的一个变量,不可以使用public/private/default关键字来进行修饰
28.native关键字表名修饰的方法是由其他非java语言进行编写的
29.若存在一个类名为Test,执行java Test one two three 命令是什么意思?java Test是执行命令,one two three 才是传入的字符串。
30.包装类和基本类型直接进行比较时,会自动进行装箱和拆箱(也就是相当于值比较)。
31.三元表达式会自动将类型进行转换,也就是会将精度进行提高。
Object o1 = (false)?new Double(1.0):new Double(2);
// 输出的o1为2.0
32.JVM分为三个区域,分别时永久代、年轻代、年老代。永久代时static或者final等常量,年轻代是new出来的对象。
33.栈(线程共享):存储类变量,类对象;方法区(线程共享):存储class文件和静态数据;堆:存储局部变量、基本类型变量、操作指令。
34.HashSet子类依靠toString()和equals()来判断是否存在重复元素。
35.HttpServletResponse不包含获取请求地址方法,请求地址方法仅存在于HttpServletRequest类中
36.对int和Integer进行补充:int和Integer(包含对象)进行比较时,会自动进行装箱和拆箱(==判断的为True)。但是范围仅在-128~127之间。
37.题目讲解static静态块
// 输出 P is init 123,原因在于以下三种情况将不会初始化子类
// 1. 调用的是父类的static方法或者字段
// 2. 调用的是父类的final方法或者字段
// 3. 通过数组来引用
public class P {
public static int abc = 123;
static{
System.out.println("P is init");
}
}
public class S extends P {
static{
System.out.println("S is init");
}
}
public class Test {
public static void main(String[] args) {
System.out.println(S.abc);
}
}
38.当类对象为空时,也可以调用类中的静态方法
39.对象序列化中,可以使对象进行传输的仅为ObjectOutputStream和ObjectInputStream流。
40.事务的传播性(可以根据后缀来参考)
1.required:必须的,没有事务就新建事务
2.support:支持的,没有事务,就用非事务
3.mandatory:强制的,必须要有事务,否则报错
4.required_new:必须要新建事务,老事务将会被挂起重新创建新事物