一、你可以给数字添加下划线
例如1_000_000(或者0b1111_0100_0010_0100_0000)表示100万。下划线阅读起来更容易,JAVA编译器会直接删除他们
二、带标签的break声明
break声明只是跳出直接封闭循环或者switch。如果你想跳到另外一个封闭声明的结束,则使用带标签的break声明。在应该退出的声明加上标签,像这样,给break提供标签:
public static void main(String[] args) {
outer:
for(Integer i=1;i<10;i++){
for(Integer j=1;j<10;j++){
System.out.println(i+"+"+j);
if(j.equals(5))
break outer;
new Runnable() {
public void run() {
try {
Thread.sleep(500);
} catch (Exception e) {
// TODO: handle exception
}
}
}.run();
}
}
}
甚至可以是声明块
chunk:{
......
if(...)
break chunk;
......
}
三、命令行参数
所有java程序的main方法都有一个字符串数组的参数:
public static void main(String[] args)
当程序执行时,在命令行中指定的参数就赋值给args
例如:
public class Test {
public static void main(String[] args) {
for(String arg:args){
if(arg.equals("-h")){
System.out.println("hello");
}
}
}
}
如果程序以如下方式调用
java Test -h
那么 args[0] 为"-h"
四、Accessor(访问器)和Mutator(更改器)方法
如果一个方法改变了调用它的对象,我们就说这是个更改器方法。如果方法不改变调用自己的对象,他就是访问器方法。LocalDate类的plusDays方法就是访问器方法。
大部分时候,共享对象是高效和方便的,但是你必须意识到,通过任何一个引用,都可能修改共享对象,安全的并发访问成了严重的问题。解决这种问题的一种方法就是只提供访问器方法,使得对象都是不可变的。
五、工厂方法
静态方法:给不属于你的类提供额外功能。
工程方法:静态方法的一种常见的使用,也就是返回一个类的新实例的静态方法。
为什么不用构造函数代替?区分两个构造函数的唯一方法是他们的参数类型。因此,你不能有两个无参数的构造函数。工厂方法也能返回共享对象,无须每次构建一个新对象。例如,调用Collections.emptyList()返回一个共享的不可修改的空列表。
六、内部类
/*
* 除了编译时常量外,内部类不能声明静态成员。如果内部类有静态成员,
* 那关于"static."的含义将会是模糊不清的。
* 它是意味着虚拟机中只有一个实例,还是意味着每个外部对象只有一个实例?
* Java语言的设计者决定不解决这样的问题。
*/
public class NetWork {
private List<Member> members;
public class Member{
private String name;
private ArrayList<Member> friends;
public Member(String name) {
super();
this.name = name;
this.friends = new ArrayList<>();
}
public void leave(){
NetWork.this.members.remove(this);
}
}
public Member enroll(String name){
Member newMember=new Member(name);
members.add(newMember);
return newMember;
}
}
内部类的方法可以访问它的外部类的实例变量,每个内部类对象都有自己外部类对象的引用。