成员变量:它是对象的属性,存放在堆中与对象共存亡。调用时直接对象.属性。
静态变量:它存放在静态方法区中与类共存亡,只能创建一个,调用时可以对象.属性也可以类.属性。
有人想问,为什么要搞static这个东东?当你的一个属性相同时,你给他赋值一次,便可以重复调用。他就在那里不离不弃等你调用。
静态方法:它又有什么作用呢?你调用方法时得创建对象吧,通过对象调用方法,而用static修饰的方法可以直接用类名调用,因为static与类相关。
静态方法不能访问成员变量,因为静态方法与类相关,类加载时,对象不一定创建,所以在静态方法中不能出现this ,super。
成员方法可以访问静态方法,因为对象创建时,类已经加载了。
1,静态变量演示:
class Student {
int age;
static String country;
public static void sleep() {
System.out.println("学生睡觉");
}
}
class Demo3 {
public static void main(String[] args) {
Student s = new Student();
Student s1=new Student();
Student s2=new Student();
System.out.println(s.age = 10);
Student.sleep();
s.country="中国";
System.out.println(s.country);
System.out.println(s1.country);
System.out.println(s2.country);
}
}
代码快:
静态代码块:与类相关,只运行一次,在类加载的时候运行,它可以初始化静态变量,之前你还得创建一个对象来调用它,还得用this给它初始化,好麻烦的用一个静态变量。
构造代码快:与对象相关,对象创建几次那么他就运行几次。
局部代码块:在方法中的代码块。控制方法的生命周期。
class Student {
int age;
static String country;
{
System.out.println("学生需要学习");
}
static {
country = "中国";
System.out.println("......学生需要学习");
}
}
class Demo3 {
public static void main(String[] args) {
Student s = new Student();
Student s1 = new Student();
Student s2 = new Student();
System.out.println(Student.country);
}
}
学了这么多东西,它们在内存中运行的顺序是什么?
类的加载--->静态变量初始化--->静态代码---->创建对象--->成员变量初始化--->构造代码块--->构造方法。