一、访问修饰符
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.静态方法中不可以定义this,super关键字;
因为静态优先于对象存在;
3.静态方法可以继承,不能重写,没有多态;(即在子类中重写相同的方法,其实就是各自归各自独有的方法)
5.什么时候使用静态:
静态变量使用:当对象中存在共享数据时;
静态函数使用:当方法没有访问非静态数据时,可以定义为静态方法;
6.静态代码块:
(1)格式:static{};
(2)执行时机:类首次被加载时执行,且只执行一次;
7.类加载时机:
(1)创建对象;
(2)创建子类对象;
(3)访问静态属性;
(4)调用静态方法;
(5)Class.forName("全限定名");//包名+类名;
8.动态代码块:
(1)格式:{}
(2)执行时机:在创建对象实例后,且构造函数执行前执行一次;且多次创建实例会多次执行;
//一般不用,用构造函数代替;