@malloc

导航

Java核心技术阅读笔记

1、一个文件里只能有一个public类,且需与文件名相匹配,但可以有任一数目非public类。

2、访问器(get方法)和修改器(set方法),访问器不要返回可变对象。

class Employee
{
    private Date hireDay ;
    public Date getHireDayO
    {
        return hireDay ; / / Bad
    }
}
    Employee harry = . .
        Date d = harry . getHi reDayO ;
        double tenYearsInMilliSeconds = 10 * 365.25 * 24 * 60 * 60 * 1000 ;
        d . setTime ( d . getTime () - ( long ) tenYearsInMilliSeconds ) ;
//破坏了封装性,d和hireday指向同一个地址,导致d可以直接修改类的私有属性数据
//应该返回 return (Date)hireDay.clone(); // Ok
View Code

 3、数据域初始化顺序:初始化为默认值(0,false,null)->初始代码块->构造函数  (静态初始化块会在类第一次加载时初始化)

class Employee
{
    private static int nextld ;
    private int id ;
    private String name ;
    private double salary ;
// 初始代码块先初始化
{
    id = nextld;
    nextld + +;
}
public Employee ( double salary ){
this.salary=salary;
}
}
View Code

4、强制类型转换之前使用obj instanceof Class判断是否可进行类型转换,obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的对象,或者是其直接或间接子类,或者是其接口的实现类,结果result 都返回 true,否则返回false。

boolean result;
if (obj == null) {
  result = false;
} else {
  try {
      T temp = (T) obj; // checkcast
      result = true;
  } catch (ClassCastException e) {
      result = false;
  }
}
instanceof伪代码

 5、labmda类似匿名函数,自动实现函数式接口的抽象函数,因此要传入lambda表达式,需要提供函数式接口。只有一个抽象方法的接口都是函数式接口,最好还是加上@FunctionInterface,编译器会检测是否符合函数式接口规范。

public static void lambdaTest(int n,Runnable runnable){
    for(int i =0;i<n;i++){
        runnable.run();
    }
}
public static void main(String[] args){
    lambdaTest(10,()->{
        System.out.println("重复");
    });
}
View Code

 6、iterator remove()和set()方法,移除或修改next()或previous()返回的元素,依赖于迭代器上一步的状态。而add方法只依赖于位置,在迭代器位置之前插入。

 7、java -jar test.jar

  java -classpath test.jar com.test

  log4j.appender.File.File=/tmp/logs/log  /开头表示当前磁盘根目录 tmp/logs/log 表示项目根目录 与src、target等同级目录

posted on 2019-10-23 17:48  malloc+  阅读(119)  评论(0编辑  收藏  举报