1.代码输出的结果是
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);
}
}
结果:
P is init
123
原因:在继承时子类不会初始化的情况
1.调用的是父类的static字段或者方法
2.调用的是父类的final字段或者方法
3.通过数组来引用
本题:通过掉用父类的static字段abc自然不会初始化子类

2.synchronized保证三大性,原子性,有序性,可见性,volatile保证有序性,可见性,不能保证原子性
线程通过使用synchronized关键字可获得对象的互斥锁定 

synchronized:可见性和原子性都可以保证 、volatile:不能保证原子性
线程调度的两种方式:抢占式线程调度和协同式线程调度:java采用的是抢占式线程调度
抢占式线程调度每个线程执行的时间可能不用 一个线程产生阻塞不会对其他的线程造成影响;协同式线程调度:各个线程互相配合 例如接力赛一样一个线程执行完毕下一个线程再执行 因此一个线程阻塞会对其他线程产生影响。

3、object类的方法:
equals:对比字符串是否相等
toString:把对象转化为字符串
wait:线程等待
HashCode:返回对象的Hash码值
notify:唤醒等待的单个
notifyAll:唤醒等待的多个线程
getclass:获取对象的类名
finalize:释放资源
clone:克隆对象