当前位置: 移动技术网 > IT编程>开发语言>Java > DAY10-万物皆对象-2018-2-2

DAY10-万物皆对象-2018-2-2

2018年02月03日  | 移动技术网IT编程  | 我要评论

    许久没有写了,虽然每天都有在学,但是学的东西也少了,后面难度慢慢加大,学习速度也是变慢了。这是许多天积累下来的笔记,从第一次接触对象,到慢慢去了解,现在处于还待深入了解的状态。万物皆对象,那是不是说没有对象的小伙伴不必担心了呢?

  

 

万物皆对象

终于到了对象这里。面向对象程序设计(简称OOP),Java是完全面向对象的。

一、使用面向对象思想描述现实世界。

基本步骤:

1、发现类

如下图:可以将下图的人分为几类

 

 

人类/科学家类/演员类/逗比类

2、找出属性(名词)

姓名、性别、职业、年龄、爱好……

3、找出行为(动词)

吃饭、说话、表演……

数据抽象:是数据和处理方法的结合

二、使用类图描述类

作用:直观容易理解

参考工具:StarUMLAstah UML

     

 

 

 

三、类与对象的关系

类:是抽象概念,仅仅是模板,比如说“演员”、“总统”。类是构造对象的模板和蓝图,用于描述一种数据类型。

对象:是你能够看到摸到的具体实物。

拿小甜饼举例,将类想象成制作小甜饼的机器,而对象就是一个小甜饼。由类构造(construct)对象的过程称作为创建类的实例(instance)。

如图:左边是类,右边是对象

         

 

 

补充:怎么另一个类中怎么访问其他的类private的变量的方法

  1. 在另一个类中,是无法访问其他类的私有属性或方法的。
  2. 在内部类可以直接访问。
  3. 可以通过定义方法的形式,让内部类调用,以获得方法的返回值。

四、类之间的的关系

常见关系有:依赖、聚合、继承

依赖(uses-a):如果说一个类的方法操纵另一个类的对象,就说一个类依赖于另一个类,我们应该尽可能让相互依赖的类减少,用软件工程的术语来说,就是让类之间的耦合度最小。

聚合(has-a):类A的对象包含类B的对象。

继承(is-a):特殊与一般的关系。

 

 

五、预定义类

java中,没有类就无法做任何事情,然而,并不是所有类都具有面向对象特征,例如:Math类。

1、对象与对象变量:想要使用对象就必须先构造对象,并指定其初始状态。

区别:Date deadline;//deadline does not refer to any object

实际上等同于c++中:Date* deadline;

定义了一个对象变量deadline,它可以引用Date类型的对象。但是,一定要认识到:变量deadline不是一个对象,也没有引用对象。首先要初始化这个变量:deadline=new Date();如果是deadline=null;表明这个对象目前没有引用任何对象。

两个变量引用一个对象:(一个对象变量没有包含实际包含一个对象,而仅仅引用一个对象。在Java中任何对象变量的值都是对存储在另外一个地方的一个对象的引用。New操作符的返回值也是一个引用。)

 

 

c++中,稍不小心就可能创建一个错误的指针,或者造成内存溢出。而在Java语言中,这些问题都不存在,如果使用一个没有初始化的指针,会报错,而不是随机运行的结果;同时,不必担心内存的管理问题,垃圾收集器将会处理相关的事宜。

2、Java 类库中的 LocalDate

时间是用距离一个固定时间点的毫秒数(可正 可负) 表示的, 这个点就是所谓的纪元( epoch), 它 是 UTC 时间 1970 1 1 00:00:00UTC Coordinated Universal Time 的缩写,与大家熟悉的 GMT ( Greenwich Mean Time, 格林威治时间)一样,是一种具有实践意义的科学标准时间。

不要使用构造器来构造 LocalDate 类的对象。

Local Date.now() 会构造一个新对象,表示构造这个对象时的日期。

可以提供年、 月和日来构造对应一个特定日期的对象: LocalDate.of(1999, 12, 31)

当然, 通常都希望将构造的对象保存在一个对象变量中: LocalDate newYearsEve = Local Date.of(1999, 12, 31);

一旦有 了一个 LocalDate 对象, 可以用方法 getYeargetMonthValue getDayOfMonth 得到年、月和日:

 int year = newYearsEve.getYearO; // 1999

 int month = newYearsEve.getMonthValueO; // 12

int day = newYearsEve.getDayOfMonth(); // 31

看起来这似乎没有多大的意义, 因为这正是构造对象时使用的那些值。不过,有时可能 某个日期是计算得到的,你希望调用这些方法来得到更多信息。例如, plusDays 方法会得到 一个新的 LocalDate, 如果把应用这个方法的对象称为当前对象,这个新日期对象则是距当 前对象指定天数的一个新日期:

LocalDate aThousandDaysLater = newYearsEve.piusDays(1000);

 year = aThousandDaysLater.getYearO// 2002

month = aThousandDaysLater.getMonthValueO; // 09

day = aThousandDaysLater.getDayOfMonth(); // 26

LocalDate 类封装了实例域来维护所设置的日期。如果不查看源代码, 就不可能知道类内 部的日期表示。当然, 封装的意义在于,这一点并不重要, 重要的是类对外提供的方法。

3、更改器方法与使用器方法

1、访问器方法(accessor method):只访问对象而不修改对象的方法。例如:LocalDate.getYearGregorianCalendar.get

LocalDate aThousandDaysLater = newYearsEve.plusDays(1000);调用newYearEve.plusDays之后不会改为1000之后的日期,实际上plusDays方法没有更改调用这个方法的对象,而是,plusDays方法会产生一个新的LocalDate对象,然后把这个新对象赋给aThousandDaysLater变量,原来对象不做任何改动。

2、更改器方法(mutator method):对象的方法会改变

有一个GregorianCalendar方法是更改器方法,可以用于增加1000天:

CregorianCalendar someDay = new CregorianCalendar(1999, 11, 31); //注意月份是从0-11

someDay.add(Calendar.DAY_0F _M0NTH, 1000);

 

注:在c++中,带有const后缀的方法是访问器方法;默认为更改器方法。但是,在Java语言中访问器和更改器没有明显的语法区别。

 

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网