Java学习笔记【对象构造】
2015-09-24 16:53
603 查看
1、重载
通过参数类型与特定方法调用所使用的值类型进行匹配,挑选相应的方法。
2、默认域初始化
如果在构造器中没有显式地给域赋予初值,那么就会被自动地赋为默认值:
其中数值为0 、布尔值为false、 对象引用为null。
3、无参数构造器
例如,以下是Employee类的无参数构造函数:
若写一个类时,未写构造器,那么系统提供一个无参数构造器。这个构造器将所有的实例域设置为默认值,即:数值为0 、布尔值为false、 对象引用为null。
若类中至少一个构造器,但是没有提供无参数构造器,则在构造时不加参数将被视为不合法。
4、显式域初始化
可以在类定义中,直接将一个值赋给任何域。例如:
初始值不一定是常量,可以调用方法对初始值进行初始化。每个Employee类中的雇员都有个id域,可以这样初始化:
5、参数名
常用参数名设置技巧:
6、调用另一个构造器
关键字this引用方法的隐式参数。
如果构造器的第一个语句形如this(...),这个构造器将调用同一个类的另一个构造器。典型实例:
可运行程序完整示例:
7、初始化块
无论使用哪个构造器构造对象,块1总被执行,且执行顺序:先运行初始化块1,然后再运行构造器主体部分。
8、对象析构与finalize方法
Java有自动的垃圾回收器,不需要人工回收内存,所以Java不支持析构器。
可以为任何一个类添加finalize方法。finalize方法将在垃圾回收器清除对象之前调用。
实际应用中,不要依赖于使用finalize方法回收任何短缺的资源,这是因为很难知道这个方法什么时候才能调用。
某个资源需要在使用完毕后立刻被关闭,那么就需要人工来管理。对象用完时,可以应用一个close方法来完成相应的清理操作。
1、重载
通过参数类型与特定方法调用所使用的值类型进行匹配,挑选相应的方法。
2、默认域初始化
如果在构造器中没有显式地给域赋予初值,那么就会被自动地赋为默认值:
其中数值为0 、布尔值为false、 对象引用为null。
3、无参数构造器
例如,以下是Employee类的无参数构造函数:
public Employee() { name = ""; salary = 0; hireDay = new Date(); }
若写一个类时,未写构造器,那么系统提供一个无参数构造器。这个构造器将所有的实例域设置为默认值,即:数值为0 、布尔值为false、 对象引用为null。
若类中至少一个构造器,但是没有提供无参数构造器,则在构造时不加参数将被视为不合法。
4、显式域初始化
可以在类定义中,直接将一个值赋给任何域。例如:
class Employee { private String name = ""; ... }
初始值不一定是常量,可以调用方法对初始值进行初始化。每个Employee类中的雇员都有个id域,可以这样初始化:
class Employee { private static int nextId; private int id = assignId(); ... private static int assignId() { int r = nextId; nextId++; return r; } ... }
5、参数名
常用参数名设置技巧:
public Employee(String name, double salary) { this.name = name; this.salary = salary; }
6、调用另一个构造器
关键字this引用方法的隐式参数。
如果构造器的第一个语句形如this(...),这个构造器将调用同一个类的另一个构造器。典型实例:
public Employee(double s) { this("Employee #" + nextId, s); nextId++; }调用new Employee(60000)时,Employee(double)构造器将调用Employee(String, double)构造器。
可运行程序完整示例:
public class Employee { public static int nextId = 1; private String id = ""; private double salary = 0; public static void main(String[] args) { Employee CEO = new Employee(600000); System.out.print("员工编号:" + CEO.id + " "); System.out.println("薪资:" + CEO.salary); Employee CTO = new Employee(500000); System.out.print("员工编号:" + CTO.id + " "); System.out.println("薪资:" + CTO.salary); Employee SE = new Employee(3000); System.out.print("员工编号:" + SE.id + " "); System.out.println("薪资:" + SE.salary); } public Employee(double s) { this("ZTE000000"+ nextId, s); //调用Employee(String str, double s) nextId++; } public Employee(String str, double s) { this.id = str; this.salary = s; } }
运行结果: 员工编号:ZTE0000001 薪资:600000.0 员工编号:ZTE0000002 薪资:500000.0 员工编号:ZTE0000003 薪资:3000.0
7、初始化块
代码实例: class Employee { private static in nextId; private int id; //块1 { id = nextId; nextId ++; } //构造器1 public Employ(String ss){} //构造器2 public Employee(int ttt){} ... }
无论使用哪个构造器构造对象,块1总被执行,且执行顺序:先运行初始化块1,然后再运行构造器主体部分。
8、对象析构与finalize方法
Java有自动的垃圾回收器,不需要人工回收内存,所以Java不支持析构器。
可以为任何一个类添加finalize方法。finalize方法将在垃圾回收器清除对象之前调用。
实际应用中,不要依赖于使用finalize方法回收任何短缺的资源,这是因为很难知道这个方法什么时候才能调用。
某个资源需要在使用完毕后立刻被关闭,那么就需要人工来管理。对象用完时,可以应用一个close方法来完成相应的清理操作。
相关文章推荐
- Java 枚举(menu)的用法
- Java中如何克隆集合——ArrayList和HashSet深拷贝
- Java中如何克隆集合——ArrayList和HashSet深拷贝
- Java基础知识强化63:Arrays工具类之方法源码解析
- Java Web - 日志-log4j(二)--配置文件说明
- java:axis2环境下获取方法参数名的另一种方法
- 探秘Java虚拟机 gc的监控
- java 之 继承
- java 多线程全部执行完后再继续进行后门的方法
- Java Web - 日志-log4j(一)--写到控制台、写到log文件
- Spring压缩包目录说明
- Java GC 日志详解(一图读懂)
- spring声明式事务处理(hibernate)
- java构造器
- Java synchronized 介绍
- J2ee开发环境搭建之(五)eclipse集成MySQL
- 默认情况下,struts2是无法处理以.do为后缀的请求url的
- Java类加载器
- Java基础知识强化62:Arrays工具类之概述和使用
- Java追加文件内容的三种方法