oop概述
特别值得注意的是,以各地相继不能直接访问另一个兑现呢不得数据,也不能让其他对象直接访问自己内部的数据。
对象之间的所有通信都是通过方法调用完成的。
通过封装对象数据,最大限度提高可重用性,将少数据的依赖,必将程序调试时间降到最低。
类是构造对象的模板和蓝图,由类构造对象的过程成为类的实例。
封装给与对象黑盒的特征,这是提高重用性和可靠性的关键。
oop首先从设计类开始而不是从main方法开始
依赖user-a:如果一个类的方法操作另一个类的对象,我们就说这个类依赖于另一个类。
应该尽可能的将互相依赖的类减至最少。
如果累A不知道类B的存在,那么他就不会关心类B的任何改变!(这意味着类B的改变不会使类A产生任何bug)。
用软件工程术语来说,就是使类之间的耦合度最小!
聚合has-a:聚合关系意味着类A的对象包含类B的对象
继承is-a
用UML绘制描述类之间关系的类图。
类用矩形表示。
类之间的关系带有各种箭头表示。
Date类
他的对象描述一个时间点
一个对象变量并没有实际包含一个对象,而仅仅引用一个对象。
在java中必须使用clone方法获得对象的完整拷贝。
java苦衷的GregorianCalendar类(日历表示法)扩展类Calendar类这个类描述了日立的一般属性
java.util.GregorianCalendar
GregorianCalendar()构造一个日历对象,用来表示默认地区、默认时区的当前时间。
自己编写类
这里编写类所采用的风格是类的方法在前面,域在后面。
这种风格有利于促使人们更加关注接口的概念,并且削减对现实的注意。
隐式参数和显示参数
this是隐式参数
方法括号中的参数为显示参数
对数据的操作要用get取用set变
注意get方法中不能写返回一个对象的引用,要先克隆再返回这样才没有回话封装性
静态域
如果有N个对象,那么N个对象都共用一个静态域!
System.setOut可以修改static final out方法的流方式。
应为setOut是一种本地方法,本地方法可以跨java规定
Factory方法
静态方法还有一种常用的用途NumberFormat类的Factory长生不同格式对象(实例化返回对象)
对于析构与finalize方法
由于java有自动垃圾回收期,所以java不支持析构函数
可以为任何一个雷添加finalize方法。
其方法将在垃圾回收器清除对象之前被调用。
在实际应用中,不要使用finalize方法回收任何短缺的资源,这是因为很难知道这个方法什么时候才能调用。
推荐使用Runtime.addShutdownHook添加关闭钩
如果一个类定义了dispos这样的方法或者close这样的方法,那么当这个对象不在使用的时候一定要调用这个方法
包名
以英特网域名逆向方向定义
使用其他包中的公共类的时候需要使用包明加上类名
如java.until.Data
当连个包中都有同一个名字的类是可以这样使用
import java.util.*
import java.sql.*
import java.util.Data;
这样就能解决了。
还有就是如果连个包中的类都需要使用data方法!
如下java.util.Date deadline=new java.util.Date ()
java .sql.Date today=new java.sql.Date();
这样就能解决了!
java编译器可以查看其他文件的内部,只要告诉编译器文件在哪里就可以了!
静态导入
jdk5.0以后java能够导入静态语句和静态域了如
import static ng.System.*;
之后我们使用它的方法就不用加类名了。
另外还可以导入特定的方法和域import static ng.out;
这对代码清晰度不是很好,但是也有好的比如MATH和笨重常量都可以使用这个静态导入!sqrt(pow(x,2)+pow(y,2))比加上类名更清晰了
包package
访问权限
public 可以在所有包的所有类访问
private 只能被定义他们的类使用
什么都没有的是在同一个包中所有方法访问
文档注释
文档注释从以下几个特性抽取信息
包
公有类与接口
公有的和受保护(procected)的方法
公有和受保护的域
类的设计技巧
1.一定将数据设置为私有的
2.一定要对数据初始化
3.不要再累中使用过多的基本数据类型
4.不是所有的域都需要独立的域访问器和域更改器
5.使用标准格式进行类的定义
一定采用下面的顺序书写类
公有访问特性部分
包作用域访问特性
私有访问特性
在每一部分中应按下列方法列出;
实例方法
静态方法
实力域
静态域
6.将指责过多的类进行分解
7.类名和方法名要能够体现他们的职责。