您的位置:首页 > 编程语言 > Java开发

Java编程思想_笔记(五)

2015-07-02 18:39 295 查看
随着计算机革命的发展,“不安全”的编程方式已逐渐成为编程代价高昂的主因之一。

用构造器确保初始化

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

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语句使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: