我可以使用关键字default声明类或成员吗?

时间:2013-03-09 14:19:52

标签: java keyword

我可以使用关键字默认声明一个类默认值吗?例如:

default class Test{

}

3 个答案:

答案 0 :(得分:3)

没有名为default的访问修饰符,如果没有为类或方法指定任何修饰符,则隐式地,它们默认为包私有。

但是,Java有default个关键字,用于switch case个语句。如果提供的选项在任何情况下都没有,并且如果您指定了默认行为,那么将使用它。

例如,

public class SwitchDemo {
    public static void main(String[] args) {

        int month = 8;
        String monthString;
        switch (month) {
            case 1:  monthString = "January";
                     break;
            case 2:  monthString = "February";
                     break;
            case 3:  monthString = "March";
                     break;
            case 4:  monthString = "April";
                     break;
            case 5:  monthString = "May";
                     break;
            case 6:  monthString = "June";
                     break;
            case 7:  monthString = "July";
                     break;
            case 8:  monthString = "August";
                     break;
            case 9:  monthString = "September";
                     break;
            case 10: monthString = "October";
                     break;
            case 11: monthString = "November";
                     break;
            case 12: monthString = "December";
                     break;
            default: monthString = "Invalid month";
                     break;
        }
        System.out.println(monthString);
    }
}

在这里,如果您提供了任何无效月份,那么它将落入默认部分。

答案 1 :(得分:2)

java 8有一个新功能,使用default关键字我们可以在接口中定义方法。

interface I {
   public default void show() {
     System.out.println("Hello");
   }
}

在Java 8 JLS-13.5.6. Interface Method Declarations

中描述
  

添加默认方法或将方法从abstract更改为default,不会破坏与预先存在的二进制文件的兼容性,但如果预先存在的二进制文件尝试调用该方法,则可能会导致IncompatibleClassChangeError。如果限定类型T是两个接口I和J的子类型,则会发生此错误,其中I和J都声明具有相同签名和结果的默认方法,并且I和J都不是另一个的子接口。 / p>

答案 2 :(得分:0)

声明"如果您没有为类或方法指定任何修饰符,则隐式地,它们默认为包私有"是完全错的。如果一个类是私有的,那么即使在同一个包中,该类也无法访问。但是,如果我们没有提及任何访问说明符,那么该类将被视为默认值,可以在包中访问。