ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

面向对象的延伸与Java内部定义类的应用

2020-05-22 21:52:16  阅读:242  来源: 互联网

标签:Java 定义 对象 LocalDate 构造 方法 面向对象 Date data


识别类

  • 传统的过程化程序设计,必须从顶部的main函数开始编写程序,在面向对象程序设计时没有所谓的"顶部".首先从设计类开始,然后再往每个类中添加方法.
  • 识别类的规则是在分析问题的过程中寻找名词,而方法对应着动词.
  • 例如在订单处理系统中,有这样一些名词:
    • 商品(Item)
    • 订单(Order)
    • 送货地址(Shopping address)
    • 付款(Payment)
    • 账户(Account)
  • 接下来,查看动词:商品被添加到订单中,订单被发送或取消,对于每一个动词如:"添加","发送","取消",都要标识出主要负责完成的动作.
  • 当然这些原则,只是一个经验,在创建类时,完全取决于个人的开发经验.

类之间的关系

  • 在类之间,最常见的关系是
    • 依赖
    • 聚合
    • 继承
  • 依赖:如果一个类的方法操纵另一个类的对象,就是一个类依赖于另一个类.

应该尽可能减少相互依赖的类的存在,如果类A不知道B的存在,它就不会关心类B的任何改变(这意味着B的改变不会导致A产生任何bug).用软件工程术语来说,就是让类之间的耦合度最小.

  • 聚合:是一种具体且容易理解的关系,例如一个Order对象包含一些Item对象.聚合关系意味着类A的对象包含类B的对象.
  • 继承:是一种用于表示特殊与一般关系的.例如RushOrder类由Order类继承而来,在具有特殊的RushOrder类中包含了一些用于优先处理的特殊方法,以及一个计算运费的不同方法;而其他的方法,如添加商品,生成账单都是从Order类中继承而来的.一般而言,如果类A扩展类B,类A不但包含从类B继承的方法.

使用预定义类

  • 在Java中,没有类就无法做任何事,并不是所有的类都具有面向对象特征,例如:Math类,在程序中,可以使用Math类的方法,并只需要知道方法名和参数,而不必了解它的具体实现过程,这正好似封装的关键所在,但遗憾的是Math类中只封装了功能,不需要也不必隐藏数据.由于没有数据,因此也不必担心生成对象以及初始化实例.

对象与对象变量

  • 要想使用对象,就必须首先构造对象,并指定其初始状态,然后,对对象应用方法.
  • 在Java程序设计语言中,使用构造器(constructor)构造新实例,构造器是一种特殊的方法,用来构造并初始化对象.下面看一个例子,在标准Java库中包含一个Date类.它的对象将描述一个时间点.
  • 构造器的名字应该与类名相同.因此Date类的构造器名为Date.要想构造一个Date对象.需要在构造器前面加上一个new操作符.new Date(),这个表达式构造一个新对象,这个对象呗初始化为当前的日期和时间.
  • 如果需要的话,也可以将这个对象传递给一个方法:System.out.println(new Date());.
  • 或者,也可以将一个方法应用于刚刚创建的对象,Date类中有一个toString()方法,这个方法将返回日期的字符串描述,下面的语句可以说明如何将toString方法应用于新构造的Date对象上.String s = new Date().toString();,构造的对象仅适用了一次,通常,希望构造的对象可以多次使用时,需要将对象存放在一个变量中:Date birthday = new Date();.
  • 在对象与对象变量之间存在着一个重要的区别,例如:Date deadline;定义了一个对象变量deadline,它可以引用Date类型的对象.但是,一定要注意:变量deadline不是一个对象,实际上也没有引用对象.此时,不能将任何Date方法应用于这个变量上.

注意,一个对象要想使用,必须初始化该对象,使用构造器去构造该对象.

一定要认识到:一个对象变量并没有包含一个对象,只是引用了一个对象.

  • 在Java中,任何对象变量的值都是对存储在另外一个地方的一个对象的引用,new操作符的返回值也是一个引用.下列语句:Date deadline = new Date();有两个部分,表达式new Date()构造了一个Date类型的对象,并且它的值是对新创建对象的引用,这个引用存储在变量deadline中.
  • 如果将一个方法应用于一个值为null的对象上,那么会产生错误.
birthday = null;
String s = birthday.toString(); //runtime error!

局部变量不会自动初始化为null,而必须通过调用new或设置为null进行初始化.

Java类库中的LocalDate类

  • LocalDate类是用日历表示法表示时间的类.

将时间与日历分开是一种很好的面向对象设计.

  • 不要使用构造器来构造LocalDate类,实际上,应当使用静态工厂方法代表构造器.LocalDate.now()会构造一个新对象,表示构造这个对象时的日期.可以提供年月日来构造特定的日期对象LocalDate.of(1999,12,31).使用对象变量接收这个对象:LocalDate newYearsEve = LocalDate.of(1999,12,31);.
  • 一旦有了一个LocalDate对象,可以用方法getYear,getMonthValue和getDayOfMonth得到年月日:
int year = newYearsEve.getYear();
int month = newYearsEve.getMonthValue();
int day = newYearsEve.getDayOfMonth();
  • 更改器方法与访问器方法
    • 更改器方法是修改对象的状态.
    • 访问器方法是获取对象的状态.
  • 案例:使用日历类
public class CalendarTest {
    public static void main(String[] args) {
        LocalDate data = LocalDate.now();
        int month = data.getMonthValue();
        int today = data.getDayOfMonth();

        data = data.minusDays(today-1);
        DayOfWeek weekday = data.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(data.getMonthValue()==month)
            {
                System.out.printf("%3d",data.getDayOfMonth());
                if(data.getDayOfMonth()==today)
                {
                    System.out.print("*");
                }
                else{
                    System.out.print(" ");
                }
                data=data.plusDays(1);
                if(data.getDayOfWeek().getValue()==1) {
                    System.out.println();
                }
            }
            if(data.getDayOfWeek().getValue()!=1)
            {
                System.out.println();
            }
        }
    }
}

标签:Java,定义,对象,LocalDate,构造,方法,面向对象,Date,data
来源: https://www.cnblogs.com/acknowledge/p/12939949.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有