第五章 初始化和清理

原创 2013年12月06日 10:55:25

5.1 用构造器确保初始化

初始化和清理,是程序错误的源头。

构造函数 constructor 无返回值,跟类同名。

Dog d = new Dog(); new表达式返回了新对象的引用

5.2 方法重载

方法名相同,形参不同,构成不同的函数。

[1]   参数类型不同 f(inta) 与 f(double b)不同

[2]   参数不同类型顺序不同 f(int a,double b) f(doubleb,int a),但尽量不用

[3]  以返回值区分重载方法是不可行的

对于基本类型传参,f(int a)传double类型必须显示转换。如果反过来,会自动提升数据类型f(double b),可传入int short各种。char直接提升为int。

5.3 默认构造器

如果你的类没有写构造器,编译器会自动帮你创建一个默认的构造器 无参数的。

如果你定义了一个构造器,且有参数的。编译器不会再给你创建无参数的构造器。

5.4 this关键字

同一个类型对象a,b调用一个方法,如何知道是哪个调用的,this指针,在方法内部,表示“调用方法的那个对象”的引用。

只有当需要明确指出当前对象的引用时,才需要使用this关键字。

this 完成在构造器中调用构造器

FlowerThis(int petals,String s){

       this(petals);

       //! this(s);一个构造函数中不能调用两次

       this.s=s;//this的用法,形参和字段变量同名时

}

FlowerThis(){ 

this(5,"String");

}

static 方法,就是没有this的方法。static方法中不能调用非静态方法,反之可以。static类似于全局函数。

在使用static方法时,由于不存在this,所以不是通过“向对象发送消息”的方式来完成的。?

5.5 清理:终结清理和垃圾回收

垃圾回收器,只释放那些经由new分配的内存,其他的内存不会处理。

java允许在类中定义一个finalize()方法,原理,一旦垃圾回收器准备好释放对象占用的存储空间,将首先调用其finalize()方法,并在下一次垃圾回收动作发生时,才会真正回收对象占用内存。

垃圾回收本身也是有开销的。

finalize()真正用途:使用了创建对象之外的方式为对象分配了存储空间。使用本地方法(在java代码中调用非java代码的方式)的情况。

无论是垃圾回收,还是finalize都不保证一定会发生。要想进行除释放空间之外的清理工作,需要明确调用某个恰当的java方法。

finalize的另一个用途:终结条件验证。如果某个对象要被清理掉了,它该处于一个安全状态。

System.gc() 用于强制进行终结动作。但是finalize不总会被调用,例如书上的例子。

垃圾回收器如何工作,有待于进一步看。但垃圾回收器提高了对象的创建速度。

5.6 成员初始化

所有变量在使用之前要保证初始化,否则会报错。

但在类的数据成员,即字段,会默认初始化一个值,int=0,Dogd;引用获得值为null。

每次赋初值,保证了程序的正常运行,但牺牲了灵活性。

5.7构造器初始化

可以通过构造器初始化

初始化顺序:一个类中的字段,在创建对象时,先初始化字段的值,在调用构造函数,无论字段在构造函数之前还是之后定义。

静态数据初始化:无论创建多少个对象,静态数据都只占一份存储区域。static关键字不能应用于局部变量,因为它只能作用于域。

静态初始化只有在必要时刻才会进行。到第一个对象被创建或者第一次静态访问时,才会被初始化,之后不会被初始化第二次

初始化的顺序,先静态对象,然后是非静态对象。

显示的静态初始化:允许为静态变量,组成特殊的静态块。

public class Spoon{

       staticint ;

       static{  i=47; }

}

这段代码只执行一次(当首次生成这个类的一个对象时,或者首次访问属于那个类的静态数据成员时【即便从未生成过那个类的对象】。)

5.8 数组初始化

数组定义:

int[] a = {1,2,};//逗号可要可不要

int[] a = new int[10];

String[] s = new String[]{“a”,”b”}

