• 封装:

从形式上看, 封装是将数据和行为组合在一个包中, 并对对象的使用者隐藏了数据的实现方式.
对象中的数据称为实例域, 操纵数据的过程称为方法.
对于每个特定的类实例(对象)都有一组特定的实例域值.这些值的集合就是这个对象的当前状态(state).

实现封装的关键在于不能让类中的方法直接的访问其他类的实例域.程序仅通过对象的方法与对象数据进行交互.

  • 类之间的关系:

依赖(uses-a): 如果一个类的方法操作另一个类的对象, 就可以说一个类依赖于另一个类.应该尽可能将互相依赖的二类减至最低.
聚合(has-a): 一个A对象包含一些B对象, 聚合关系意味着类A的对象包含类B的对象.
继承(is-a): 通过扩展一个类来建立另一个类的过程称为继承.

  • 对象的三个特性:

对象的行为(behavior) ---> 可以对对象施加哪些操作,或可以对对象施加哪些方法?
对象的状态(state) ---> 当施加那些方法时, 对象如何响应?
对象的标识(identity) ---> 如何辨别具有相同行为与状态的不同对象?

对象的行为: 是用可调用的方法定义的.同一类的多有对象实例, 由于支持相同的行为而具有家族式的相似性.
对象的状态: 每个对象都保存着描述当前特征的信息. 对象的状态可能会随着时间而发生改变, 但必须是通过调用方法实现.
对象的标识: 每个对象都有一个唯一的身份(identity), 状态常常也存在差异.

对象的这些关键特性在彼此之间相互影响着.

  • 预定义类:

并不是所有的类都具有面向对象的特征, 例如Math类.

一个对象变量并没有实际包含一个对象, 而仅仅引用一个对象.
在Java中, 任何对象变量的值都是对存储在另外一个地方的一个对象的引用. new操作符的返回值也是一个引用.
可以显示的将对象变量设置为null, 表明这个对象变量目前没有引用任何对象.
如果将一个方法应用于一个值为null的对象上, 那么就会产生运行错误.
  Date birthday = null;
  String s = birthday.toString(); // runtime error!

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

  • Date类:

有一个状态: 特定的时间点. 时间是用距离一个固定时间点(UTC时间1970年1月1日00:00:00)的毫秒数(可正可负)表示的.

不推荐使用的getDay, getMonth,getYear等方法.(当类库设计者意识到某个方法不应该存在时, 就把它标记为不鼓励使用. )
比较时间点的方法: before方法和after方法

  • GregorianCalendar类:

包含比Date类多得多的方法.
构造器:
new GregorianCalendar()
构造一个新对象, 用于表示对象构造时的日期和时间.
new GregorianCalendar(1999, 11, 31)
月份是从0开始计算的, 所以11代表12月份.
new GregorianCalendar(1999, Calendar.DECEMBER, 31, 23, 59, 59)
月份可以使用常量
GregorianCalendar deadline = new GregorianCalendar(...);
将构造的对象存储在对象变量中.
周是从周日开始算的, 从1开始, 类中得到5其实是周四

get方法获取时间,set方法设置时间, add延长或者缩短时间(参考下面的类);

set和add方法是对对象状态进行修改的, 为更改器方法

int firstDayOfWeek = d.getFirstDayOfWeek();
更改器方法: 对实例域做出修改的方法称为更改器方法. 例如set, add
访问器方法: 仅访问实例域而不进行修改的方法称为访问器方法. 例如get

  • GregorianCalendar类和Date类之间转换:

GregorianCalendar --> Date:
  GregorianCalendar calendar = new GregorianCalendar(year, month, day);
  Date hireDay = calendar.getTime(); // 获得时间点

Date --> GregorianCalendar:
  GregorianCalendar calendar = new GregorianCalendar();
  calendar.setTime(hireDay);
  int year = calendar.get(Calendar.YEAR);

// ObjectNote.java

package com.picc.sample.objectsample;

import java.util.Calendar;
import java.util.GregorianCalendar; public class ObjectNote {
public static void main(String[] args) {
GregorianCalendar now = new GregorianCalendar();
// get方法获取时间
int month = now.get(Calendar.MONTH) + 1;
int weekday = now.get(Calendar.DAY_OF_WEEK); // set方法设置时间
GregorianCalendar deadline = new GregorianCalendar(1999, Calendar.DECEMBER, 31, 23, 59, 59);
// 直接设置年月日
deadline.set(2001, Calendar.APRIL, 15); // 分别设置年月日
// deadline.set(Calendar.YEAR, 2001);
// deadline.set(Calendar.MONTH, Calendar.APRIL);
// deadline.set(Calendar.DAY_OF_MONTH, 15); // 为给定的日期增加天数, 星期数,月份等, 正数往后移,负数往前移.
deadline.add(Calendar.MONTH, 3); // 给deadline延长3天.
System.out.println("month: " + month);
System.out.println("weekday: " + weekday);
System.out.println(deadline);
}
}

