Java--对象与类

类(class)是构造对象的模板。

  • 由类构造(construct)的对象的过程称为创建类的实例(instance)。

  • 封装(encapsulation),又称数据隐藏,将数据与行为组合在一个包,并对对象的使用者隐藏了数据实现的方式。

  • 实例域(instance field),是对象中的数据。

  • 方法(method),操纵数据的过程。

  • 对于每一特定的类实例(对象)都有一组特定的实例域值。这些值的集合就是这个对象的当前状态(state)。

  • 类之间的关系:依赖(“users-a")、聚合(”has-a")(又称“关联”)、继承("is-a")

对象的三个特征

  • 对象的行为(behavior)----可以对对象实
  • 对象的状态(state)
  • 对象标识(identity)

预定义类

使用对象前,必须首先构造对象,并指定初始状态,然后在对对象应用方法

   * 使用构造器(constructor)构造新实例。构造器是一种特殊的方法,用来构造并初始化对象
   * 构造器的名字应该与类名相同
   * new 是操作符   new Date() 就是构造了一个对象,这个对象被初始化为当前的日期与时间
   * 也可以给对象传递一个方法     System.out.println(new Date());
   * 也可以将一个方法应用于刚刚创建的对象。

对象变量,要想多次使用变量就要给变量起名字,方便使用

   * 将对象存储在对象变量中    Date birthday = new Date();
   * 变量必须用新构造的对象初始化后或者引用一个以存在的对象才能应用对象方法     
   ```
      Date deadline = new Date(); //  新构造一个 new  Date(); 并将这个对象存储在deadline变量中
  ```
  * 对象变量仅仅只是引用对象,并没有实际包含一个对象
  * 当显式的将对象设置为null,表明这个对象变量目前没有引用任何对象;此时将不能对其应用方法
  ```
     Date deadline = new Date(); 
     deadline = null;  
     deadline.toString // runtime error!
 ```

用户自定义类

 * 自定义类别形式
 ``` 
 class ClassName
 {
    field  // 实例域 ,如果是由private修饰的则是私有域,由public修饰的为公有域,protected 成员是包内可见的,并且对子类可见
    ....
    constructor // 构造器与类同名
    ...
    method
    ...
 }
```
* 构造
   * 构造器与类同名
   * 每个类可以有一个以上的构造器
   * 构造器可以有0个、1个或多个参数
   * 构造器没有返回值
   * 构造器总是伴随着new操作一起调用

* 隐式参数与显式参数

* 封装
  * 只返回实例域值的方法称为 域访问器
  * 需要获取或设置实例域的值,需提供以下三项内容:
     * 一个私有的数据域
     * 一个公有的域访问器
     * 一个公有的域更改器方法
 不要在构造器中定义与实例域重名的局部变量,因为局部变量只能在构造器内部访问,会屏蔽同名的实例域

   ```
      class Employee {
    private String name;  // 此处的name为实例域
    private double salary; //实例域
    private LocalDate hireDay;   //实例域

// constructor
Employee(String name,double salary,int year,int month,int day)   
    // 此处name,salary,year,month,day为局部变量
{
	this.name = name;   // this.name 为实例域, "="后面的为局部变量
	this.salary = salary;
	this.hireDay = LocalDate.of(year,month,day);
	
}


// methods
public String getName() {
	return name;
}

public double getSalary() {
	return salary;
}

public void RaiseSalary(double ByPercent) {
	double raise = ByPercent * salary;
    salary += raise;
}
```
       * 不要编写返回引用可变对象的访问器方法
       * 如果需要返回一个可变对象的引用,应该首先对其进行 clone();
         return (Date) hireDay.clone();
posted @ 2019-04-08 22:09  Tuicy  阅读(164)  评论(0编辑  收藏  举报