Java-修饰符详解

196 阅读4分钟

java中的修饰符分为类修饰符,变量修饰符,方法修饰符。

类修饰符:

  1. public : public 即公共类。

  2. package : 默认缺省为包修饰符,本包可见。

  3. abstract :凡是用 abstract 修饰符修饰的类,被称为抽象类。含有一个或者多个抽象方法的类必须声明为抽象类,抽象类无法实例化。

  4. final :当一个类不可能有子类时可用修饰符 final 把它说明为最终类。

变量修饰符:

  1. public :用 public 修饰的变量可以被所有其它类所引用。

  2. private : 用 private 修饰的成员变量 ( 域 ) 只能被该类自身所访问,而不能被任何其它类 ( 包括子类 ) 所引用。(不能跨类)

  3. protected :用 protected 修饰的成员变量可以被三种类所引用:(不能跨包)

 ①该类自身;
 ②与它在同一个包中的其它类;
 ③在其它包中的该类的子类。
使用修饰符 protected 的主要作用是允许其它包中它的子类来访问父类的特定属性。
  1. package :默认访问权限,包访问权限。

  2. static :用 static 修饰的成员变量仅属于类的变量,而不属于任何一个具体的对象,静态成员变量的值是保存在类的内存区域的公共存储单元,而不是保存在某一个对象的内存区间。 任何一个类的对象访问它时取到的都是相同的数据;任何一个类的对象修改它时 , 也都是对同一个内存单元进行操作。

  3. final :最终域修饰符 final 是用来定义符号常量的。一个类的final成员变量,初始化后不可被修改。

  4. transient :暂时性域修饰符 transient 用来定义一个暂时性变量。序列化中用该修饰符修饰的变量将不被序列化。

方法修饰符:public, private, protected同变量,默认包访问权限。

  1. abstract :用修饰符 abstract 修饰的方法称为抽象方法。抽象方法没有方法体,需要子类中实现具体操作,常用于多态。

  2. static :用修饰符 static 修饰的方法称为静态方法。静态方法是属于整个类的类方法;而不使用 static 修饰、限定的方法是属于某个具体类对象的方法。 由于 static 方法是属于整个类的,所以它不能操纵和处理属于某个对象的成员变量,而只能处理属于整个类的成员变量,即 static 方法只能处理 static 的域。

  3. final :用修饰符 final 修饰的方法称为最终方法。最终方法是功能和内部语句不能更改的方法,即最终方法不能重载。 这样,就固定了这个方法所具有的功能和操作,防止当前类的子类对父类关键方法的错误定义,保证了程序的安全性和正确性。 所有被 private 修饰符限定为私有的方法,以及所有包含在 final 类 ( 最终类 ) 中的方法,都被认为是最终方法。

  4. synchronized :当调用synchronized方法(或代码块)时,对当前对象加锁。该修饰符主要用于多线程共存的程序中的协调和同步。

  5. default关键字作用 default 是 Java8 新增的一个关键字,该关键字使用在接口当中的一个方法之前,被default声明的方法称为默认方法,该方法可以在接口中给出具体实现。从而使得该接口的实现类默认继承该方法,无需重新实现。

  6. native关键字作用 java源码中的native方法是不能直接在jdk中看到的,因为jdk不是开源的,要看到的话需要sun授权才行,现在只有openjdk是被sun公司授权,所以要查看的话,下载完整的OpenJDK源码包(且它的代码不是Java代码)

  • 为了使用底层的主机平台的某个特性,而这个特性不能通过JAVA API访问
  • 为了访问一个老的系统或者使用一个已有的库,而这个系统或这个库不是用JAVA编写的
  • 为了加快程序的性能,而将一段时间敏感的代码作为本地方法实现。

native关键字

Java不是完美的,Java的不足除了体现在运行速度上要比传统的C++慢许多之外,Java无法直接访问到操作系统底层(如系统硬件等), 为此Java使用native方法来扩展Java程序的功能。    可以将native方法比作Java程序同C程序的接口,其实现步骤:   

  1. 在Java中声明native()方法,然后编译;  

  2. 用javah产生一个.h文件;   

  3. 写一个.cpp文件实现native导出方法,其中需要包含第二步产生的.h文件(注意其中又包含了JDK带的jni.h文件);   

  4. 将第三步的.cpp文件编译成动态链接库文件;   

  5. 在Java中用System.loadLibrary()方法加载第四步产生的动态链接库文件,这个native()方法就可以在Java中被访问了。