现在的位置: 首页 > 综合 > 正文

Java的修饰符及访问权限

2019年01月15日 ⁄ 综合 ⁄ 共 2073字 ⁄ 字号 评论关闭

Java中的访问权限有public,private,protected默认的包访问权限,如果类中的属性方法没有显示的指明访问权限,则具有包访问权限,我喜欢称它为packeged权限,很多人也称它为friendly访问权限,而packaged和friendly这两个关键字在实际中都是不存在的。

访问权限的等级最大到最小依次是:public>protected>包访问权限(无关键字)>private

对于类的访问权限只能是:public和包访问权限(但内部类可以是private或protected的);对于类中的成员的访问权限可以是上述的四种。下面是各种访问权限的作用。 
 

1.包的作用--解决类名冲突,类似于文件系统的目录系统。
(1)使用包名而编译时没有指定包名时,会出错
(2)包名对应一个文件目录名,没有生成目录时,会出错,错误信息如下:

(3)引入包
引入类 import java.io.File
引入整个包  import java.io.* ,导入所有类时java编译器需要额外内存来跟踪包中类信息
在同一个包中的类可以相互引用,无需import语句
java的lang包自动导入,自己类要手动导入.

2.类的说明符
(1)类的访问说明符
public:public类的名称必须完全与含有该编译单元的文件名相匹配,包括大小写
default(不加访问说明符时)
(2)类的其它修饰符
final:最终类,无法派生子类.
abstractabstract修饰类,会使这个类成为一个抽象类,这个类将不能生成对象实例,但可以做为对象变量声明的类型,也就是编译时类型,抽象类就像当于一类的半成品,需要子类继承并覆盖其中的抽象方法
(3)类名没有加说明符时为缺省类,不是public类型的,在包外无法访问。缺省类只能在同一个包中被访问。


3.方法说明符
(1)说明符
方法的访问说明符
 public
 protected
 default(不加访问说明符时)

 private

方法的其它修饰符

 static: 该方法属于类而不属于类实例
 final: 修饰方法表示方法不能被改变,也就是不能被重写
 abstract: 该方法为抽象方法必须被子类重写
 native:该方法由其他编程语言实现
 synchronized: 

(2)同一个类中 所有方法均可调用

(3) 同一个包中  不可以访问private方法即使是继承的类也不可以 但是可以访问default方法.

(4) 不同的包中 继承的类可以访问public和protected方法,但是default和private方法均不可以访

(5) 不同的包也不存在继承关系时,除了公有public方法外,均不可以访问。


访问权限总结见下图所示:


(6)final方法
为了确保某个函数的行为在继承过程中保持不变,并且不能被覆盖(overridden),可以使用final方法。
为了效率上的考虑,将方法声明为final,让编译器对此方法的调用进行优化。要注意的是:编译器会自行对final方法进行判断,并决定是否进行优化。通常在方法的体积很小,而我们确实不希望它被覆盖时,才将它声明为final。
class中所有的private和static方法自然就是final。
4.抽象方法和抽象类
a.在类中没有方法体的方法,就是抽象方法。b.含有抽象方法的类,即为抽象类。
c.如果一个子类没有实现抽象基类中所有的抽象方法,则子类也成为一个抽象类。
d.我们可以将一个没有任何抽象方法的类声明为abstract,避免由这个类产生任何的对象。
e.构造方法、静态方法、私有方法、final方法不能被声明为抽象的方法。
常见错误:
a.定义了抽象方法而没有声明为抽象类.
b.抽象类无法实例化对象

c.子类继承了父类的抽象方法而没有重载抽象方法时出错


5.static代码块

static代码块也叫静态代码块,是在类中独立于类成员的static语句块,可以有多个,位置可以随便放,它不在任何的方法体内,JVM加载类时会执行这些静态的代码块,如果static代码块有多个,JVM将按照它们在类中出现的先后顺序依次执行它们,每个代码块只会被执行一次。

6.JNI   
a.JNI(Java Native Interface),它允许Java虚拟机(JVM)内部运行的Java代码能够与用其它编程语言(如C、C++、汇编语言)编写的应用程序和库进行互操作。b.JNI最大的好处是它没有对底层Java虚拟机的实现施加任何限制,因此,Java虚拟机厂商可以在不影响虚拟机其它部分的情况下添加对JNI的支持。程序员只需编写一种版本的本地(Native)应用程序和库,就能够与所有支持JNI的Java虚拟机协同工作。
c.JNI可以理解为Java和本地应用程序之间的中介。
d.native方法是用户在Java中可以使用,但不能编写的方法。关于JNI后续学习再做了解.
7.垃圾回收机制分析
a.垃圾回收一般不会自动调用,内存不足时系统将运行垃圾回收
b.要让垃圾回收运行,需要显式调用System.gc(); 
c.垃圾回收的过程不唯一

抱歉!评论已关闭.