1.static 可以修饰属性
被static 修饰的属性称为静态属性,静态变量,类变量
语法:
访问修饰符 static 数据类型 变量名;
static 访问修饰符 数据类型 变量名;
访问修饰符 static 数据类型 变量名 =数据;
例:
注:a 静态属性 基于类而存在,供所有对象共享,
而且和创建多少对象无关
b 使用:类名.静态属性名
对象名.静态属性名
例:
属性也称为成员变量:实例变量和静态变量
a 实例 变量基于对象存在,每个对象都是唯一的,
必须基于 对象名.实例变量名
b 静态变量基于类而存在,和对象创建多少无关
可以直接通过 类名.静态属性名
2.修饰方法
语法:
访问修饰符 static 返回值类型 方法名(形参列表){ }
public static int m1(int i){ }
使用:
类名.静态方法名(实参);
对象名.静态方法名(实参);
注: a static 和 访问修饰符没有顺序
b 静态方法中不能直接访问本类的非静态成员
(成员方法和实例变量)
c 静态方法中只能直接访问本类的其他静态成
员 (静态变量 静态方法)
d 静态方法不能使用this/super
e 静态方法可以被子类继承,只能被静态方法
覆盖,静态方法没有体现多态的应用
f 静态方法定义: 通常工具类中方法可以定义
为静态方法
3 修饰 初始化代码块
创建对象过程:
1.分配空间:为属性附默认值
2.初始化属性:为属性第二次赋值
属性定义方式: 数据类型 属性名 =值;
初始化代码块:{ }
3.执行方法的内容:为属性第三次赋值
……………………………………………………………………
带有继承关系的创建对象过程:
(先加载,在创建)
1.先加载父类,在加载子类
—— 完成静态属性的初始化,静态代码块被执行
2.先完成父类对象的创建,在完成子
类对象的创建
—— 初始化属性,在执行构造方法中语句
初始化代码块
注:a 位置:定义在类以内,方法以外的{ }
b 作用:创建对象时,可以按照实例变量
定义的顺序来完成对实例变量的初始化
静态代码块
注: a 定义在类以内,方法以外的{ },同时被static修饰
b 作用:在类加载时,按照和静态属性定义顺序,
完成对静态属性的初始化工作
—— —— c
类加载
a 类加载: jvm第一次使用一个类的时候,
通过classpath(类路径)找到类对应的.class文件
对文件进行读取(读取包名,类名,父类,属性,构造方法,成员方法等),
并且将文件保存到jvm内存中,一个类类加载只能进行
一次(只 要jvm不关闭)
例:第一次添加过得微信,第二次就不需要再添加了。
b 类加载的时机:
第一次访问一个类中静态成员(静态属性或是
静态方法)时,会导致此类进行类加载
只有声明引用不会完成类加载