java笔记 -- 类与对象的更多相关文章

  1. Java笔记—— 类与对象的几个例子

    问题1 按要求编写java应用程序: 编写西游记人物类,属性有:身高,名字和武器.方法有:显示名字,显示武器. 在main方法中创建两个对象.猪八戒和孙悟空,并分别为他们的两个属性名字和武器赋值,最后 ...

  2. 关于Java构造类与对象的思考

    简单记录一下Java构造类与对象时的流程以及this和super对于特殊例子的分析. 首先,接着昨天的问题,我做出了几个变形: Pic1.原版: Pic2.去掉了T.foo方法中的this关键字: P ...

  3. 第31节:Java基础-类与对象

    前言 Java基础-类与对象,方法的重载,构造方法的重载,static关键字,main()方法,this关键字,包,访问权限,类的继承,继承性,方法的重写,super变量. 方法的重载:成员方法的重载 ...

  4. Java面向对象-类与对象

    Java面向对象-类与对象 类与对象的关系 我们通俗的举个例子,比如人类是一种类,张三这个人就是人类的具体的一个个体,也就是java中的对象:这就是一个类与对象的关系: 类的定义 下面看实例 类的创建 ...

  5. 《python基础教程(第二版)》学习笔记 类和对象(第7章)

    <python基础教程(第二版)>学习笔记 类和对象(第7章) 定义类class Person:    def setName(self,name):        self.name=n ...

  6. 《Java编程思想》读书笔记-类与对象

    欢迎各位读者关注我的微信公众号,共同探讨Java相关技术.生命不止,学习不休! 也许你慢慢地对程序有了这样的认识:程序只是一些列带有方法的对象的组合,这些方法以其它对象为参数,可在任何地方返回,并发送 ...

  7. Java学习笔记--类和对象

    1.介绍面向对象的编程          面向对象是现在主流的编程样例,它替代了以前C语言使用时的“结构体”,Java是一门面向对象的语言,所以需要熟悉面向对象的概念.面向对象的程序由很多对象组成,每 ...

  8. JAVA基础——类和对象

    java类与对象学习笔记 一.成员变量和局部变量 (1)定义 1.成员变量 在类中定义,用来描述对象将要有什么.(默认的成员变量值为0) 2.局部变量 在类的方法中定义,在方法中临时保存数据. 演示示 ...

  9. Java:类与对象概念

      什么是类? 怎样定义一个类? 什么是对象,类和对象之间是什么关系,怎样创建一个对象? 对象引用和对象在内存中是如何分配的? 什么是类? 1. 类是具有相同的属性和功能的事物的抽象的集合,在面向对象 ...

随机推荐

  1. Linux 下挂载新硬盘方法

    Linux的硬盘识别: 一般使用”fdisk -l”命令可以列出系统中当前连接的硬盘 设备和分区信息.新硬盘没有分区信息,则只显示硬盘大小信息.   1.关闭服务器加上新硬盘   2.启动服务器,以r ...

  2. IniHelper

    /// <summary> /// ini文件操作类 /// </summary> public class IniHelper { #region 动态链接库调用 /// & ...

  3. Finalize方法的生成

    Finalize在c#编程语言中需要特殊语法,因此,c#要求在类名前加~符号来定义Finalize方法:例如 internal class FinalizeDemo { ~FinalizeDemo() ...

  4. InnoDB中锁的模式

    Ⅰ.总览 S行级共享锁 lock in share mode X行级排它锁 增删改 IS意向共享锁 IX意向排他锁 AI自增锁 Ⅱ.锁之间的兼容性 兼 X IX S IS X × × × × IX × ...

  5. PrimeNG之TreeTable

    --treetable用于显示分层数据表格的格式 Import import {TreeTableModule,TreeNode,SharedModule} from 'primeng/primeng ...

  6. NodeJS笔记(三)-创建第一个NodeJS web项目 Express

    参考:Express的安装 先创建一个文件夹专门存放NodeJS项目,这里以“E:\NodeJSProject”为例 CMD指向该目录 执行以下命名 mkdir expressdemo cd expr ...

  7. Oracle 数据库逻辑结构2.md

    Oracle 数据库逻辑结构一.存储关系Oracle 数据库逻辑上是由一个或多个表空间组成的,表空间物理上是由一个或多个数据文件组成的:而在逻辑上表空间又是由一个或多个段组成的.在Oracle 数据库 ...

  8. Spark生态以及原理

    spark 生态及运行原理 Spark 特点 运行速度快 => Spark拥有DAG执行引擎,支持在内存中对数据进行迭代计算.官方提供的数据表明,如果数据由磁盘读取,速度是Hadoop MapR ...

  9. 第一章 JQuery概述

    1.JQuery的作用:访问和操作DOM元素控制页面样式对页面事件进行处理扩展新的JQuery插件与Ajax技术完美结合注:JQuery能完成的效果js都能完成,但是JQuery的开发效率更高,代码更 ...

  10. Eureka服务注册与发现

    一.服务注册 注册Eureka的服务非常的简单,只需要引入spring-cloud-starter-netflix-eureka-client的jar包即可. <dependency> & ...