Java核心卷 卷一 自我笔记 4.1对象与类-------类与Java库中的类

面向对象程序设计概述

面向对象程序设计是当今主流的程序设计范性。因为Java是完全面向对象的编程语言,所以,我们必须熟悉OPP才能够编写程序。
面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分。程序中的很多对象来自标准库,还有一些是定义类。部分对象,我们可以自己构造出来。


类是构造对象的模板。我们将类构造对象的过程叫做创建类的实例。在Java中,所有的代码都位于某个类的内部。标准的Java库中给我们提供了几千个类。但是,某些类还是需要我们自己去创建。
封装是与对象有关的一个重要概念。封装,是Java非常优秀的一点。它将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式。使用者只需要去调用,不需要管其内部的行为逻辑。我们将对象中的数据称为实例域,操纵数据的过程称为方法。对于一个特定的类实例(对象)都有一组特定的实例域值。这些值的集合就是这个对象当前的状态。
实现封装的关键在于绝对不能让类中的方法访问其他类的实域类。所以,我们在定义实域类的时候,经常使用private关键字,将其私有化。java程序仅通过对象的方法与对象数据进行交互。
OPP的另一个原则会让用户自定义Java类变得轻而易举。我们可以通过继承扩展一个类来建立另外一个新的类。在Java中,所有的类的源于一个强大的类,Object类。

对象
要想使用OOP,我们需要搞清对象的三个主要特征:

  • 对象的行为--------可以对对象施加什么操作
  • 对象的状态--------当使用对象中的方法时间,对象如何响应
  • 对象标识--------如何分辨具有相同行为与状态的不同对象

每个对象都保存着描述当前特征的信息。这就是对象的状态。对象的状态可能会随着时间而发生改变,但这种改变不会是自发的。对象状态的改变一定通过调用方法实现。但是,对象的状态并不能完全描述一个对象。每个对象都有一个唯一的身份。作为一个类的实例,每个对象的标识永远是不同的,状态常常也存在差异。
对象的关键特性也彼此之间互相影响。比如:一个订单是“已送货”或“已付款”状态,它就不能被删除订单的方法调用。

类与类之间的关系
在类之间。最常见的关系有:

  • 依赖
  • 聚合
  • 继承

依赖,是最明显最常见的关系。如果一个类的方法操纵另一个类的对象,我们就说一个类依赖于另一个类。
聚合,是一种具体并易于理解的关系。聚合关系意味着类A的对象包含类B的对象。
继承,Java中经常用的关系,采用关键字extend,是一种用于表示特殊与一般关系的。一般来说,如果类A扩展B,类A不但包括从类B继承的方法,还会拥有一些额外的功能。

对象与对象变量
我们要想使用对象,就必须首先构造对象,并指定其初始状态,对对象应用方法。我们将设置初始状态的方法叫构造器。构造器是一种特殊的方法,用来构造并初始化对象。在IDEA中,我们在类就算不写,它也会给我们自动建立一个空参构造。
构造器的名字应该与类名相同。例如:Date类的构造器名为Date。想要构造一个Date对象,需要在构造器前面加上new操作符。例如:

new Date();

这个表达式构造了一个新对象。这个对象初始化了当前的时间和日期。
通常,我们希望构造的对象可以多次使用,因此,需要将对象存放在一个变量中:

Date birthday=new Date();

即,对象变量birthday指向建立的Date对象。

当然,在对象与对象变量之间存在着一个重要的区别,例如:

Date deadline;

这条语句定义了一个Date的对象变量deadline,它可以引用Date类型的对象。但是,变量deadline不是一个对象,在它没有引用对象时,不能使用Date的任何方法。

s=deadline.toString();

这将会产生编译错误。如果要想使用它,我们必须先初始化变量deadline。我们有两个选择。第一种是用新构造的对象初始化这个变量:

deadline=new Date();

第二种就是用这个变量引用一个已存在的对象:

deadline=birthday;

这两个变量同时引用同一个对象。需要注意的是,一个对象变量并没有实际包含一个对象,而仅仅引用一个对象。
下面,我们来看一下new操作符:

Date deadline=new Date();

它分为两个部分。表达式new Date()构造了一个Date类型的对象,并且它的值是对新创建对象的引用。这个引用将存储在变量deadline中。

以Java中的LocalDate类为例

日历表达法LocalDate类,不需要使用构造器来构造LocalDate的新对象。我们应当使用静态工厂方法调用构造器。例如,我们将用年月日来构造一个特定日期的对象并保存在对象变量中:

LocalDate newYearsEve=LocalDate.of(1999,12,31);

我们有了LocalDate对象之后,可以用方法getYear、getMonthValue和getDayOfMonth得到年、月和日。
在LocalDate中,给我们提供了一个有趣的方法,plusDays方法,它会根据当前对象构建一个新的距离当前对象多少天的新对象,对于当前对象没有任何的改变。

LocalDate a=newYearsEve.plusDays(1000);

这种访问对象而不修改对象的方法我们称之为访问器方法。

让我们编写一个应用LocalDate类的程序:

public class timetest {
    public static void main(String[] args) {
        LocalDate date = LocalDate.now();
        int month = date.getMonthValue();
        int today = date.getDayOfMonth();
        date = date.minusDays(today-1);//到这个月的一号
        System.out.println(date.toString());
        DayOfWeek weekday = date.getDayOfWeek();
        int value = weekday.getValue();
        System.out.println("Mon Tue Wed Thu Fri Sat Sun");
        for (int i = 0; i <value; i++) {
            System.out.print("  ");
        }
        while (date.getMonthValue()==month){
            System.out.printf("%3d",date.getDayOfMonth());
            if(date.getDayOfMonth()==today)
                System.out.print("*");
            else
                System.out.print(" ");
            date=date.plusDays(1);
            if (date.getDayOfWeek().getValue()==1)
                System.out.println();

        }
        if (date.getDayOfWeek().getValue() != 1) {
            System.out.println();
        }
    }
}

可以看到,我们可以利用LocalDate类去编写一个日历程序。我们可以使用一个类的接口去完成复杂的任务,而不需要去了解实现细节。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值