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

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

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

}

    内部类的方法可以访问它的外部类的实例变量,每个内部类对象都有自己外部类对象的引用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值