JAVA笔记【20131206】

对象构造

一、重载

类中方法名相同,参数不同即重载。返回类型可以不同也可以相同。Java中允许重载任何方法。

二、初始化

默认初始化:

        在一个类的构造器里,如果没有显式的给域赋予初值,就会自动的被赋予默认值。

        数值:0 布尔值:false 对象:null

构造器初始化:

        如果在编写一个类时没有编写构造器,则系统会提供一个默认的构造器,采用默认值对实例域进行初始化。

        但如果类中提供了构造器,再使用默认的构造器就会编译错误。

public Employee(String name , float salary)
{
	this.name=name;
	this.salary=salary;
}

       当然一个构造器也可以调用同一个类的另外一个构造器,这样对于构造器公用部分只需要编写一次即可。


public Employee(float salary)
{
	this.("Employee"+nextId,salary); //此处就会调用上面的public Employee(String name , float salary)构造器
	nextId++;
}


显式域初始化:

        所谓显式域初始化,即在类定义的时候为每个域赋予一个初始的值。这样在构造器被执行之前会先执行实例域的赋值。

public class Employee
{
	private String name = "";
	private float salary = 0 ;
	
	public Employee()
	{
	}
}

         当然初始化值也不一定非得是常量,也可以通过调用方法来进行初始化。

public class Employee
{
	static int getId()
	{
		int r = nextId;
		nextId++;
		return r
	}
	private int id = getId();
	
	private static int nextId = 1 ;
}

初始化块:

        所谓初始化块,也即在类的声明中包含代码块,在类构造对象的时候,这些代码块就会被执行。

public class Employee
{
	private int id ;
	
	{ //实例域初始化块
		id = nextId;
		nextId++;
	}
}

       静态域初始化块,在块标示static即可

static
{
	Random generator = new Random();
	nextId = generator.nextInt(10000);
}

       静态域初始化可以编写没有main方法的的程序:

public class Test18
{
	static     //静态域初始化块
	{
		System.out.println("No Main");	
		System.exit(0);  //避免抛出的异常
	}
}

三、析构器与finalize方法

Java有自动的垃圾回收器,不需要人工回收内存,所以Java不支持析构器。

但对于其它资源,可以通过为类提供finalize方法处理。finalize方法在一个类被垃圾回收器回收之前被调用。

但由于垃圾回收器是自动回收的,所以不知道finalize方法的执行时间是未知的,对于短缺的资源不建议使用finalize方法。

public class Test19
{
	public static void main(String[] args)
	{
		Test19 test = new Test19();
		test = null;   //对象test已经没有意义了
		System.gc();   //手动调用垃圾回收器,虽然手动调用了,但也不能保证垃圾回收器会立即回收。
	}
	
	public void finalize()
	{
		System.out.println("被垃圾回收器回收了...");
	}
}

从运行结果可以看出,虽然System.gc()被调用了,但也不会立即垃圾回收。当垃圾回收的时候finalize方法被执行



一些资源在使用完毕后需要立刻关闭释放的,需要人工管理。一般会提供类似dispose或者close方法来做相应的清理工作,如果一个类提供了这样的方法,则在对象不用的时候一定要调用该方法。


四、包

包的导入:

直接导入包可以避免在每个类名之前需要写完整路径。

import java.util.* ;

当发生命名冲突时,例如java.util.*和java.sql.*中都包含Date类,这时候就需要指定使用的是哪个Date,如下就指定了java.util.Date

import java.util.*;

import java.sql.*;

import java.util.Date;

如果两个Date类型都需要的话,那只能在每个类声明上加上完整路径。

静态导入:

导入静态方法和静态域(不常用)

import static java.lang.System.*;

导入后就可以直接

out.println("-------");

exit(0);


五、类设计技巧(Java2核心技术)

1、一定将数据设为私有

2、一定要对数据初始化

3、不要在类中使用过多的基本数据类型

4、不是所有的域都需要独立的域访问器和域更改器

5、使用标准格式进行类的定义

6、将职责过多的类进行拆分

7、类名和方法名要体现它们的职责




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值