【java学习】修饰符

1,访问权限:public, private, protected,friendly

1)默认权限

不写public, private, protected时,默认为friendly(default权限、package权限、同包权限)

2)区别

区别

2,访问控制

1)类(class)

final―终态类,表示该类不能被继承
abstract―抽象类,不能新建对象

2)变量(variable)

static―静态变量,被类的所有实例共享。静态变量随着类的加载而加载,所以也被称为类变量
(对于整型静态变量,如果没有赋初值,则默认为0)
final―常量,定义后不能修改
transient―告诉编译器,在类对象序列化的时候,此变量不需要持久保存
volatile―指出可能有多个线程修改此变量,要求编译器优化以保证对此变量的修改能够被正确的处理。详情查看:【java学习】多线程并发

成员变量——定义在类中的变量,可以不进行初始化,Java会自动进行初始化,如果是引用类型默认初始化为null,如果是基本类型例如int则会默认初始化为0 ;
局部变量——定义在方法中的变量,必须要进行初始化,否则不同通过编译。

3)方法(method)

static―静态方法,并不需要创建类的实例就可以访问静态方法
final―常方法,所有子类不能覆盖该方法,但可以重载。(final修饰方法中的参数,称为最终参数)
abstract―抽象方法,在抽象类中没有实现的方法
native―本地方法,java调用非java代码的接口。实现由非java实现

4)接口(interface)

接口中的变量总是需要定义为“ public static final 接口名称”,但可以不包含这些修饰符,编译器默认如此。
接口中的方法只能使用public abstract修饰符。

3,static

1)静态变量

被类的所有实例共享。

对于整型静态变量,如果没有赋初值,则默认为0。

2)静态代码块

public class Test{

    static int a;//静态整型,默认为0.
    //静态语句块
    static{
       int x=5;//局部变量,静态代码块执行完后,即销毁。
       a=3;//全局变量
    }
    static int x,y;//x不受上述局部变量的影响,初始值为0.
}

在类被加载的时候执行且仅会被执行一次,一般用来初始化静态变量和调用静态方法。

执行顺序(优先级从高到低):静态代码块 > mian方法 > 构造代码块 > 构造方法。

3)静态方法

并不需要创建类的实例就可以访问静态方法。

①限制(main方法同理)

A,它们仅能调用其他的static 方法
B,它们只能访问static数据
C,它们不能以任何方式引用this 或super(因为this是与实例相关的,super 与继承有关)

②null调用

   private static void testMethod(){
        System.out.println("testMethod");
    }
    public static void main(String[] args) {
        ((test4)null).testMethod();//输出testMethod
    }

此处是类对方法的调用,不是对象对方法的调用。
方法是static静态方法,直接使用”类.方法”即可,因为静态方法使用不依赖对象是否被创建。
null可以被强制类型转换成任意类型(不是任意类型对象),于是可以通过它来执行静态方法。

如果testMethod为非静态的方法,则会报错NullPointerException。
对于非静态方法,用”对象.方法”的方式,必须依赖对象被创建后才能使用,若将testMethod()方法前的static去掉,则会报 空指针异常 。

猜你喜欢

转载自blog.csdn.net/SunshineTan/article/details/78407846