Java编程思想_笔记(五)

随着计算机革命的发展,“不安全”的编程方式已逐渐成为编程代价高昂的主因之一。

 用构造器确保初始化

构造器是一种特殊类型的方法,因为它没有返回值。方法本身不会自动返回什么,但可以选择让它返回别的东西。

this关键字:

this关键字只能在方法内部使用,表示对“调用方法的那个对象”的引用。如果在方法内部调用同一个类的另一个方法,就不必使用this,直接调用就可以了。只有明确指出对当前对象的引用时,才需要使用this关键字。例如:当需要返回当前对象的引用时:

public class leaf{

   int i = 0;

   leaf increment(){

        i++;

        return this;

      }

void print(){

System.out.println("i = "+i);

       }

public static void main(String[] args){

     leaf x = new leaf();

      x.increment().increment().increment().print();

      }

}

除构造器之外,编译器禁止其他任何方法调用构造器,只能是构造器调用构造器

static关键字:

static(静态)方法中没有this关键字的方法,在static方法的内部除非使用引用否则不能调用非静态方法;如果你传递一个对象的引用到静态方法里(静态方法可以创建其自身的对象),然后通过这个引用(和this效果相同),你就可以调用非静态方法和访问非静态数据成员了。

清理:

finalize()方法:工作原理:一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize()方法,并且在下一次垃圾回收动作发生时,才会真正回收对象占用的内存。finalize并非析构函数。

Java对象并非总是被回收。1、对象可能不被垃圾回收。2、垃圾回收并不等于“析构”。3、垃圾回收只与内存有关。

无论是“垃圾回收”还是“终结”,都不保证一定会发生。

finalize()可能使用的方式:

class Book{

  boolean checkedOut = false;

  Book(boolean checkOut){

    checkedOut = checkOut;

  }

  void checkIn(){

     checkedOut  = false;

  }

  protected void finalize(){

    if(checkedOut)

      System.out.println("Error:checked out");

  }

}

public class TerminationCondition{

  public static void main(String[] args){

    Book novel = new Book(true);

    novel.checkIn();

    new Book(true);

    System.gc();

  }

}

本例中的终结条件是:所有的Book对象在被当作垃圾回收前都应该被签入(check in),System.gs()用于强制进行终结动作。

垃圾回收:

引用计数:一种简单但速度很慢的垃圾回收技术。每个对象都含有一个引用计数器,当有引用连接至对象时,引用计数加1,当引用离开作用域或被置为null时,引用计数减1.当发现某个对象的引用计数为0时,就释放其占用的空间。

停止-复制(stop-and-copy):先暂停程序的运行,然后将所有存活的对象从当前堆中复制到另外一个堆中,没有被复制的全部是垃圾。缺点:首先有两个堆,在两个堆之间进行执行;当程序稳定状态是,复制式回收期仍然将所有内存自一处复制另一处。

标记-清扫(mark-and-sweep):遍历所有存活对象,并在标记完成所有对象后执行清理动作。

自适应技术:自适应的、分代的、停止-复制、标记-清扫。

枚举类型:

枚举类型的关键字为enum,创建enum时编译器会自动添加一些有用的特性:toString()方法,以便可以很方便的显示某个enum实例的名字;ordinal()方法,用来表示某个特定enum常量的声明顺序;static values()方法,用来按照enum常量的声明顺序,产生由这些常量构成的数组。

enum关键字经常和switch语句使用。

你可能感兴趣的:(Java编程思想)