Java之Default关键字的两种使用方式

 更新时间:2024年09月21日 09:33:06   作者:SnailMann  
Java关键字default主要有两种使用场景:一是在switch语句中作为默认执行的分支;二是在接口中定义默认方法,这是Java 8新增的特性,允许接口包含具体实现的方法,在switch中,当没有匹配的case时,执行default分支

Java关键字Default的两种使用方法

其实之前一直都没有关注过还有default这关键字的存在,最近重新回温《Java语言程序设计》这本书时,想总结总结常用的一些修饰符。偶然发现…嗯…是这样的.

两种使用方法:

据我观察,总的来说,default的用法不多,只有两种:

  • switch语句的时候使用default
  • 在定义接口的时候使用default来修饰具体的方法

第一种使用方法

代码:

		int day = 8;
		String dayString;
		switch (day) {
			case 1:	dayString = "Monday";
					break;
			case 2: dayString = "Tuesday";
					break;
			case 3: dayString = "Wednesday";
					break;
			case 4: dayString = "Thursday";
					break;
			case 5: dayString = "Friday";
					break;
			case 6: dayString = "Saturday";
					break;
			//如果case没有匹配的值,那么肯定是星期日
			default: dayString = "Sunday";
					 break;
		}
		System.out.println(dayString);

总结:

  • 使用比较简单,就是当case里的值与switch里的key没有匹配的时候,执行default里的方法。
  • 在这里的例子中就是key为8,所以key与所有的case的值都不匹配,所以输出星期天Sunday.

第二种使用方法

接口的定义IntefercaeDemo,定义一个接口,里面有两个具体的方法,和一个抽象方法

IntefercaeDemo .java

public interface IntefercaeDemo {

	//具体方法
	default void showDefault(){
		System.out.println("this is showDefault method");
	}
	static void showStatic(){
		System.out.println("this is showStatic method");
	}
	
	//没有实现的抽象方法
	void sayHi();
}
  • LearnDefault 实现IntefercaeDemo 接口。

LearnDefault .java

public class LearnDefault implements IntefercaeDemo{
	//实现抽象方法
	@Override
	public void sayHi() {
		System.out.println("this is sayHi mehtod");
	}
	
	public static void main(String[] args) {
		//接口中被static所修饰的具体方法
		IntefercaeDemo.showStatic();
		
		//将实现了IntefercaeDemo的类实例化
		LearnDefault learnDefault = new LearnDefault();
		//被Default所修饰的具体方法可以通过引用变量来调用
		learnDefault.showDefault();

	}
}

说明:

  • JDK1.8中为了加强接口的能力,使得接口可以存在具体的方法,前提是方法需要被default或static关键字所修饰。

总结:

  • default修饰的目的是让接口可以拥有具体的方法,让接口内部包含了一些默认的方法实现。
  • 被default修饰的方法是接口的默认方法。既只要实现该接口的类,都具有这么一个默认方法,默认方法也可以被重写。
  • 我们可以想象这么一个场景,既实现某个接口的类都具有某个同样的功能,如果像Java8以前的版本,那么每个实现类都需要写一段重复的代码去实现那个功能,显得没有必要。这就是存在的意义。

注意:

另外这里既然提到了接口的修饰符default,那么就要注意一点,如果一个类实现了两个接口(可以看做是“多继承”),这两个接口又同时都包含了一个名字相同的default方法,那么会发生什么情况?

在这样的情况下,编译器是会报错,得到一个编译器错误,因为编译器不知道应该在两个同名的default方法中选择哪一个,因此产生了二义性。

补充:容易混淆的地方

这里的关键字default不要跟平时我们在类中定义方法时,没有加任何访问修饰符时的(default)相混淆,它们的意义是不一样的。

public class Demo{
	//没有访问修饰符修饰,所以默认为(default)
	String name;
	void show(){}
}

这里的(default)指的是一种场景,既类中成员没有被访问修饰符修饰,所以属于(default)的情况,效果是(default)情况的成员只能在Demo类所在的包内被访问。

而本篇博文所说的default关键字是一个实实在在存在的关键字,是需要显式声明的,目前只有所说的两种用法。与(default)场景毫无关系

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Java使用贪心算法解决电台覆盖问题(示例详解)

    Java使用贪心算法解决电台覆盖问题(示例详解)

    贪心算法是指在对问题进行求解时,在每一步选择中都采取最好或最优的选择,从而导致结果理想化,下面通过本文介绍下Java使用贪心算法解决电台覆盖问题,需要的朋友可以参考下
    2022-04-04
  • Spring-boot 2.3.x源码基于Gradle编译过程详解

    Spring-boot 2.3.x源码基于Gradle编译过程详解

    这篇文章主要介绍了Spring-boot 2.3.x源码基于Gradle编译过程详解,本文通过实例图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • 浅谈自定义校验注解ConstraintValidator

    浅谈自定义校验注解ConstraintValidator

    鉴于通用性和普遍性,Spring框架提供了validator组件,通过一些校验器,可以对一些数据进行统一的完整性和有效性等校验,即简单又好用
    2021-06-06
  • Debian 7 和 Debian 8 用户安装 Java 8的方法

    Debian 7 和 Debian 8 用户安装 Java 8的方法

    Oracle Java 8 稳定版本近期已发布,有很多新的特征变化。其中,有功能的程序支持通过“Lambda项目 ”,收到了一些安全更新和界面改进上的bug修复,使得开发人员的工作更容易。
    2014-03-03
  • 你会用Java代码模拟高并发吗

    你会用Java代码模拟高并发吗

    这篇文章主要介绍了你会用Java代码模拟高并发吗,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • 详解springMVC容器加载源码分析

    详解springMVC容器加载源码分析

    这篇文章主要介绍了详解springMVC容器加载源码分析,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • Idea自定义方法注释模板的教程详解(去param括号、return全类名)

    Idea自定义方法注释模板的教程详解(去param括号、return全类名)

    这篇文章主要介绍了Idea自定义方法注释模板(去param括号、return全类名),本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • Java中递归、循环的优劣分析

    Java中递归、循环的优劣分析

    这篇文章主要给大家介绍了关于Java中递归、循环的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用Java具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-03-03
  • JavaWeb ServletConfig作用及原理分析讲解

    JavaWeb ServletConfig作用及原理分析讲解

    ServletConfig对象,叫Servlet配置对象。主要用于加载配置文件的初始化参数。我们知道一个Web应用里面可以有多个servlet,如果现在有一份数据需要传给所有的servlet使用,那么我们就可以使用ServletContext对象了
    2022-10-10
  • springboot基于Redis发布订阅集群下WebSocket的解决方案

    springboot基于Redis发布订阅集群下WebSocket的解决方案

    这篇文章主要介绍了springboot基于Redis发布订阅集群下WebSocket的解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01

最新评论