活力 JAVA 旅行三

原创 2005年03月02日 14:58:00

初始化和清理:

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

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还没到快要耗尽内存的底部,它是不会浪费时间来回收垃圾以恢复内存.

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

java反射,让代码充满活力(一)

在java编程的行当中,IT攻城狮们想必对反射这个字眼并不陌生,无论是我们想要在运行状态中获取任意一个类的所有属性或者方法,还是调用任意一个对象的方法和属性,甚至是修改它的某个属性和方法,我们都可以找...

旅行商问题-A*算法-java

算法java实现--分支限界法--旅行售货员问题

最大团问题的java实现(优先队列式分支限界法) 具体问题描述以及C/C++实现参见网址 http://blog.csdn.net/liufeng_king/article/details...

java旅行--第七站--Spring的注解

Spring的简单使用

java旅行第二站--JavaSE第七天--写读文件

IO流的写与读操作
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)