Java修饰符

拥有回忆 提交于 2020-03-12 07:46:13

访问权限修饰符

访问级别 同类 同包 子类 不同包
public Y Y Y Y
protected Y Y Y N
default Y Y N N
private Y N N N

protected
经常需要允许子类访问定义在父类中的数据和方法,但是不允许非子类访问这些数据和方法,这种情况下就可以使用protected,它允许任何包中的子类访问父类

default
(缺省,什么也不写)在同一包内可见,不使用任何修饰符
实际上它限制的范围就是一个包内可以访问。如果不在一个包内,即使继承关系任然是不能访问的。它是针对本包访问而设计的

static

static修饰符,表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。

用法:是一个修饰符,用于修饰成员(成员变量,成员函数),当成员被静态修饰后,就多了一个调用方式,除了可以被对象调用外,还可以直接被类名调,类名.静态成员。

存在:方法区,共享区,数据区(非堆内存、栈内存的另一个存储区),static块仅在该类被加载时执行一次。

特点:随着类的加载而加载,也就是说静态会随着类的消失而消失,说明他的生命周期最长;优先于对象的存在,静态先存在,对象后存在;被所有对象所共享;可以直接被类名调用。

static变量——也称作静态变量,静态变量和非静态变量的区别是:静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。

static成员变量的初始化顺序按照定义的顺序进行初始化。

所以一般在需要实现以下两个功能时使用静态变量:在对象之间共享值、方便访问变量。

public static String name = "name";

static方法——一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就谈不上this。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法、变量都是必须依赖具体的对象才能够被调用。

public static void show() {
    //TODO something
}

static代码块——用来形成静态代码块以优化程序性能。static块可以置于类中的任何地方,类中可以有多个static块。在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次

static {
    //TODO something
}

静态导包就是Java包的静态导入,用import static代替import静态导入包是JDK1.5中的新特性。

一般我们导入一个类都用import com…ClassName;而静态导入是这样:import static com…ClassName.;这里的多了个static,还有就是类名ClassName后面多了个.,意思是导入这个类里的静态方法。当然,也可以只导入某个静态方法,只要把.*换成静态方法名就行。然后在这个类中,就可以直接用方法名调用静态方法,而不必用ClassName.方法名的方式来调用。

import static java.lang.Interger.*;

public class TestStaticImport {
    public static void main(String[] args) {
    //不使用静态导包,Interger.MAX_VALUE
    Systom.out.println(MAX_VALUE);
    }

}

final

final详解

abstract

abstract修饰符,可以修饰方法,类

用abstract修饰的类叫做抽象类,抽象类不能被实例化。

用abstract修饰的方法叫做抽象方法,抽象方法没有方法体

对于接口

成员变量的默认修饰符为: public static final

方法的默认修饰符是: public abstract

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!