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

《Java核心技术》复习笔记 - 第四章 对象与类

2014-03-03 20:18 253 查看
《Java核心技术》复习笔记 - 第四章 对象与类1. 基本概念:类,数据域,方法,封装,对象2. 类之间的关系:依赖(uses-a),聚合(has-a),继承(is-a)。一个类的方法操纵另一个类的对象,我们就说一个类依赖于另一个类。3. 注意区别对象和对象变量,对象是存储在堆上的,对象变量在栈上分配空间,存储的是堆上对象的地址,对象变量就是对象引用,类似C++中的指针变量(指向对象的指针)。4. 构造器:构造器与类同名,每个类可以有一个以上的构造器,构造器可以有0个,1个或1个以上的参数,构造器没有返回值,构造器总是伴随着new操作一起调用。5. 不要编写返回引用可变对象的访问器方法,如返回一个员工的入职日期hireDate,不能直接返回数据域,这样会被外部非法修改。如果需要返回一个可变对象的引用,应该首先对它进行克隆clone。6. 基于类的访问权限:一个方法可以访问所属类的所有对象的私有数据,C++也有同样的原则。7. 类似C++中的const成员变量,可以将实例域定义为final,构建对象时必须初始化这样的域。final一般用于修饰基本数据类型域或不可变类(如果一个类中的所有方法都不改变其对象,这种类就是不可变类)的域。final修饰引用变量时,是说该引用变量初始化后不能指向其它对象,类似C++中的常指针,而其引用的对象还是可以被修改的。8. 静态域又称类域,每个类只有一个这样的域。静态常量 static final也和C++类似。静态方法就是没有this参数的方法。9. Java中的参数传递总是采用值调用。对象引用进行的也是值传递,传递的是对象的地址。引用类似C++中的对象指针,但是不需要进行解引用操作。10. 类似C++,java中的方法也是可以重载overloading的,返回类型不是方法签名的一部分。11. 默认域初始化:如果在构造器中没有显示的给域赋予初值,那么会被默认的赋值为默认值:数值为0,布尔值为false,对象引用为null。12. 默认构造器:没有参数的构造器。如果编写类时,没有提供构造器,编译器会提供一个默认构造器将所有实例域设置为默认值。13. 显示的进行域初始化:如private String name = “”;在执行构造器之前,先执行该赋值操作。当一个类的所有构造器都希望相同的值赋予某个特定的实例域时,这种方式特别有用。14. 在一个构造器中调用(第一行语句)另一个构造器用this(),这样公共的构造器代码部分只需要编写一次即可,而在C++中,必须将抽取出的公共初始化代码编写成一个独立的方法。15. 初始化块是用{}包围的初始化语句,在构造器主体代码之前运行。16. 调用构造器的具体处理步骤:1) 所有数据域被初始化为默认值(0,false或null)。2) 按照在类声明中的出现次序,依次执行所有域初始化语句和初始化块。3) 如果构造器第一行调用了第二个构造器,则执行第二个构造器主体。4) 执行这个构造器的主体。[code]import java.util.*;

/**
* This program demonstrates object construction.
* @version 1.01 2004-02-19
* @author Cay Horstmann
*/
public class ConstructorTest
{
public static void main(String[] args)
{
// fill the staff array with three Employee objects
Employee[] staff = new Employee[3];

staff[0] = new Employee("Harry", 40000);
staff[1] = new Employee(60000);
staff[2] = new Employee();

// print out information about all Employee objects
for (Employee e : staff)
System.out.println("name=" + e.getName() + ",id=" + e.getId() + ",salary="
+ e.getSalary());
}
}

class Employee
{
// three overloaded constructors
public Employee(String n, double s)
{
name = n;
salary = s;
}

public Employee(double s)
{
// calls the Employee(String, double) constructor
this("Employee #" + nextId, s);
}

// the default constructor
public Employee()
{
// name initialized to ""--see below
// salary not explicitly set--initialized to 0
// id initialized in initialization block
}

public String getName()
{
return name;
}

public double getSalary()
{
return salary;
}

public int getId()
{
return id;
}

private static int nextId;

private int id;
private String name = ""; // instance field initialization
private double salary;

// static initialization block
static
{
Random generator = new Random();
// set nextId to a random number between 0 and 9999
nextId = generator.nextInt(10000);
}

// object initialization block
{
id = nextId;
nextId++;
}
}
17. 在类第一次加载时,将会进行静态域的初始化。与实例域一样,除非将它们显示地设置成指定值,否则默认的初始化值为0,false或null。所有静态初始化语句以及静态初始化块按照类定义中的顺序执行。18. 一个源文件中只能有一个public类,可以有任意数目的非public类,文件名和public类一致。19. 静态导入:导入静态方法和静态域。20. 如果没有在源文件中使用package语句,则源文件置于默认包中,默认包为一个没有名字的包。21. 包作用域:如果没有指定访问修饰符public,protected,或private,则这个部分(类,方法或变量)可以被同一个包中的所有方法访问。[/code]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: