Java修饰符

一、访问修饰符

  1.public公共;使用对象:类、接口、变量、方法;

  2.default默认;使用对象:类、接口、变量、方法;

  3.private私有;使用对象:成员变量,成员函数;

    注释:只在本类中有效;不能修饰类;

  4.protected保护;使用对象:变量、方法。

    注意:不能修饰类(外部类)。

    注释:保护权限,不同包之间只有继承了的子类才能访问;

    

二、非访问修饰符-final:

 

  final:可以修饰:类,变量,函数;

  1.修饰类:不可以被继承;

  2.修饰方法(函数)不可以被重写

  3.修饰的变量:常量,有且只能被赋值一次;命名都用大写字母和_下划线;

    (1)局部常量:初始化;

    (2)成员常量:初始化,动态代码块,静态代码块;

    (3)静态常量:初始化,静态代码块;

    (4)基本数据类型常量:值不可变;

    (5)引用数据类型:地址不可变;//final A a=new A()

  4.定义静态常量类Constants.java;用于解决魔鬼常量;

/**
 * 常量类
 */
public class Constants {
    /**在线*/
    public static final String STATE_ONLINE="1";
    /**离线*/
    public static final String STATE_OFFLINE="2";
}

  5.用接口代替类存储常量:

 

/**
 * 常量类
 */
public interface Constants {
    /**在线*/
    String STATE_ONLINE="1";
    /**离线*/
    String STATE_OFFLINE="2";
}

  6.枚举:控制传入得值的范围;

public enum Week {
    one,two,three,four,five,six,seven;
}

 

  调用:Week.one

三、非访问修饰符-static:

 

 

1.基本原理:

1.用于修饰:成员变量,成员函数;

2.新建对象时在内存中不会重复开辟空间,被对象所共享;

3.用法:1)可以被对象调用;2)还可以直接被类名调用;类名.静态成员;

2.静态特点:

1.随类的加载而加载;(类似js预编译,在预编译时已经加载,随着类的消失而消失)

2.优先于对象存在;

3.被所有对象所共享;

4.可以直接被类调用;

3.实例变量和类变量的区别:

  类变量:独立于方法之外的变量,用 static 修饰。

  实例变量(全局变量):独立于方法之外的变量,不过没有 static 修饰。

  局部变量:类的方法中的变量。

 

 

  1.存放位置:

    类变量:随着类的加载而存放于方法区中;

    实例变量:随着对象的建立而存在于堆内存中;

  2.生命周期:

    类变量:生命周期长,随着的消失而消失;

    实例变量:生命周期短,随着对象的消失而消失;

4.静态使用注意事项:

  1.静态方法只能访问静态变量和静态方法,不能访问非静态变量和实例方法;

      非静态方法可以访问静态和非静态;

  2.静态方法中不可以定义thissuper关键字;

      因为静态优先于对象存在;

  3.静态方法可以继承,不能重写,没有多态;(即在子类中重写相同的方法,其实就是各自归各自独有的方法)

5.什么时候使用静态:

  静态变量使用:当对象中存在共享数据时;

  静态函数使用:当方法没有访问非静态数据时,可以定义为静态方法;

6.静态代码块:

  (1)格式:static{}

  (2)执行时机:类首次被加载时执行,且只执行一次;

7.类加载时机:

  (1)创建对象;

  (2)创建子类对象;

  (3)访问静态属性;

  (4)调用静态方法;

  (5Class.forName("全限定名")//包名+类名;

8.动态代码块:

  (1)格式:{}

  (2)执行时机:在创建对象实例后,且构造函数执行执行一次;且多次创建实例会多次执行;

    //一般不用,用构造函数代替;

posted @ 2019-07-21 22:27  开拖拉机的拉风少年  阅读(741)  评论(0编辑  收藏  举报