访问权限修饰符
访问级别 | 同类 | 同包 | 子类 | 不同包 |
---|---|---|---|---|
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
abstract
abstract修饰符,可以修饰方法,类
用abstract修饰的类叫做抽象类,抽象类不能被实例化。
用abstract修饰的方法叫做抽象方法,抽象方法没有方法体
对于接口
成员变量的默认修饰符为: public static final
方法的默认修饰符是: public abstract
来源:CSDN
作者:今天又学java了
链接:https://blog.csdn.net/weixin_43907800/article/details/104804636