编译单元(翻译单元)

每个编译单元都是.java结尾的, 一个编译单元只有一个public类, 类名必须与文件名一致, 包括大小写, 这个编译单元里还有其他类,不过都不是public的, 是public类的支持类

编译单元经过编译会生成.class文件. 文件名对应编译单元中类的类名,可运行的程序是由一组.class文件过程, 这些文件打包就构成了jar包, java解释器的作用就是查找, 加载, 编译这些.class文件

类库

类库是一组类文件, 每个文件都有一个public类和任意数量的非public类, 要想把这些public类集中起来,就需要用package关键字语句,它必须位于代码的第一行, 它表示这个类是util类库的一个编译单元, 任何人想使用这个类,就必须import这个包, 或者这个包中的具体的这个类. 注意 文件名全都小写
package跟import将单一的全局命名空间分隔开

  1. package util

独一无二的包名

包名的.会变成对应的/或\ ,解释器通过类加载器 查找.class文件 CLASSPATH+文件名,
假如导入的两个包中用重复的类名,在使用的时候, 机器也不知道你要具体选哪个了,就会强制要求你写出类的全名
eg : java.util.Vector v = new java.util.Vector();

在创建子类的时候回调用父类的默认构造器来初始化(没有默认构造器,需要制定构造器),但是并不会创造父类对象

java里创建对象时通过new(构造器方法private就不能用new了,可能会有static的方法在类的内部调用私有的构造器) ,而不是构造器, 也就是在new的时候已经开辟了内存空间, new之后构造器才进行它的工作,初始化属性方法什么的, 也就是说构造器的作用不是创建新的对象,而是初始化信息(属性和方法)的

所以创建子类的对象可以理解为:
new开辟一个新的内存空间 也就是创建一个对象 -> 父类构造器来初始化这个对象的属性(因为有继承关系在里面,不初始化父类属性,怎么谈得上继承呢) -> 接着子类构造器初始化

单例设计模式

  1. class Soup2 {
  2. private Soup2() {}
  3. private static Soup2 ps1 = new Soup2(); // [2]
  4. public static Soup2 access() {
  5. return ps1;
  6. }
  7. public void f() {}
  8. }

这种就是单例设计模式, 它自身的构造函数是私有的,无法访问, 想创建该类的对象只能通过静态方法soup2(),而[2]只能创建一次对象(类加载的时候创建的),所以称之为单例设计模式