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. 类是具有相同的属性和功能的事物的抽象的集合,在面向对象 ...
随机推荐
- Grunt Bower构建前端
Grunt + Bower—前端构建利器 目前比较流行的WEB开发的趋势是前后端分离.前端采用重量级的Javascript框架,比如Angular,Ember等,后端采用restful API的W ...
- hash 位运算 练习
hash 位运算 [以下代码仅做位运算的练习,算法本身不合理 php转译python] 从头到尾彻底解析Hash表算法_知识库_博客园 https://kb.cnblogs.com/page/18 ...
- makefile编写规则
cc = g++ -std=c++11 prom = calc deps = FtTest.h obj = FtTest.o newft.o LIBS = -lgtest_c11 $(prom): $ ...
- 可持久化Trie
---恢复内容开始--- HAOI 2019 DAY1 T1 我爆零了. 爆零的感觉很难受 原因竟然是我从没犯过的错误 审题不清.情绪低迷. 也许 也许 也许就是想让我知道我有多菜吧. 求前k大的区间 ...
- 1、js比较日期的大小
① html <div class="ptb10"><span>共享开始时间:</span><input type="text& ...
- μCOS-II移植 - 基于CortexM3
μCOS-II是一个经典的RTOS. 任务切换对于RTOS来说是最基本也是最核心的部分,除此之外还有任务调度算法. 先来看看基于stm32f107的任务切换代码: ;***************** ...
- java框架之Struts2(1)-简介及入门
简介 Struts2 是一个基于 MVC 设计模式的 Web 应用框架,它本质上相当于一个 servlet,在 MVC 设计模式中,Struts2 作为控制器 (Controller) 来建立模型与视 ...
- python基础(10)-匿名函数&内置函数
匿名函数 例子 返回两个数的和 def add(x, y): return x + y # 等价于 add = lambda x, y: x + y 返回字典中值最大的key dic = {'a': ...
- LDO选型注意事项
以前选择LDO时因为要求不高,只会考虑输入电压Vin,输出电压Vout以及最大输出电流Ioutmax,其他的参数基本不做考虑,后来发现,考虑的太不周到,现在做个笔记记录自己的一些心得. 1.考虑最大输 ...
- centos7.5图形界面与命令行界面转换
查看当前状态下的显示模式: # systemctl get-default 转换为图形界面: # systemctl set-default graphical.target 转换为命令行界面: # ...