#第四章 对象和类
###类之间的关系 最常见的三种关系
- 依赖("uses-a") Order依赖Account类看信息
- 聚合("has-a") Order包含多个Item
- 继承("is-a")
知识点:所有Java对象都存在堆中。
GregorianCalendar类所包含的方法要比Date类多得多。
public避免标记实例域,public数据域允许程序中的任何方法对其进行读取和修改,这破坏了封装。强烈建议用private。
- 构造器和类同名
- 每个类中有一个以上的构造器
- 构造器的参数可以有0个,1个或多个参数
- 构造器没有返回值
- 构造器总是伴随着new操作一起调用
如果需要返回一个可变对象的引用,应该先对它进行克隆。
静态方法:
- 一个方法不需要访问对象状态,其所需参数都是显示参数
- 一个方法只需要访问类中的静态域
静态代码块是在类被加载时被创建,非静态代码块是对象被创建时被加载的,不创建不会执行该类的非静态代码块。
·
public class TestA {
public static void main(String[] args) {
B b=null;
b=new B();
}
}
class B{
public static int numB=1;
static{
System.out.println("static block: "+numB);
}
{
System.out.println("block: "+numB);
}
public B(){
System.out.println("no parameter constructor");
}
public B(String string){
System.out.println(" str parameter constructor");
}
}
· 结果:
· public class TestA {
public static int numB=1;
static{
System.out.println("static block: "+numB);
}
{
System.out.println("block: "+numB);
}
public TestA(){
System.out.println("no parameter constructor");
}
public TestA(String string){
System.out.println(" str parameter constructor");
}
public static void main(String[] args) {
TestA a=null;
System.out.println("1111111111111");
a =new TestA();
}
}
·
结果:
类的导入
- java.util.Date today=new java.util.Date()
- impory java.uril.*;
如果一个类要使用2个相同的Date 则选择第一种
java.util.Date deadline=new java.util.Date();
java.sql.Date today =new java.sql.Date();
import 语句不仅可以导入类,还增加了导入静态方法和静态域的功能。
classpath
(1).何时需要使用-classpath:当你要编译或执行的类引用了其它的类,但被引用类的.class文件不在当前目录下时,就需要通过-classpath来引入类
(2).何时需要指定路径:当你要编译的类所在的目录和你执行javac命令的目录不是同一个目录时,就需要指定源文件的路径(CLASSPATH是用来指定.class路径的,不是用来指定.java文件的路径的)
类的设计技巧
- 一定要保证数据私有。
- 一定要对数据初始化。
- 不要在类中使用过多的基本类型。
- 不是所有的域都需要独立的域访问器和域更改器。
- 将职责过多的类进行分解。
- 类名和方法名要能够体现它们的职责。
public:public表明该数据成员、成员函数是对所有用户开放的,所有用户都可以直接进行调用
private:private表示私有,私有的意思就是除了class自己之外,任何人都不可以直接使用,私有财产神圣不可侵犯嘛,即便是子女,朋友,都不可以使用。
protected:protected对于子女、朋友来说,就是public的,可以自由使用,没有任何限制,而对于其他的外部class,protected就变成private。