程序员人生 网站导航

[置顶] 别说你懂修饰符――深入分析Java修饰符

栏目:php教程时间:2015-04-20 07:53:49
    我想学习Java的朋友应当都在学习的路上遇到过这样的疑问,Java中的修饰符,对public,private,protected还算熟习,
可是对final,static等就不太清楚了,对Java中类,方法,变量的默许修饰符好像就更不了解了,我们今天就和大家1起
学习1下,Java中各种各样奇妙的修饰符。

1、范围介绍

首先,我们要明白在Java中修饰符的作用主要有两种,1种是用来控制访问权限的,另外一种是用来控制其他方面的(比如值是不是可改,访问的方式,是不是可覆盖等等)。而,在访问权限方面,1般分为以下几种:类内可访问,包内可访问,子类可访问等几种范围。我们也主要围绕这几种范围进行分析。

2、变量的修饰符

Java中的变量,主要分为两类,1类是方法内的变量,1类是类内的变量(或叫类的属性或字段)。而方法内的变量只能用1种修饰符final。表示常量,不能更改。类内的变量却是有很多,下面我们来具体分析1下。

1. 访问权限控制方面:

// 变量的修饰符,关于访问权限控制方面 public String publicString = "public"; protected String protectedString = "protected"; private String privateString = "private"; String defaultString = "default";

我们可以看到主要有4类修饰符,public,protected,private还有1个是默许的(default)。那末他们的访问权限如何呢?

public: 任何地方都可以访问,对访问无穷制。
protected: 同1个包内或不同包内的子类可以访问。
private: 同1个类内可以访问。
默许(default): 同1个包内可以访问。

2. 其他控制方面:

class Test{ static String staticString = "static"; final String finalString = "final"; }

我们可以看到其他方面的控制修饰符主要有两个,static,final。

static表示该变量无需取得其所属类的对象就能够访问。甚么意思呢?就是说,对上面的例子,我可以通过Test.staticString的方式,直接访问staticString这个变量。固然了,你也能够通过Test test = new Test(); test.staticString的方式进行访问,但是其实不推荐通过这类方式进行访问。

final表示该变量1旦赋值以后,其值将不会再产生改变。如上面所示,如果你再使用finalString = “hello”的方式修改其值的话,就会报错,且没法修改。

3、非构造函数的修饰符

1. 访问权限控制方面

// 关于方法的修饰符 public void printPublic() { System.out.println("public method"); } protected void printProtected() { System.out.println("protected method"); } private void printPrivate() { System.out.println("private method"); } void printDefault() { System.out.println("default method"); }

非构造函数的访问权限与变量的完全相同,这里不再赘述。

2. 其他控制方面:

static void printStatic() { System.out.println("static method"); } final void printFinal() { System.out.println("final method"); } abstract void printAbstract();

其中static和变量中的static具有相同的含义。final也表示,在继承关系中,这个方法是不可以被子类覆盖重写的。而abstract是指需要子类实现的抽象方法。

4、构造函数的修饰符

构造函数的修饰符只有访问权限控制方面:

class TestA { //关于构造函数的修饰类 public TestA(){ } protected TestA(int i){ } private TestA(int i,int j){ } TestA(String string){ } }

其中,private限制构造函数后,其他类中将不能够通过new的方式来获得这个类的对象,能够有效控制对象的创建行动,这在有些设计模式中是非常重要的。

5、类的修饰符

关于类的修饰符主要有4种,以下:

// public,默许,abstract,final。 public class Test1 {} class Test2{} abstract class Test3{} final class Test4{}

其中public,和默许(default)是访问控制修饰符,和变量的完全相同,不再赘述。

abstract是表示该类为1个抽象类,不能实例化该类,即不能使用Test3 test3 = new Test3();的方式获得Test3的实例。

final表示该类不能被子类继承,该类即为终究类,不可再被继承。

6、关于接口

接口比较特殊,接口的修饰符只有public和默许(default),其控制权限和变量完全相同,不再赘述。

值得注意的是,接口中的变量只能为:public static final 变量名。固然了,你也能够不写这些修饰符,编译器会自动帮你加上的,由于编译器默许情况下就是这样修饰的。

接口中的方法,只能用public和abstract修饰符,固然了,你也能够不写这些修饰符,一样,编译器会自动帮你加上的。

PS:至于变量为何必须声明为public static final请参照我的另外一篇博客: Java接口中的成员变量为何必须声明为public static final?

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