(一)、 面向对象
(1)、Static
①、是什么能做什么
static 是一个修饰符关键字,用来区别静态和成员属性
static修饰符
1 类体中使用static修饰的变量 是静态变量
2 类体中使用static修饰的方法 是静态方法
3类体中使用static修饰的语句块是静态语句块
②、怎么用
/**
*
* 静态变量 和静态语句块 都是类加载阶段进行初始化和执行,而main方法是在加载完之后,进入运行时,才会执行 所以 静态变量和静态语句块的优先级 大于
* main方法
*
* 什么时候类加载呢? 访问一个类的静态属性的时候,会把该类载入内存中
*
*/
public class Static_01 {
// 静态变量
static int age = 18;
// 静态方法
// 大括号 就是一个语句块,多条语句的集合
// 方法 就是有名字的语句块
public static void m1() {
}
// 静态语句块
// 没有名字,自动执行(最先执行),并且只执行一次,不能手动调用(没有名字)
// 因为最先执行,并且只执行一次,所以适合做程序的初始化工作
static {
System.out.println("静态语句块1");
}
static {
System.out.println("静态语句块2");
}
static int i = 2;
static {
System.out.println(i);
}
public static void main(String[] args) {
System.out.println("main方法");
System.out.println(i2);
System.out.println(Test1.ag);
}
static int i2 = 2;
}
③、实例语句块
public class Static_02 {
// 实例语句块,等同于成员方法,只是没有名字
// 因为成员属性需要依赖于对象
// 所以,创建对象之后,立刻执行,并且创建一次对象,就执行一次
{
System.out.println("实例语句块1");
}
{
System.out.println("实例语句块2");
}
public static void main(String[] args) {
new Static_02();
new Static_02();
}
public Static_02() {
System.out.println("构造方法");
}
}
④、静态和成员
当所有对象拥有相同的属性和值,使用静态变量
当所有对象拥有相同属性和不同的值(可以相同),使用成员变量
当一个方法中有非静态的引用(使用了成员属性),需要使用成员方法
当一个方法中没有成员属性的引用,可以使用静态方法