您的位置:首页 > 编程语言 > Java开发

JAVA SE中你可能不知道的知识点

2017-04-24 17:13 274 查看

一、你可以给数字添加下划线

例如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;
}

}


内部类的方法可以访问它的外部类的实例变量,每个内部类对象都有自己外部类对象的引用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: