• 封装:

从形式上看, 封装是将数据和行为组合在一个包中, 并对对象的使用者隐藏了数据的实现方式.
对象中的数据称为实例域, 操纵数据的过程称为方法.
对于每个特定的类实例(对象)都有一组特定的实例域值.这些值的集合就是这个对象的当前状态(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. 洛谷P3384 【模板】树链剖分

    题目描述 如题,已知一棵包含N个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 操作1: 格式: 1 x y z 表示将树从x到y结点最短路径上所有节点的值都加上z 操作2: 格式 ...

  2. virtualenv与virtualenvwrapper虚拟环境

    python开发之virtualenv与virtualenvwrapper讲解 在使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题: 亦或者是在开发过程中不想让物 ...

  3. jQuery设置时间格式

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  4. Qt自定义界面

    https://blog.csdn.net/zhangxiaoyu_sy/article/details/78925221

  5. Java项目引用外部jar包时,使用bat启动

    1.将项目导出为jar包 1)点击项目—>右击—>点击Export—>进入export页面 2)点击JAR file——>Next——>勾选项目——>选择jar包存 ...

  6. toolbar按钮添加图标

    需要toolbar关联imagelist组件,imagelist组件添加需要的图片,在toolbar新建按钮,按钮中选择相应图表.

  7. 洛谷P3167 通配符匹配 [CQOI2014] 字符串

    正解:哈希+dp/AC自动机/kmp 解题报告: 传送门! 这题解法挺多的,所以就分别港下好了QwQ 首先港下hash+dp趴 可以考虑设dp式f[i][j]:匹配到第i个通配符了,下面那个字符串匹配 ...

  8. 1_01 vue的双向绑定

    听说vue1是双向绑定,不过现在Vue2不能直接双向绑定,需要设置绑定. 一.常见的是input表单的v-model const component = { template: ` <div&g ...

  9. oracle_18c新建用户用normal登陆失败

    工具介绍:win10系统,使用的是oracle18c. 首先说一下oracle18c的特性,在oracle18c创建用户要以c##开头,比如: --创建新用户create user c##test_u ...

  10. 深入理解Java虚拟机1-chap1-2-斗之气8段

    1.HotSpot VM:热点代码探测能力,与JIT技术共同进行编译优化,输出高质量代码 2.运行时数据区域 程序计数器:控制程序执行顺序,无OOM Java虚拟机栈:生命周期与线程一致,描述Java ...