别说你懂修饰符——深入分析Java修饰符

    我想学习Java的朋友应该都在学习的路上遇到过这样的疑问,Java中的修饰符,对public,private,protected还算熟悉,
可是对final,static等就不太清楚了,对Java中类,方法,变量的默认修饰符好像就更不了解了,我们今天就和大家一起
学习一下,Java中各种各样奇妙的修饰符。

一、范围介绍

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

二、变量的修饰符

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

1. 访问权限控制方面:

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

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

public: 任何地方都可以访问,对访问无限制。

protected: 同一个包内或者不同包内的子类可以访问。

private: 同一个类内可以访问。

默认(default): 同一个包内可以访问。

2. 其他控制方面:

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

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

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

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

三、非构造函数的修饰符

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是指需要子类实现的抽象方法。

四、构造函数的修饰符

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

class TestA {
    //关于构造函数的修饰类
    public TestA(){

    }
    protected TestA(int i){

    }
    private TestA(int i,int j){

    }
    TestA(String string){

    }
    }

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

五、类的修饰符

关于类的修饰符主要有四种,如下:

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

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

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

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

六、关于接口

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

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

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

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

时间: 2024-10-11 06:30:46

别说你懂修饰符——深入分析Java修饰符的相关文章

Java标示符及变量命名规则

Java标示符只能由字母,数字,下划线以及$符号组成的字符串.但不能包含@.%.空格等其他特殊字符.且标示符的开头不能以数字开头.不能使用关键字和保留字作为标示符.Java标示符区分大小写. 在Java变量命名时一般采用驮峰式.即第一个单词首字母小写,以后每个单词的首字母大写.如stuName等.变量命名时不限制变量名长度.一般做到见名知意,如stuName一看就知道是"学生姓名".变量是严格区分大小写的.如stu与Stu是2个不同的变量名. Java标示符及变量命名规则

初来驾到学java修饰符的使用

年一过完学习起来特精神感受一下java修饰符的应用于区别 访问修饰符的使用权限:最大的是public修饰符的属性他可以在任意的地方调用 其次是protected修饰符它不除不能再非不同包的子类调用外其他的都可以 默认的修饰符不能再不同包之间调用 同包的情况下不同类子类非子类均可调用. privatie是私有的只能在本类中调用 包 同包 不同包 使用限制 关系 本类 子类 非子类 子类 非子类 private O X X X X 私有的 默认 O O O X X 默认 protected O O

JavaSE入门学习10:Java修饰符

Java语言提供了很多修饰符,主要分为以下两类: 访问修饰符 非访问修饰符 修饰符用来定义类.方法或者变量,通常放在语句的最前端.我们通过下面的例子来说明: <span style="font-size:18px;">public class className { // ... } private boolean flag; static final double weeks = 9.5; protected static final int BOXWIDTH = 42;

Java 修饰符

Java语言提供了很多修饰符,主要分为以下两类: 访问修饰符 非访问修饰符 修饰符用来定义类.方法或者变量,通常放在语句的最前端.我们通过下面的例子来说明: public class className { // ... } private boolean myFlag; static final double weeks = 9.5; protected static final int BOXWIDTH = 42; public static void main(String[] argum

java修饰符

java修饰符主要分为两类:1.访问修饰符 2.非访问修饰符 修饰符用来定义类.方法或者变量,通常放在语句的最前端. 一:访问控制修饰符 java中使用访问控制符来保护对类.变量.方法和钩子方法的访问.有四种不同的访问权限: 默认的:default,在同一包内见,不使用任何修饰符 私有的:private,在同一类内可见 共有的:public,对所有类可见 受保护的:protected,对同一包内的类和所有子类可见 访问控制和继承规则: 父类中声明为public的方法在子类中也必须为public.

Java修饰符类型(public、protected、private)小结

Java修饰符号类型: public:Java语言中访问限制最宽的修饰符,一般称之为“公共的”.被其修饰的类.属性以及方法不仅可以跨类访问,而且允许跨包(package)访问. private:Java语言中对访问权限限制的最窄的修饰符,一般称之为“私有的”.被其修饰的类.属性以及方法只能被该类的对象访问,其子类不能访问,更不能允许跨包访问. protected:介于public 和 private 之间的一种访问修饰符,一般称之为“保护形”.被其修饰的类.属性以及方法只能被类本身的方法及子类访

Java学习(八):Java修饰符(类、变量、方法)

java中的修饰符分为类修饰符,变量修饰符,方法修饰符. 类修饰符: 1.public : public 即公共类. 2.package : 默认缺省为包修饰符,本包可见. 3.abstract :凡是用 abstract 修饰符修饰的类,被称为抽象类.含有一个或者多个抽象方法的类必须声明为抽象类,抽象类无法实例化. 4.final :当一个类不可能有子类时可用修饰符 final 把它说明为最终类. 变量修饰符: 1.public :用 public 修饰的变量可以被所有其它类所引用. 2.pr

JAVA修饰符类型(public,protected,private,friendly)

JAVA修饰符类型(public,protected,private,friendly) public的类.类属变量及方法,包内及包外的不论什么类均能够訪问:protected的类.类属变量及方法,包内的不论什么类,及包外的那些继承了此类的子类才干訪问:private的类.类属变量及方法,包内包外的不论什么类均不能訪问:假设一个类.类属变量及方法不以这三种修饰符来修饰,它就是friendly类型的,那么包内的不论什么类都能够訪问它,而包外的不论什么类都不能訪问它(包含包外继承了此类的子类),因此

浅析java修饰符之public default protected private static final abstract

浅析java修饰符之public default protected private static final abstract 一   修饰符的作用:用来定义类.方法或者变量,通常放在语句的最前端 二   分类(大致分两类) 1.访问修饰符,包括:public default protected private 2.非访问修饰符,包括:static final abstract 三 访问修饰符--Java中,可以使用访问控制符来保护对类.变量.方法和构造方法的访问.Java支持4种不同的访问权