活力 JAVA 旅行三

初始化和清理:

创建对象不但要分配内存而且还要调用构造函数.构造函数的参数是一种能让你对象的初始化提供参数的方法.

this

通常情况下表示"当前对象"或者"这个对象".只能用于方法内部,负责返回调用这个方法的对象的引用.

 public class Flower {
    int petalCount = 0;
  String s = new String("null");
  Flower(int petals) {
    petalCount = petals;
    System.out.println(
      "Constructor w/ int arg only, petalCount= "
      + petalCount);
  }
  Flower(String ss) {
    System.out.println(
      "Constructor w/ String arg only, s=" + ss);
    s = ss;
  }
  Flower(String s, int petals) {
    this(petals);
    this.s = s;

    System.out.println("String & int args");
  }
  Flower() {
    this("hi", 47);
    System.out.println("default constructor (no args)");
  }
  void print() {
    System.out.println(
      "petalCount = " + petalCount + " s = "+ s);
  }
  public static void main(String[] args) {
    Flower x = new Flower();
    x.print();

  }
}

初始化的顺序是由各变量在类的定义里面的顺序所决定的.变量的定义可能会分散在类定义的各个地方,并且与方法的定义相互交错,但变量的初始化会先于任何方法,甚至是构造函数.

静态数据的初始化:

 class Bowl {
  Bowl(int marker) {
    System.out.println("Bowl(" + marker + ")");
  }
  void f(int marker) {
    System.out.println("f(" + marker + ")");
  }
}

class Table {
  static Bowl b1 = new Bowl(1);

  Table() {
    System.out.println("Table()");
    b2.f(1);
  }
  void f2(int marker) {
    System.out.println("f2(" + marker + ")");
  }
  static Bowl b2 = new Bowl(2);
}

class Cupboard {
  Bowl b3 = new Bowl(3);
  static Bowl b4 = new Bowl(4);
  Cupboard() {
    System.out.println("Cupboard()");
    b4.f(2);
  }
  void f3(int marker) {
    System.out.println("f3(" + marker + ")");
  }
  static Bowl b5 = new Bowl(5);
}

public class StaticInitialization {
  static Test monitor = new Test();

   static Table t2 = new Table();
   static Cupboard t3 = new Cupboard();
   public static void main(String[] args) {
    System.out.println("Creating new Cupboard() in main");
    new Cupboard();

    System.out.println("Creating new Cupboard() in main");
    new Cupboard();
    t2.f2(1);
    t3.f3(1);
    monitor.expect(new String[] {
      "Bowl(1)",
      "Bowl(2)",
      "Table()",
      "f(1)",
      "Bowl(4)",
      "Bowl(5)",
      "Bowl(3)",
      "Cupboard()",
      "f(2)",
      "Creating new Cupboard() in main",
      "Bowl(3)",
      "Cupboard()",
      "f(2)",
      "Creating new Cupboard() in main",
      "Bowl(3)",
      "Cupboard()",
      "f(2)",
      "f2(1)",
      "f3(1)"
    });
  }
}

static成员只会在需要的时候进行初始化.如果static成员尚未初始化的化,初始化会先处理其static成员,再处理非static的对象.

清理:finalization和垃圾回收

JAVA中的垃圾回收只知道释放new出来的内存.

JAVA中:1.对象不一定会被垃圾回收器回收2.垃圾回收不是析构3.垃圾回收只与内存有关.

只要JVM还没到快要耗尽内存的底部,它是不会浪费时间来回收垃圾以恢复内存.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值