1、一个文件里只能有一个public类,且需与文件名相匹配,但可以有任一数目非public类。
2、访问器(get方法)和修改器(set方法),访问器不要返回可变对象。
classEmployee
{privateDate hireDay ;publicDate 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)->初始代码块->构造函数 (静态初始化块会在类第一次加载时初始化)
classEmployee
{private static intnextld ;private intid ;privateString name ;private doublesalary ;//初始代码块先初始化
{
id=nextld;
nextld+ +;
}public Employee ( doublesalary ){this.salary=salary;
}
}
View Code
4、强制类型转换之前使用objinstanceof Class判断是否可进行类型转换,obj 为一个对象,Class 表示一个类或者一个接口,当 obj 为 Class 的对象,或者是其直接或间接子类,或者是其接口的实现类,结果result 都返回 true,否则返回false。
booleanresult;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(intn,Runnable runnable){for(int i =0;i
runnable.run();
}
}public static voidmain(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等同级目录