int[] a1 =a; //赋值引用

Other[] os = new Other[10]; 对象数组定义

Arrays.toString(a),将数组转换成可打印版本,a的输出为: [1,2]

可变参数列表

static void printArgs(Object[] args){} 可以传入任意个数,但是必须要printArgs(newObject[]{1,….  });

static void f(int a,String... trailing){} ,可以不用显式的写数组语法,编译器会自动填充数组。f(1,“a”,“b”);

可变参数列表,在重载时容易出现问题,可以增加一个非可变参数来解决,或者重载时不要用可变参数。

5.9 枚举类型

public enum Money{//类似于一个类

              ONE,TWO,FIVE,TEN,TWENTY,FIFTY,HUNDRED

       }//里边用大写

Money m = Money.ONE; //定义数据类型

for(Money n : Money.values()){

           System.out.println(n+"  ordinal:"+n.ordinal());

}

staticvalues(),按照enum常量的声明顺序,产生由这些常量值构成的数组。

ordinal返回某个特定enum的声明顺序,从0开始。

enum与switch一起使用,较为方便。

 

垃圾回收器极大的简化了编程工作,而且处理内存也安全,但是确实增加了运行时的开销,java解释器也非常慢,所以到底这种开销造成何种影响很难断定。但随着时间发展,java性能在不断提升。

相关文章推荐

Java编程思想第五章个人总结初始化与清理

构造器确保初始化 构造方法 代参数不带参数的  区分重载方法   根据参数类型区分   如果传入的数据类型小于方法中生命的形式参数类型,实际的数据类型就会提升。 char 除外 如果无法恰好接受...

java编程思想 第五章初始化与清理

一、用构造器确保初始化 1、为什么要引入构造器(constructor)? ★      假设没有构造器,那么我们用户就要自己去完成初始化工作,但用户可能不知道如何初始化,甚至会忘记初始化 2、...

java-第五章 初始化与清理

初始化和清理正是设计安全的两个问题。比如C程序忘记初始化变量,当使用完一个元素时,它也很容易忘记清理。 C++引入构造器(constructor)的概念,这是一个创建对象时会被自动调用的特殊方法。Ja...

java编程思想-第五章-初始化与清理

第五章-初始化与清理5.5java的垃圾回收工作1)停止-复制:先找到“活”的对象,从堆栈和静态存储区开会i,遍历所有的引用,发现被引用的对象后在堆中标记。之后暂停程序的运行,将所有被标记的堆中对象复...

第五章 初始化与清理(上)

第五章 初始化与清理(上)         我已经看过第二、三、四章的内容,发现讲解的都是一些很基本的东西,所以这里就不做详细总结了,我还得继续看后面更重要的内容,并且尝试理解清楚,后面的东西非常...

第五章 初始化与清理

1、默认构造器

java编程思想读书笔记 第五章 初始化与清理

java编程思想第五章读书笔记

【Java】《Java编程思想》笔记-第五章 初始化与清理

5.1 用构造器确保初始化【initialize()】 构造器采用与类相同的名字 在Java中,初始化和创建捆绑在一起,不能分离 5.2 方法重载 为了让方法名相同而形式参...

《Java编程思想》第五章 初始化与清理

一、初始化1.1、构造器构造器分为默认构造器(无参构造器)和带参构造器。写的类中如果没有构造器,编译器会自动帮你创建一个默认构造器。1.2、static给变量和方法加上“static”关键词,表示该变...
  • DSLZTX
  • DSLZTX
  • 2016年01月24日 14:42
  • 581

《java编程思想》第五章:初始化和清理

随着计算机革命的发展,“不安全”的编程方式已逐渐成为编程代价高昂的主因之一。 而初始化和清理正是涉及安全的两个问题。用“构造器”确保初始化,由于构造器的名称与类名完全相同,所以“没个方法首写字母小写...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:第五章 初始化和清理
举报原因:
原因补充:

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