牛客网 错题 Day01
1.Java初始化顺序
/**
* @date 2020/9/1 14:47
*/
class Father {
public Father(){
System.out.println("父类构造方法");
}
{ System.out.println("父类的普通代码块"); }
static { System.out.println("父类的静态代码块"); }
}
public class Test03 extends Father {
public Test03() {
System.out.println("子类的构造方法");
}
{
System.out.println("子类的普通代码块");
}
static {
System.out.println("子类的静态代码块");
}
public static void main(String[] args) {
new Test03();
}
}
Java初始化的顺序是:
父类的静态代码块-子类的静态代码块-父类的普通代码块-父类的构造方法-子类的普通代码块-子类的构造方法。
也就是说初始化时,静态代码块>普通代码块>构造方法;父类>子类。
2. JDBC statement
JDBC执行查询语句
- Statement 用于通用查询
- PreparedStatement 用于执行参数化查询
- CallableStatement 用于存储过程
PreparedStatement 对象已预编译过,所以其执行速度要快于 Statement 对象。还可以阻止常见的SQL注入式攻击。
3. 多线程调用问题
如果多线程中直接调用run
方法那么会按照普通的线程按照顺序执行,只有调用start
方法才会真正实现多线程根据CPU的调度去实现。
多线程的yield()
礼让方法,只会礼让统级别的线程,不会礼让级别低的线程。
4. 多线程安全的Map
Hashtable,SynchronizedMap,ConcurrentHashMap
5. 关于Java运算顺序
题:设三个整型变量 x = 1 , y = 2 , z = 3,则表达式 y+=z--/++x 的值是
代码:
/**
* @date 2020/9/8 6:32
* 计算顺序
*/
public class Test04_OperationsOrder {
public static void main(String[] args) {
System.out.println(doOperation(1, 2, 3));
}
public static int doOperation(int x, int y,int z){
y += z -- / ++ x;
return y;
}
}
Java的整型会向下取整(z–/++x)= 1.5 = 1所以答案为3,但是运算时 z-- 等于 z 等于 3。原因是会先进行其它运算 --或者 ++ 会在前放代码运行之后再运行(赋值)。
如同这个代码:它确实是执行完毕了,但是是再println方法之后再执行的,所以第一次输出为0!
int i = 0;
System.out.println(i++);
System.out.println(i);
6. Java中的集合类型
7. java.util.Collection 和 java.util.Collections
collection是一个接口集合,提供了对集合对象进行基本操作的通用接口方法,意义是为各种具体的集合提供了最大化的统一操作,。
collections是一个包装类,包含多种集合操作的静态多态方法,不能实例化。
8. 异常
Java所以异常和错误的父类都是java.lang.Throwable
9. 垃圾回收机制
JVM一旦启动,就会创建一个守护线程来检测是否需要有对象内存被释放;System.gc()无法指定时间释放,只是提醒jvm可以进行Full GC 但是真正执行的时间是不知道。
10. split
调用这个方法会根据传递的分割条件返回一个数组,如果没有找到分隔符会默认返回一个长度为1的数组。