《Java编程的逻辑》笔记13--类的组合

作者: 天一方蓝 | 来源:发表于2019-05-22 22:28 被阅读30次
    类的组合.png

    基础类

    String

    String是Java API中的一个类,表示多个字符,即一段文本或字符串,它内部是一个char的数组,它提供了若干方法用于方便操作字符串。

    String可以用一个字符串常量初始化,字符串常量用双引号括起来(注意与字符常量区别,字符常量是用单引号),例如,如下语句声明了一个String变量name,并赋值为"老马说编程"

    String name = "老马说编程";

    String类提供了很多方法,用于操作字符串。在Java中,由于String用的非常普遍,Java对它有一些特殊的处理,本节暂不介绍这些内容,只是把它当做一个表示字符串的类型来看待。

    Date

    Date也是Java API中的一个类,表示日期和时间,它内部是一个long类型的值,它也提供了若干方法用于操作日期和时间。

    用无参的构造方法新建一个Date对象,这个对象就表示当前时间。

    Date now = new Date();

    日期和时间处理是一个比较长的话题,我们留待后续章节详解,本节我们只是把它当做表示日期和时间的类型来看待。

    图形类

    扩展 Point

    我们先扩展一下Point类,在其中增加一个方法,计算到另一个点的距离,代码如下:

    public double distance(Point p){
    return Math.sqrt(Math.pow(x-p.getX(), 2)
    +Math.pow(y-p.getY(), 2));
    }

    线 - Line

    在类型Point中,属性x,y都是基本类型,但类的属性也可以是类,我们考虑一个表示线的类,它由两个点组成,有一个实例方法计算线的长度,代码如下:

    image

    Line由两个Point组成,在创建Line时这两个Point是必须的,所以只有一个构造方法,且需传递这两个点,length方法计算线的长度,它调用了Point计算距离的方法获取线的长度。可以看出,在设计线时,我们考虑的层次是点,而不考虑点的内部细节。每个类封装其内部细节,对外提供高层次的功能,使其他类在更高层次上考虑和解决问题,是程序设计的一种基本思维方式。

    使用这个类的代码如下所示:

    image

    这个也很简单。我们再说明一下内存布局,line的两个实例成员都是引用类型,引用实际的point,整体内存布局大概如下图所示:

    image

    start, end, line三个引用型变量分配在栈中,保存的是实际内容的地址,实际内容保存在堆中,line的两个实例变量还是引用,同样保存的是实际内容的地址。

    一些说明

    类之间的组合关系,在Java中实现的都是引用,但在逻辑关系上,有两种明显不同的关系,一种是包含,另一种就是单纯引用。

    写在最后

    都看到这里,保存思维导图,顺便给个赞呗!

    相关文章

      网友评论

        本文标题:《Java编程的逻辑》笔记13--类的组合

        本文链接:https://www.haomeiwen.com/subject/cvgpzqtx.html