概述
1 oop 面向对象,在OOP中,不必关心对象的具体实现,只要能够满足用户的需求即可
2 类(class)是构造对象的模板或蓝图
3 封装是将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式,程序仅通过对象的方法与对象数据进行交互
4 Object是所有类的基类
5 对象的三个特性 : 对象的行为,对象的状态,对象标识
6 类之间的关系 依赖 (a 使用 b) 聚合(a 含有 b) 继承(a 是一个 b) ,应该尽可能地将相互依赖的类减至最少(解耦)
预定义类
1 一定要认识到:一个对象变量并没有实际包含一个对象,而仅仅引用一个对象
2 所有的Java对象都存储在堆中。当一个对象包含另一个对象变量时,这个变量依然包含着指向另一个堆对象的指针
3 如果要拷贝对象,在Java中,必须使用clone方法获得对象的完整拷贝
自定义类
1 在一个源文件中,只能有一个公有类,但可以有任意数目的非公有类
2 编译一个文件的时候 会寻找 导入的类字节码文件,如果没有 就会自动查找java文件进行编译, 可以认为java编译器内置了 make
3 构造器与其他的方法有一个重要的不同。构造器总是伴随着new操作符的执行被调用
4 非静态方法的第一个参数是隐式参数,是调用方法的实例对象,用this可以表示,更加清晰
5 注意不要编写返回引用可变对象的访问器方法,应该返回该对象的 克隆 不然无法保证 封装的数据被更改
6 一个方法可以访问所属类的所有对象的私有数据 (A实例的方法 可以修改 B实例的私有数据)
7 如果将类数据定义为final 构造对象的时候必须初始化该数据 如每个人的名字
8 如果对类对象定义final,意味着该变量不能指向新的类对象,但类内部的数据可以更改
9 static 静态数据 所有类对象共享一个 ,静态常量用的更多一些 static final
10 final 数据可以声明为public 没什么影响
11 static方法 可以看做没有 this隐式参数的方法
12 static方法 常用于 工厂方法 ?
13 所有类都可以有main方法用于单元测试
14 Java的方法 都是传值调用,所以 对于传入的对象引用 可以更改其内部数据,而且一个方法不能让对象参数引用一个新的对象。
对象构造
1 Java构造器可以重载
2 构造器中如果没有显示初始化类数据,会被默认初始化为 0 false null (这个习惯不好)
3 如果类没有构造器,会自动创建一个无参构造器
4 可以在类定义中,直接将一个值赋给任何域,在构造器之前执行
class A{
private String name = "liuhaifeng";
private String name = assignName(); //可以调用方法初始化数据,在构造器执行之前
private String assignName(){...}
}
5 在构造器中 可以用this 调用 另一个构造器
6 初始化数据还能用第三种方式,即 初始化块,首先运行初始化块,再运行构造器
所以顺序是:
初始化为0,false,null
按照定义顺序执行初始化块 或者 数据初始化语句
构造器初始化
class A{
...
{
name = "xxx"
}
}
7 对于静态数据,使用初始化语句 或者 静态块 对其进行初始化,在类第一次加载的时候,将会进行静态域的初始化
顺序为 :
初始化为0,false,null
按照定义顺序执行静态初始化块 或者 数据初始化语句
8 可以为任何一个类添加finalize方法。finalize方法将在垃圾回收器清除对象之前调用(当某些对象使用了除类之外的其他资源需要回收的时候)
但如果资源短缺 就不要使用,因为不知道什么时候调用该方法
包
1 标准的Java包具有一个层次结构,使用包的主要原因是确保类名的唯一性
2 从编译器的角度来看,嵌套的包之间没有任何关系 如 java.util 和 java.util.jar
3 一个类可以使用所属包中的所有类,以及其他包中的公有类
4 如果没有指定public或private,这个部分(类、方法或变量)可以被同一个包中的所有方法访问
5 要想将一个类放入包中,就必须将包的名字放在源文件的开头,包中定义类的代码 package A;
6 如果没有在源文件中放置package语句,这个源文件中的类就被放置在一个默认包
注释
1 使用javadoc 为程序生成注释
2 每个/* . . . /文档注释在标记之后紧跟着自由格式文本
3 在自由格式文本中,可以使用HTML修饰符,例如,用于强调的…、用于着重强调的…以及包含图像的等
4 方法注释
@param @return @throws
5 通用注释
@author @version @since @see
@see com.xx.xx#raiseSalary()..
@see <a href="...">..</a>
@see "text"
可以添加一个链接