亲宝软件园·资讯

展开

Java Grammar(三):修饰符

Vi的技术博客 人气:0
### 简介 修饰符是用于限定类型以及类型成员申明的一种符号,从修饰对象上可以分为类修饰符,方法修饰符,变量修饰符;从功能上可以划分为访问控制修饰符和非访问修饰符。访问修饰符控制访问权限,不同的访问修饰符有不同的权限范围,而非访问修饰符则是提供一些特有功能。 ![image-20190812210957757](http://viyoungblog.oss-cn-beijing.aliyuncs.com/2019-08-12-130958.png) 下面我们从功能的角度分别讲解修饰符 ### 访问修饰符 访问修饰符有四种:`public`,`private`,`protected`,`default`。这里需要注意,我们这里的`default`和非访问修饰符中的`default`可不是一个东西! 这里的`default`指的是默认,**什么也不写**,在同一包内可见,不使用任何修饰符。使用对象:**类、接口、变量、方法**。 `private`指的是在仅仅在类内可见,所以也就很好理解,`private`只能修饰**方法,变量**,而不能修饰类和接口(毕竟你只能类内访问,你修饰类谁能看得到呢?),修饰方法的时候,一般用于我们在重构代码的时候提取公用代码为**内部实现方法**,修饰变量的情景相比我们就经常见到了,由于Java的**封装**特性,我们在定义一个类的时候,经常会把该类的属性定义为`private`,通过`get`or`set`方法来访问这些变量。 而`public`在我们日常中使用的比较多,我们经常会把类声明为`public`,声明成`public`的**类,接口,变量,方法**可以被任何类访问,这里需要注意一个java文件中只能包含一个`public`的类,而且`main`方法必须用`public`修饰,否则无法被Java的解释器识别。 `protected`我们在日常的开发中使用不多,只能声明在**变量,方法,内部类**上,它主要的作用就是用来**保护子类**的。它的含义在于子类可以用它修饰的成员,其他的不可以,它相当于传递给子类的一种**继承**的东西。 - 基类的 `protected` 成员是包内可见的,并且**对子类可见**; - 若子类与基类不在同一包中,那么在子类中,子类实例**可以访问**其从**基类继承而来**的`protected`方法,而**不能访问基类实例**的`protected`方法。 ![image-20190812221038073](http://viyoungblog.oss-cn-beijing.aliyuncs.com/2019-08-12-141038.png) ⬆ 大概就是上图酱紫,凑合着看,画图功力贼差:) ### 非访问修饰符 #### default 这里的`default`是jdk 8中的新特性,指的是接口方法的默认实现,在JDK 8 之前接口的方法是不能有实现的,而JDK 8 后`default`修饰的方法可以在接口中进行默认的实现: ```java public interface Test { default void hello(){ System.out.println("Hello"); } } ``` 就像酱紫~ #### static static是面试的一个**热点**,static的意思是静态,可用于修饰变量和方法,切记一点,static是属于**类**的,而非是属于对象的,static关键字修饰的方法或者变量不需要依赖于对象来进行访问,只要类被加载了,就可以通过**类名**去进行访问。 而static关键字的基本作用就是:方便在没有创建对象的情况下来进行调用(方法/变量)。 这里需要注意,由于static修饰的方法和变量是属于类的,不需要依靠对象才能使用,所以他不能访问非static修饰的方法和变量,因为这些变量和方法是必须依托于对象才能访问!但是**非static的方法可以访问static的方法或变量**,因为当你创建对象的时候,类必定已经加载,所以可以访问的到。 这里需要注意一点:static不可修饰局部变量 #### final `final`关键字我们在日常中也会经常用到,通常用的最多的场景就是搭配`static`一起来使用去定义我们系统的常量: ```java public static final String AUTHOR = "viyoung" ``` 除了修饰变量,还可以用于修饰类和方法,被final修饰的类无法被继承,**被final修饰的方法可以被继承,但是无法进行修改**。 #### abstract `abstract`可以作用在类和方法上,当作用在类上时,说明这个类是一个抽象类,需要去继承扩展,无法直接实例化一个对象,当作用在方法上的时候,说明这个方法需要扩展,被`abstract`修饰的方法以分号结尾,没有实现,而且无法被`final`和`static`修饰(一个需要被继承且没有实现的方法为毛要用这俩修饰,不是自己打自己脸吗

加载全部内容

相关教程
猜你喜欢
用户评论