java入门(二十) | OOP(七)之static关键字
static关键字
1.1 概念
是java中的一个关键字
用于修饰成员(成员变量和成员方法)
1.2 特点
- 随着类的加载而加载 / 类的资源
- 只加载一次,就会一直存在,直到类消失就一起消失了
- 优先于对象加载
- 被所有对象所共享
- 可以直接被类名调用
1.3 练习1:入门案例
package cn.qile.staticdemo;
//测静态的使用
public class Test1_Static {
public static void main(String[] args) {
//测试
//1、静态资源可以直接通过类名.访问
//3、静态资源优先于对象加载进内存
Person.study();
//2、通过对象访问普通资源
Person p = new Person();
System.out.println(p.name);
}
}
//创建Person类
class Person{
//普通资源
String name="小王";
public void eat() {
System.out.println("正在吃饭");
}
//静态资源
static String country;
static public void study() {
System.out.println("都在学习");
}
}
1.4 静态内存图
1.5 练习2:静态调用关系
package cn.qile.staticdemo;
//测静态的使用
public class Test2_Static {
public static void main(String[] args) {
//静态资源访问
Student.study();
//普通资源访问
Student s = new Student();
s.eat();
}
}
//创建Student类
class Student{
//普通资源:调用啥资源都可以
String name="小王";
public void eat() {
//1、非静态 调用 静态 -- 能!!!
System.out.println(country);
//2、非静态 调用 非静态 -- 能!!!
System.out.println(name);
System.out.println("正在吃饭");
}
//静态资源:静态资源只能调用静态资源
static String country="China";
static public void study() {
//1、静态 调用 非静态 -- 不能!!
// System.out.println(name);
//2、静态 调用 静态 -- 能!!
System.out.println(country);
System.out.println("都在学习");
}
}
静态代码块、构造代码块、局部代码块
1、 静态代码块:在类加载时就加载,并且只被加载一次,一般用于项目的初始化
static{
...
}
2、 构造代码块:在创建对象时会自动调用,每次创建对象都会被调用
3、 局部代码块:方法里的代码块
package cn.qile.block;
public class Test3_Block {
public static void main(String[] args) {
//创建Teacher对象测试执行顺序
new Teacher();
}
}
//创建Teacher类
class Teacher{
//提供静态代码块:位置是类里方法外 + 随着类的加载就加载
//静态资源只会在类加载时加载一次,之后就一直存在内存中
static{
System.out.println("静态代码块");
}
//提供构造代码块:位置是在类里方法外 + 创建对象时先执行构造代码块
{
System.out.println("构造代码块");
}
//提供构造方法 : 用来创建对象自动调用
public Teacher() {
//提供局部代码块 : 控制变量的作用范围
{
System.out.println("局部代码块");
}
System.out.println("构造方法");
}
}
总结:
执行顺序:静态代码块 -> 构造代码块 -> 构造方法 -> 局部代码块