1.java.time.LocalDate
//构造一个表示当前日期的对象
static LocalDate now()
//构造一个表示给定日期的对象
static LocalDate of(int year, int month, int day)
int getYear()
int getMonthValue()
int getDayOfMonth()
//得到当前日期是星期几,作为一个DayOfWeek类对象返回
DayOfWeek getDayOfWeek()
//例如
DayOfWeek weekday = date.getDayOfWeek();
int value = weekday.getValue();
//生成当前日期之后或之前的日期
LocalDate plusDays(int n);
LocalDate minusDays(int n);
2. var
Java 10中,如果可以从变量的初始值推导出他们的类型,那么可以用关键字声明局部变量,而不需要制定起类型。
注意,var关键字只能用于方法中的局部变量。参数或是字段的类型必须声明。
3.关于参数null引用的问题
- 当不希望参数为null引用时,宽容型处理方法为将其转换为一个合理的非null值,例如
if(n == null) name = "unknown"; else name = n;
//或是
name = Objects.requireNonNullElse(n,"unknown");
- 严格性方法,直接拒绝null参数
Objects.requiewNonNull(n,"The name can not be null");
name = n;
//若n为null,会产生一个NullPointerException异常
4. inline问题
1.在c++中,通常在类外定义方法,例如
void Employee::raiseSalary(double byPercent){
}
如果在类内部定义方法,会被自动转换为内联(inline)方法。
2.在Java中,方法必须在类内部定义,是否转换为内联方法取决于java虚拟机,java虚拟机会将简短并且经常调用的方法转换为内联方法。
5.注意不要编写返回可变对象引用的访问器方法
例如
class Employee{
private Date hireDay;
public Date getHireDay(){
return hireDay;
}
}
Date对象是可变的,这就破坏了封装性。
应该改为
public Date getHireDay(){
return (Date) hireDay.clone();
}
6.final实例字段
1.final字段必须在构造对象时初始化。
2.final对于类型为基本类型或是String这种不可变类的字段尤其有用
3.对于可变的类,使用final修饰符可能会造成混乱。
final关键字只是表示该字段不会在引用另外一个不同的对象,但是该对象本身可以改变。
7.Java是按值传递的
- 方法不能修改基本数据类型的参数(即数值型或者布尔类型)
- 方法可以改变对象参数的状态
- 方法不能让一个对象参数引用一个新的对象
8.对象的初始化
1.按照在类声明中出现的顺序,执行所有字段的初始化方法和初始化块
2.执行构造器主体代码