欢迎光临,了解微信小程序开发,就上易用通!

【后端】java基础(5.4)java高级基础之java的修饰符——非访问控制符

发布:2018-01-24 15:52浏览: 来源:网络 作者:tianshu

上章讲了访问控制符,这章开始讲非访问控制符。
java中的非访问修饰符的作用各不一样,据我所知常用的有六种:

  • static
  • final
  • abstract
  • synchronized
  • volatile
  • transient

今天我们只讲前三种,后面三种等我们讲到线程的时候再回过头来讲。
首先还是通过一张经典的表我们来观察它们可修饰的内容:

非访问修饰符 基本含义 方法 成员变量 局部变量
static 静态的/全局的 √(只可修饰内部类) ×
final 最终的
abstract 抽象的 ×

首先我们来说说static:
被static修饰的方法我们称为静态方法或全局方法,被static修饰的成员变量和成员方法独立于该类的任何对象,只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引用任何对象。简单来说,我们可以把被static修饰的方法当做是在程序启动的时候就被创建了,在调用的时候不需要去实例化对象:
我们先创建一个类,在类里写一个static方法和一个普通方法


  1. public class Demo {
  2. public static String test(){
  3. return "测试一下";
  4. }
  5. public String test1(){
  6. return "测试一下";
  7. }
  8. }

再创建一个类,不用实例化对象的方法直接去调用:


  1. public static void main(String[] args) {
  2. String demo = Demo.test();
  3. System.out.println(demo);
  4. }

我们在用快捷键的时候也会发现,只能调用static方法test,不能调用普通方法test1 【后端】java基础(5.4)java高级基础之java的修饰符——非访问控制符(图1) 当然,处理外部类,别的被static修饰的方法,类,变量,都具有这种不通过实例化对象直接调用的特性,那么什么是外部类,内部类呢: 【后端】java基础(5.4)java高级基础之java的修饰符——非访问控制符(图2) 如图,我们的demo就是外部类,demo1急速内部类。 至于什么是局部变量: 【后端】java基础(5.4)java高级基础之java的修饰符——非访问控制符(图3) 图中,我们的a便是成员变量,又叫全局变量,b就是局部变量了,全局变量是在整个类中,所有的方法都可以使用,而局部变量则只有这样一个方法可以使用

再说final: final翻译过来是最终的意思,被final修饰的内容是无法改变的,因此我们一般用来修饰常量。

  • final类不能被继承,没有子类,final类中的方法默认是final的。
  • final方法不能被子类的方法覆盖,但可以被继承。
  • final成员变量表示常量,只能被赋值一次,赋值后值不再改变。
  • final不能用于修饰构造方法。

最后来说说abstract: abstract翻译过来是抽象的,那么我们用来修饰的类叫做抽象类,修饰的方法叫做抽象方法

  • abstract类不能实例化
  • abstract类不能有具体类(有方法体的类),普通类不能有abstract方法
  • abstract类的子类必须重写父类中所有的abstract方法。
  • 仅当abstract类的子类实现其父类的所有abstract方法时,才能实例化abstract类的子类。
  • 如果abstract类的子类没有实现其父类的所有abstract方法,该子类也是abstract类
  • abstract关键字不能应用于static、private 或final方法,因为这些方法不能被重写,因此,不能在子类中实现
  • final类的方法都不能是abstract,因为final类不能有子类

就拿最后一条举例子: 我们先写一个抽象类并且写一个抽象方法:


  1. public abstract class Demo {
  2. public abstract String test();
  3. }

然后,当我们写一个类去继承它的时候: 【后端】java基础(5.4)java高级基础之java的修饰符——非访问控制符(图4) 这里报了错,我们点开错误详情可以看到它给了我们两种方法,一种是重写类里面的方法,另一种是把本类也设置为abstract类 【后端】java基础(5.4)java高级基础之java的修饰符——非访问控制符(图5) 我们试试第一种:


  1. public class Test extends Demo {
  2. @Override
  3. public String test() {
  4. // TODO Auto-generated method stub
  5. return null;
  6. }
  7. }

第二种:


  1. public abstract class Test extends Demo {
  2.  
  3. }

另外情况大家可以自己去做做实验,在这就不多讲了。





免责声明:本站所有文章和图片均来自用户分享和网络收集,文章和图片版权归原作者及原出处所有,仅供学习与参考,请勿用于商业用途,如果损害了您的权利,请联系网站客服处理。