java笔记 -- 类与对象
- 封装:
从形式上看, 封装是将数据和行为组合在一个包中, 并对对象的使用者隐藏了数据的实现方式.
对象中的数据称为实例域, 操纵数据的过程称为方法.
对于每个特定的类实例(对象)都有一组特定的实例域值.这些值的集合就是这个对象的当前状态(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笔记 -- 类与对象的更多相关文章
- Java笔记—— 类与对象的几个例子
问题1 按要求编写java应用程序: 编写西游记人物类,属性有:身高,名字和武器.方法有:显示名字,显示武器. 在main方法中创建两个对象.猪八戒和孙悟空,并分别为他们的两个属性名字和武器赋值,最后 ...
- 关于Java构造类与对象的思考
简单记录一下Java构造类与对象时的流程以及this和super对于特殊例子的分析. 首先,接着昨天的问题,我做出了几个变形: Pic1.原版: Pic2.去掉了T.foo方法中的this关键字: P ...
- 第31节:Java基础-类与对象
前言 Java基础-类与对象,方法的重载,构造方法的重载,static关键字,main()方法,this关键字,包,访问权限,类的继承,继承性,方法的重写,super变量. 方法的重载:成员方法的重载 ...
- Java面向对象-类与对象
Java面向对象-类与对象 类与对象的关系 我们通俗的举个例子,比如人类是一种类,张三这个人就是人类的具体的一个个体,也就是java中的对象:这就是一个类与对象的关系: 类的定义 下面看实例 类的创建 ...
- 《python基础教程(第二版)》学习笔记 类和对象(第7章)
<python基础教程(第二版)>学习笔记 类和对象(第7章) 定义类class Person: def setName(self,name): self.name=n ...
- 《Java编程思想》读书笔记-类与对象
欢迎各位读者关注我的微信公众号,共同探讨Java相关技术.生命不止,学习不休! 也许你慢慢地对程序有了这样的认识:程序只是一些列带有方法的对象的组合,这些方法以其它对象为参数,可在任何地方返回,并发送 ...
- Java学习笔记--类和对象
1.介绍面向对象的编程 面向对象是现在主流的编程样例,它替代了以前C语言使用时的“结构体”,Java是一门面向对象的语言,所以需要熟悉面向对象的概念.面向对象的程序由很多对象组成,每 ...
- JAVA基础——类和对象
java类与对象学习笔记 一.成员变量和局部变量 (1)定义 1.成员变量 在类中定义,用来描述对象将要有什么.(默认的成员变量值为0) 2.局部变量 在类的方法中定义,在方法中临时保存数据. 演示示 ...
- Java:类与对象概念
什么是类? 怎样定义一个类? 什么是对象,类和对象之间是什么关系,怎样创建一个对象? 对象引用和对象在内存中是如何分配的? 什么是类? 1. 类是具有相同的属性和功能的事物的抽象的集合,在面向对象 ...
随机推荐
- HTTP协议实际使用笔记
mozilla的帮助文档: https://developer.mozilla.org/zh-CN/docs/Web/HTTP HTTP协议详解(转) php http头设置相关信息 这个2篇最好先看 ...
- day20:序列化模块,模块的导入
1,什么是序列化--将原本的字典,列表等内容转换成一个字符串的过程就叫做序列化,字符串是有顺序的,序列化转向一个字符串的过程,我们平时说的序列,指的就是字符串. 2,为何要序列化?本来字符串是可以强转 ...
- Web开发——HTML基础
文档资料参考: 参考:MDN官网 参考:http://www.runoob.com,W3School 参考:https://developer.mozilla.org/zh-CN/docs/Learn ...
- Java连接MySQL报出警告 WARN: Establishing SSL connection without server's identity verification is not recommended.
很多人使用JDBC连接MySQL时报出警告: WARN: Establishing SSL connection without server's identity verification is n ...
- linux 日常运维 目录
Linux防火墙:iptables Linux 抓包工具:tcpdump linux 查看磁盘读写:iotop linux 查看磁盘读写:iostat inux 查看网卡流量:sar linux 查看 ...
- python线程、协程、I/O多路复用
目录: 并发多线程 协程 I/O多路复用(未完成,待续) 一.并发多线程 1.线程简述: 一条流水线的执行过程是一个线程,一条流水线必须属于一个车间,一个车间的运行过程就是一个进程(一个进程内至少一个 ...
- 你不知道的JavaScript-2.词法作用域
考虑以下代码: function foo(a) { var b = a * 2; function bar(c) { console.log( a, b, c ); } bar( b * 3 ); } ...
- 高并发架构系列:MQ消息队列的12点核心原理总结
消息队列已经逐渐成为分布式应用场景.内部通信.以及秒杀等高并发业务场景的核心手段,它具有低耦合.可靠投递.广播.流量控制.最终一致性 等一系列功能. 无论是 RabbitMQ.RocketMQ.Act ...
- [ Python ] unittest demo
# -*- coding: utf-8 -*- import unittest class MyUT(unittest.TestCase): def test_1(self): print(" ...
- Bubble Sort (找规律)
通过模拟之后我们发现对于每一个位置上的数他都有一个规律,那就是先左移然后在右移.然后仔细发现可以知道,先右移的距离是前面比该数大的个数.右移就直接右移到目标位置了.然后用一个树状数组从左到右边扫边加就 ...