本章内容
1.static介绍与static修饰成员变量
2.static修饰成员方法
3.static成员变量初始化
NO1.static初介绍
首先我们定义一个学生类
class Student{
public String name;
public int age;
public double score;
//3个参数的构造方法
public Student(String name, int age, double score) {
this.name = name;
this.age = age;
this.score = score;
}
public void show(){
System.out.println(name+" "+age+" "+score);
}
}
public class TestDemo {
public static void main(String[] args) {
Student student1 = new Student("wdj",18,69);
student1.show();
Student student2 = new Student("lqx",17,90);
student2.show();
}
}
这是我们的一个简单的学生类,我们实例化了两个学生对象
假如我们再来定义一个成员变量:班级
赋值打印出来
我们假设我们之后实例化的所有学生都是在“205班”,那我们还得继续对学生进行班级赋值,有没有一种方法直接将所有学生归类到20班呢???
这我们就用到了static修成员,叫做静态成员
我们直接在学生类里定义一个205班的静态成员变量,那么只要实例化对象,这些对象都包含了205班的的属性
如图所示
我们在定义静态班级的时候,直接赋值“205”班,当我们实例化对象后,不需要在额外给对象赋值班级,此时对象已经拥有了205班的属性,这就是静态成员变量。
在Java中,被static修饰的成员,称之为静态成员,也可以称为类成员,其不属于某个具体的对象,是所有对象所共享的。
静态成员的存储在方法区,只要静态成员生成,就自动保存好一份到方法区里了,所有对象都拥有了这个属性。
下面我们看看静态成员的内存图
NO2.static修饰成员方法
接下来我们定义一个静态成员方法并调用
我们在mian函数中貌似不需要实例化对象即可直接访问静态成员变量和静态成员方法
这就是静态成员的特点,不依赖实例化对象即可访问
但是我们发现,在静态成员方法中去访问普通成员变量,代码会报错
首先是因为二者的内存方式不同,其次普通成员变量是需要以来实例化对象的,静态成员不需要依赖对象,因为是类变量
那么我们如何在静态成员方法中访问到我们的普通变量呢??
要间接调用才行:在静态成员中不能直接调用非静态成员
可以提供对象的创建来访问(间接访问)
public static void staticFunc(){
Student student1 = new Student("wdj",18,69);
System.out.println("这是一个静态成员方法"+student1.name);
}
}
第一种可以在方法中实例化对象,借助对象来访问普通成员属性
第二种也是一个道理,只是形式变了而已
NO3.static成员变量初始化
静态成员变量的初始化分为两种:就地初始化 和 静态代码块初始化。
就地初始化:在定义时直接给出初始值
还有静态代码块我们在在下一章介绍~~~
本章完~~