Java核心技术第4章笔记

    如果有两个类 Employee 和 EmployeeTest 分别在Employee.java和EmployeeTest.java(其中有main方法)中定义, EmployeeTest 依赖于 Employee ,则要编译运行有两种方法:

    (1)使用通配符调用Java编译器: java Employee*.java ,所有与通配符匹配的源文件都会被编译为类文件。

    (2)直接编译EmployeeTest.java: java EmployeeTest.java ,Java编译器发现EmployeeTest.java使用了 Employee 类时会查找名为Employee.class的文件,如果没有找到就会搜索Employee.java进行编译。如果Employee.class文件存在,但是Employee.java比它更新,也会重新编译这个文件。

    Employee.java:

public Employee(String n, double s, int year, int month, int day) {
    name = n;
    salary = s;
    LocalDate hireDay = LocalDate.of(year, month, day);
}

    这种方式与传入 LocalDate 类型参数相比哪种更好?

    实例方法都会获得一个隐式参数,这个参数就是调用方法的对象的引用,在方法中使用this关键字可以获取这个引用参数,在方法内会在实例方法调用和域前自动添加this引用。

    是否将某个方法设置为内联方法是Java虚拟机的任务,即时编译器会监视调用那些简洁、经常被调用、没有被重载以及可优化的方法。

    不要编写返回引用可变对象的访问器方法,如需返回一个可变对象的引用,应该首先对它进行克隆(clone)。

    实例方法可以访问所属类的所有对象的私有数据。

     final 修饰符大都应用于基本类型域或不可变类的域(如果类中的每个方法都不会改变对象,这种类就是不可变类,String类就是一个不变类)。

    静态变量使用的比较少,静态常量用的比较多。最好不要将域设计为public,但公有常量(即final域)却没问题。

    两种情况使用静态方法:

    (1)方法不需要访问对象状态,所需参数都是显式参数。

    (2)方法只需要访问类的静态域。

    使用静态工厂方法而不是构造器创建对象的两种情况:

    (1)构造器的名字必须与类名相同,但是希望使用更有意义的不同方法名创建对象。

    (2)构造器无法改变所构造的对象类型,但静态工厂方法可以返回不同的类型,如所构造类型的子类对象。

    每一个类都可以有一个main方法,这是一个常用于对类进行单元测试的技巧。

    按值调用(call by value)表示方法接收的是调用者提供的值,按引用调用(call by reference)表示方法接收的是调用者提供的变量地址。Java使用按值调用,对按引用调用的反例:

public static void swap(Employee x, Employee y) {
    Employee temp = x;
    x = y;
    y = temp;
}

    初始化域时可以调用方法。

    域初始化顺序:

    (1)初始化为默认值(0、false或null)。

    (2)按照声明的顺序,依次执行所有域初始化语句和初始化块。

    (3)如果构造器第一行调用了第二个构造器,则执行第二个构造器主体。

    (4)执行构造器的主体。

    从编译器的角度看,嵌套的包之间没有任何关系。

    编译器在编译源文件时不检查目录结构,如果它不依赖于其他包,就不会出现编译错误。但最终程序无法运行,除非将所有文件移动到正确的位置上。如果包与目录不匹配,虚拟机就找到类。

    类路径是所有包含类文件的路径的集合,可以包含目录或jar文件的路径,

原文地址:https://www.cnblogs.com/cbkun/p/11101577.html