
由于两个线程并发执行,所以操作时可以覆盖的,比如一个线程的a+1可能会覆盖掉另一个线程的a-2;


跨平台特性是指字节码文件可以在多个平台运行,而不是源代码


++k, 是先运算,后赋值,里面说的赋值,就是给(++k)赋值,先运算后赋值,就是先++,然后将++后的值赋值给(++k) , 里面的k值无论如何都是要增加的(k++也一样,里面的k值无论如何都是要增加的)
k++,是先赋值,后运算,里面说的赋值,也是给(k++)赋值,先赋值,后运算,就是先将k的值赋值给(k++),然后在++


classes -- xxx.class
lib -- XXX.jar




方法名一定相同,参数一定不同
至于修饰符,返回值,抛出异常的类型等其他的,没有任何要求


1,先执行基类的静态变量初始化和静态代码块
2,执行子类的静态变量初始化和静态代码块
3,执行基类的普通变量初始化和普通代码块,然后这个时候执行到了子类中的构造函数中的第一行,如果没有显示的使用super()来调用基类中的构造函数,那么就隐式的调用基类中的无参构造函数,且无论是否显示的指定构造函数,都必须要放在子类构造函数中的第一行,即:执行普通变量和普通代码块, 然后根据子类构造器的情况来调用超类的构造函数
4, 执行子类的普通变量初始化和普通代码块,然后执行子类构造函数中的剩余部分
对应到本题中的过程:
先执行C c = new C();
执行super("B"),也就是A(String s){ System.out.println(s));
执行Test(){ super("B");System.out.println("B");}中的System.out.println("B")

Statement是最基本的方式,采用字符串拼接的方式,存在SQL注入漏洞
PreparedStatement是调用数据库的与编译功能,对SQL语句进行预编译,效率高,防止SQL注入
CallableStatement扩展了PreparedStatement,调用了数据库的存储过程
BatchedStatement,不是标准的Statement类

表对应类,标的字段对应类的属性,记录对象对象
不存在表之间的参考关系对应类之间的参考关系

A选项中的
public void main(String [] args);
如果是public static void main(String[] args); 就不正确了,因为接口中的static方法必须有方法体
static方法必须有方法体的原因:static方法子类不能重写,所以接口中的方法如果没有方法体的化,是矛盾的
public static void main(String[] args);也就是一个普通的方法




如果finally中没有return语句的话,在finally中,会将b变为30,但是还是会返回20,原因为:
在执行完try中的b += 10之后, b变为20,此时try中的return会将20压入栈中,但是不返回,去执行finally中的语句,finally中的语句将b增加了10,但是并没有改变栈中的b的值,执行完finally之后,b变为30,但是栈中的b的值仍然为20,然后执行return,将b返回



关于设计模式,没有弄太明白

1,单一职责原则:一个类只做一件事,只有一个引起它的变化
2,开放封闭原则:对扩展开放,对修改封闭
3,里氏替换原则:子类必须能够替换其基类
4,依赖倒置原则:高层模块不依赖底层模块,都依赖于抽象
5,接口隔离原则:使用多个小的专门的接口,而不使用一个大的接口

java.lang.OutOfMemoryError:nativeGetNewTLA这个异常不是只有在JRockit虚拟机的时候才会碰到

加强了封装:B是A的内部类,那么即使对于A的private属性,B也可以访问,B本身也可以隐藏于外部
更具有可读性: 让代码更靠近使用的地方
关于内部类,静态内部类等,还没有搞清楚

非静态方法属于对象的成员,而不是类的成员