我可以使用关键字default声明一个类默认值吗?例如:
default class Test{
}
没有称为 as 的访问修饰符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);
}
}
在这里,如果您给出了任何无效的月份,那么它将属于默认部分。
java 8 有一个新特性,使用 default 关键字我们可以在接口中定义方法。
interface I {
public default void show() {
System.out.println("Hello");
}
}
在 Java 8 JLS-13.5.6 中描述。接口方法声明
添加默认方法或将方法从抽象更改为默认方法不会破坏与预先存在的二进制文件的兼容性,但如果预先存在的二进制文件尝试调用该方法,则可能会导致 IncompatibleClassChangeError。如果限定类型 T 是两个接口 I 和 J 的子类型,其中 I 和 J 都声明具有相同签名和结果的默认方法,并且 I 和 J 都不是另一个的子接口,则会发生此错误。
“如果你没有为类或方法指定任何修饰符,隐含地,它们默认为包私有”这句话是完全错误的。如果一个类是私有的,那么即使在同一个包中,该类也无权访问。但是,如果我们不提及任何访问说明符,则该类将被视为在包内具有访问权限的默认类。