1、static binding与dynamic binding:在编译时确定的对象类型为静态绑定;在运行时确定的对象类型为动态绑定。
静态绑定指发生在编译时,动态绑定发生运行时。使用private或static或final修饰的变量、方法都使用静态绑定。静态绑定使用类的信息来完成,动态绑定使用对象的信息完成。重载(Overload)方法是静态绑定,重写(Override)的方法是动态绑定。
(1)动态绑定:
<span style="font-size:14px;">class Animal { void eat() { System.out.println("Animal is eating"); } } class Dog extends Animal { void eat() { System.out.println("Dog is eating"); } } public static void main(String args[]) { Animal a=new Animal(); a.eat(); }</span>
(2)静态态绑定:
<span style="font-size:14px;">public static void callEat(Animal animal) { System.out.println("Animal is eating"); } public static void callEat(Dog dog) { System.out.println("Dog is eating"); }</span>用static修饰的方法是静态绑定,即使在main方法中,a的类型是Dog,但是callEat(a)方法最终输出的是Animal的方法,因为在编译时,编译器只知道a是Animal类型。
<span style="font-size:14px;">public static void main(String args[]) { Animal a = new Dog(); callEat(a); }</span>
2、String是不可变类(immutable)。不可变类判断条件:不可变类的实例在整个生命周期中永远保持初始化的状态。
(1)String pool:当一个String实例创建时,如果这个String已经存在于String pool,创建String时将返回现有的String引用而不是创建一个新的对象再返回其引用。
String string1 = "abcd"; String string2 = "abcd";string1与string2引用自同一个string对象:“abcd”。
(2)Immutable对象是天然的线程安全。
3、缺省修饰符(default):default修饰的变量、方法、构造方法能被同一个包里的所有类使用。
4、static block:用于初始化静态数据成员,在加载类时,先与main方法被执行。
5、garbage collection不能保证程序内存
6、marker interface:没有任何方法和属性的接口,仅仅用于标记实现它的类为某一特定类型。java.io.Serializable即标志接口。
public class Employee implements java.io.Serializable { public String name; public String address; public transient int SSN; public int number; public void mailCheck() { System.out.println("Mailing a check to " + name + " " + address); } }7、JITcompiler:
8、局部变量没有缺省值。
9、封装:Enacapsulation is the technique of making the fields in a class private and providing access to the fields via public methods.
10、变量在Stack分配内存,对象在Heap分配内存。