java基础笔记03

时间:2021-08-22 10:29:41

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分配内存。