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

  

万物皆对象

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

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

基本步骤:

1、发现类

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

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

2、找出属性(名词)

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

3、找出行为(动词)

吃饭、说话、表演……

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

二、使用类图描述类

作用:直观容易理解

参考工具:StarUML、Astah 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:00。 UTC 是 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 对象, 可以用方法 getYear、 getMonthValue 和 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.getYear和GregorianCalendar.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语言中访问器和更改器没有明显的语法区别。

DAY10-万物皆对象-2018-2-2的更多相关文章

  1. Javascript万物皆对象?

    在javascript的世界里,有这么一句话,万物皆对象. 但是这个对象,应该怎么理解呢? exm........??,难道值类型也是对象?!! 当然,不是. 准确地讲是对于“引用类型”而言. 那,在 ...

  2. 20190814 On Java8 第三章 万物皆对象

    第三章 万物皆对象 对象创建 数据存储 有5个不同的地方可以存储数据: 寄存器 (Registers) 最快的存储区域,位于CPU内部 .无法直接控制. 栈内存(Stack) 存在于常规内存 RAM ...

  3. 大话JS面向对象之开篇万物皆对象------(ATM取款机引发的深思)

    一,总体概要 OO(面向对象)概念的提出是软件开发工程发展的一次革命,多年来我们借助它使得很多大型应用程序得以顺利实现.如果您还没有掌握并使用OO进行程序设计和开发,那么您无疑还停留在软件开发的石器时 ...

  4. java万物皆对象

    我们以Dom对象的形式 可以CRUD xml文件或xml字串(经流把xml文件读出转成字串) 我们以JsonObject对象的形式 可以CRUD json字串 还有正则表达式.ORM都是.

  5. 万物皆对象的JavaScript

    写在前面: 经过前段时间对于H5语言的学习,开始慢慢适应现在的生活节奏和代码语言.从一开始的毫无头绪到现在可以大概地写出部分的网站静态页面,用了两个周的时间.作为一个之前从未接触过计算机语言的初学者来 ...

  6. 房上的猫:类和对象>万物皆对象

    众所周知:java是一门面向对象的编程语言 本章将介绍基础的类和对象 一.对象 对象是用来描述客观事物的一个实体,由一组属性和方法构成二.封装 封装就是把一个事物包装起来,并尽可能隐藏内部细节三.类  ...

  7. 什么是对象:EVERYTHING IS OBJECT(万物皆对象)

      所有的事物都有两个方面: 有什么(属性):用来描述对象. 能够做什么(方法):告诉外界对象有那些功能. 后者以前者为基础. 大的对象的属性也可以是一个对象.

  8. javascript是脚本语言?javascript万物皆对象?

    呵呵哒!带你见识下js面对对象的魅力 是的是的,退后,朕要开始装逼了- 这是什么鸟东西?是的是的,装逼开始,2016年度最佳JS编译器,ES6标准出来后,小伙伴们对新特性摩拳擦掌,奈何浏览器支持把我们 ...

  9. 又一次认识java(一) ---- 万物皆对象

    假设你现实中没有对象.至少你在java世界里会有茫茫多的对象,听起来是不是非常激动呢? 对象,引用,类与现实世界 现实世界里有许很多多的生物,非生物,跑的跳的飞的,过去的如今的未来的,令人眼花缭乱.我 ...

  10. Python赋值原理:Python无变量,万物皆对象

    有几个和以前的常见语言,比如c语言不同 改变变量数据不覆盖原来的 name = '苍老师' print(id(name)) name = '志玲' print(id(name)) 运行结果 73955 ...

随机推荐

  1. windows 连接Linux

    服务器:阿里云 ecs 从 Windows 环境远程登录 Linux 实例 远程登录软件的用法大同小异.本文档以 Putty 为例,介绍如何远程登录实例.Putty 操作简单.免费.免安装, 下载地址 ...

  2. windows第四层负载均衡--基于NLB负载均衡

    上面有一篇文章说windows第七层负载均衡,这次讲讲第四层负载均衡 TCP/IP协议族,第七层是应用层,第四层是传输层.第四层负载均衡主要通过IP进行转化. 一些优秀的第四层负载均衡软件,速度可以接 ...

  3. 5.移植uboot-设置默认环境变量,裁剪,并分区

    在上一章,我们使用网卡传输文件,每次启机时,环境变量都要变为默认值,需要重新设置ip,MAC地址才行,由于没有配置mtdparts命令,启动内核也不成功 所以本章主要学习: 1)修改环境变量默认值 2 ...

  4. VS工程中添加c/c++工程中外部头文件及库的基本步骤

    转载自 在VS工程中,添加c/c++工程中外部头文件及库的基本步骤: 1.添加工程的头文件目录:工程---属性---配置属性---c/c++---常规---附加包含目录:加上头文件存放目录. 2.添加 ...

  5. 浅析ASCII、Unicode和UTF-8三种常见字符编码

    什么是字符编码? 计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255( ...

  6. 洛谷 P1553 数字反转(升级版)【字符串+STL stack】

    P1553 数字反转(升级版) 题目描述 给定一个数,请将该数各个位上数字反转得到一个新数. 这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数.整数反转是将所有数位对调 ...

  7. sublime text 3如何安装插件

    原博客地址:http://blog.csdn.net/weixin_40682842/article/details/78727266 我自己的部分操作如下: 学习Sublime Text扩展插件的安 ...

  8. Linux下gdb的安装及使用入门

    1.安装gdb. 在root用户权限下: root@iZ2zeeailqvwws5dcuivdbZ:~# apt-get update ...... ...... ...... root@iZ2zee ...

  9. Logger之Logger.getLogger(CLass)技巧代替system.out.print

    ---恢复内容开始--- 尊重原创:http://www.cnblogs.com/zxf330301/p/5876117.html 之前一直在使用System.out.println()来调试.但是用 ...

  10. JS使用循环按指定倍数分割数组组成新的数组的方法

    今天一个新人同事问了我一个问题,就是有一个像下边这种不知道具体长度的数组,想以每4个为一组,重新组合为一个二维数组,很简单的需求只需要用到一个循环再去取余数就可以了,写了一个小demo在这里把代码包括 ...