【Java】final修饰不同的内容时不同含义以及return和exit的含义——扫盲篇

【Java】final修饰不同的内容时不同含义以及return和exit、dispose的含义——扫盲篇

在最近的学习中碰到了一些细节上的问题,于是看了其他相关的资料,总结出一些关于final修饰符的用法和return、exit在使用的时候应该如何去使用,更好的了解他们之间的区别,以便在使用的过程中更加得心应手
final关键字可以用来修饰类、方法、变量。各有不同。

final修饰符

A、修饰类(class)。
 1、该类不能被继承。 
 2、类中的方法不会被重写,因此默认都是final的。 
 3、用途:设计类时,如果该类不需要有子类,
 不必要被扩展,类的实现细节不允许被改变,那么就设计成final类
B、修饰方法(method)
 1、该方法可以被继承,但是不能被重写。 
 2、用途:一个类不允许子类重写该方法,则用final来修饰 
 3、好处:可以防止继承它的子类修改该方法的意义和实现;更为高效,
 编译器在遇到调用fianal方法转入内嵌机制,提高了执行效率。 
 4、注意:父类中的private成员方法不能被子类重写,因此,private方
 法默认是final型的(可以查看编译后的class文件)
 5.对于使用private修饰的方法,表示私有方法,只能是对象本身调用,
 那么子类在继承时是无法访问该方法的,所以子类无法重写该方法。
C、修饰变量(variable)
 1、用final修饰后变为常量。包括静态变量、实例变量和局部变量这三种。 
 2、特点:可以先声明,不给初值,这种叫做final空白。但是使用前必
 须被初始化。一旦被赋值,将不能再被改变。
 3.a.类Field:必须在静态初始化块中或声明该Field时指定初始值。
 b.实例Field:必须在非静态初始化块、声明该Field或构造器中指定初始值。
 c.局部Field:系统不会对局部变量进行初始化,局部变量必须由程序员显示
 初始化。因此使用final修饰局部变量时,既可以在定义时指定默认值, 也
 可以不指定默认值。
D、修饰参数(arguments)
 1、用final修饰参数时,可以读取该参数,但是不能对其作出修改。
E、抽象类(abstract class)
 1、抽象方法(abstract method):不含方法体的方法,它由继承它子类
 根据需求去实现,必须用abstract修饰。此外,该方法必须对子类可见,
 因此要加只能加public 或者 protected!。 
 2、抽象类:至少包含一个抽象方法的类(可以包含非抽象方法)。
 必须用abstract修饰。 
 3、特点:抽象类不能被实例化(也就是不能new对象);
 含有抽象方法的类必须声明为抽象类;一个类只有实现了抽象类
 中的所有方法才能被实例化,否则它依然是抽象类。
F、接口(interface)
 1、接口定义:抽象方法和常量值的集合(所有的方法都是抽象方法)。它是一种特殊的抽象类(会生成一个xxx.class文件,编译器会自动在interface关键字前加上abstract)。 
 2、特点: 
    a、接口里的常量默认都是public static final来修饰的
    (如果什么都不写,编译器会自动帮你写上)。 
    b、接口里的方法默认都是public abstract来修饰的(如果是什么都不写,
    编译器会自动帮你写上)。 
    c、可以用extends继承已有的接口。 
    d、一个类,可以用implements实现一个或多个接口中的所有
    方法(包括这个接口的父接口中的方法)。 
    e、一个抽象类,可以implements实现接口中的部分方法 
    f、一个类,可以extends一个父类的同时implements多个接口,
    但是extends关键字必须在implements关键字之前。
补充:

不可变类的意思是创建该类的实例后,该实例的Field是不可改变的。
创建自定义的不可变类,可遵循如下规则:

1. 使用private和final修饰符来修饰该类的Field
2. 提供参数构造器,用于根据传入参数来初始化类里的Field
3. 仅为该类的Field提供getter方法。

return和exit

	System.exit(status);这个方法是用来结束当前正在运行中的
	java虚拟机。如何status是非零参数,那么表示是非正常退出。
	1.	System.exit(0)是将你的整个虚拟机里的内容都停掉了 ,
	而dispose()只是关闭这个窗口,但是并没有停止整个
	application exit() 。无论如何,内存都释放了!也就是
	说连JVM都关闭了,内存里根本不可能还有什么东西
	2.	System.exit(0)是正常退出程序,而System.exit(1)或者
	说非0表示非正常退出程序
	3.	System.exit(status)不管status为何值都会退出程序。
	和return 相比有以下不同点:return是回到上一层,
	而System.exit(status)是回到最上层
	4.在一个if-else判断中,如果我们程序是按照我们预
	想的执行,到最后我们需要停止程序,那么我们使
	用System.exit(0),而System.exit(1)一般放在catch
	块中,当捕获到异常,需要停止程序,我们使用
	System.exit(1)。这个status=1是用来表示这个程序是
	非正常退出
正常退出与异常退出有什么区别?

public static void exit(int status)终止当前正在运行的 Java 虚拟机。参数用作状态 码;根据惯例,非 0 的状态码表示异常终止。 该方法调用 Runtime 类中的 exit 方法。该方法永远不会正常返回。
调用 System.exit(n) 实际上等效于调用:
Runtime.getRuntime().exit(n)
System.exit(0):正常退出
System.exit(1):异常退出
其实他们的效果都是一样的,程序都会退出,关键是退出之后返回的不一样,看该程序外面怎么用了,如果不用返回结果的话,其实效果是一样的

java中的return
return语句作为一个无条件的分支,无需判断条件即可发生。return语句主要
有两个用途:一方面用来表示一个方法返回的值(假定没有void返回值),另一
方面是指它导致该方法退出,并返回那个值。根据方法的定义,每一个方法都
有返回类型,该类型可以是基本类型,也可以是对象类型,同时每个方法都必
须有个结束标志,因此,return起到了这个作用。在返回类型为void的方法里
面,有个隐含的return语句,因此,在void方法里面可以省略不写。
return和System.exit(0)在trycatch中
	在try或catch中的return语句会将它的返回值压入栈内,然后执行
	finally语句,当finally执行完成后,若finally语句里有return语
	句,则执行return语句并结束。若finally没有return语句,则返回
	被保存的栈里的return语句,再执行。然而,在压栈时候,要注意压入栈
	内的是什么东西,是值本身还是引用,若是引用则引用的值会改变,若
	是变量值,则不会改变。

结论: 如果try中碰到了return语句,那么会去执行finally语句,finally中
没有return语句,执行完finally中的代码后会执行try的return语句。
如果finally中有return语句的话,则直接使用finally的return返回
值,不再执行try中的return。但是如果try或者catch语句中遇到了
System.exit(0)则finally不会执行,因为整个虚拟机已经退出了。
另,对于方法中的返回值类型需要与try和catch的return值类型对
应,缺一不可。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值