一:概念
static是java的关键字,用于修饰成员。
特点:
1、可以修饰成员变量、成员方法。
2、随着类的加载而加载,优先于对象加载。
3、只加载一次,就会一直存在,不再开辟新的空间
4、全局唯一,全局共享
5、可以直接被类名调用
6、静态只能调用静态,非静态可以随意访问
7、static不能和this和super公用,因为加载静态的时候,还没有对象。
练习一:静态成员的创建及特点测试
public class Test1_Static {
public static void main(String[] args) {
Person p=new Person();
p.show();
/**
* 静态资源如何调用
*/
//2通过静态方式访问,这行代码也可以放在创建对象之前,说明特点2优先对象加载。
System.out.println(Person.age);
//1通过对象,
System.out.println(p.age);
/**
* 特点4 age的值是18,可以全局共享
*/
Student s=new Student();
System.out.println(s.age);
}
}
class Person{
// 静态
static int age=18;
static public void test() {
System.out.println("test().....");
// 报错 验证特点7:不能和this和super共用
// this.age;
// 报错 特点6 静态资源不能调用普通资源
// show();
}
//普通属性
String name="小明";
//普通方法
public void show() {
System.out.println(name);
// 特点6 普通资源可以调用静态资源
test();
}
}
class Student{
//特点4:只加载一次,就能在多个对象中共享,全局唯一全局共享
int age=Person.age;
}
结果:
二:静态代码块,构造代码块,局部代码块
1、 静态代码块:在类加载时就加载,并且只被加载一次,一般用于项目的初始化
2、 构造代码块:在调用构造方法前会自动调用,每次创建对象都会被调用
3、 局部代码块:方法里的代码块,方法被调用时才会执行
4、 静态代码块:static{ },位置:在类里方法外
练习一:测试上面的特点
public class Test2_Block {
public static void main(String[] args) {
new BlockDemo().show();//触发构造方法,构造代码块,局部代码块
}
}
class BlockDemo{
//静态代码块:在成员位置 完成项目初始化 类加载时加载
static {
System.out.println("静态代码块");
}
//构造方法
public BlockDemo() {
System.out.println("构造方法");
}
//构造代码块 成员位置 抽取构造代码的共性 创建对象时加载
{
System.out.println("构造代码块");
}
//局部代码块 局部位置 控制变量的作用范围 方法执行时加载
public void show(){
System.out.println("局部代码块");
}
}
结果: