1、static 变量
模拟学生类 ,给学生分配教室,每创建一个对象,就会出现一个单独的教室,不符合实际情况,不利于后期的维护和更改
解决:static关键字
-
内存分配图
- static 变量存储在方法区中
- 所有的Student对象都共用同一个classRoom变量
-
静态变量和非静态变量的定义
- static String classRoom;静态变量 类变量 一个类所有的对象公用一个static变量
- String name;int age;String sex;非静态变量 对象变量(实例变量) 一个类的每个对象都有单独的对象变量
-
静态变量和非静态变量的比较
- 共同点
- 都是变量
- 都是成员变量
- 能使用static修饰局部变量
- 共同点
-
- 区别:
- 1.存储位置不同
- 静态变量 :方法区
- 非静态变量:堆中
- 2.份数不同
- 静态变量 :1份
- 非静态变量:1个对象1份
- 3.调用方式不同
- 静态变量 :通过类名调用 Student.classRoom
- 通过对象名调用 stu1.classRoom 不推荐
- 非静态变量:
- 通过对象名调用 stu1.name="小张张";
- 静态变量 :通过类名调用 Student.classRoom
- 4.内存分配空间的时间不同
- 静态变量 :第一次加载类的时候
- 非静态变量:创建对象的时候
- 1.存储位置不同
- 区别:
2、static方法
模拟学生类 ,给学生分配教室,每创建一个对象,就会出现一个单独的教室,不符合实际情况
解决:static关键字 修饰的方法
总结1:static方法的作用
- 访问static方法和static成员变量(静态变量)
总结2:static方法的调用方式
- 1.通过类名调用 Student.showroom(); 推荐该方式
- 2.通过对象名来调用 stu1.showroom();
总结3:不可以
- 静态方法中不可以访问非静态变量
- 静态方法中不可以访问非静态方法
- 静态方法中不可以访问this
- 理解:加载类的时候加载静态变量和静态方法,此时可能还没有创建对象,所以非静态变量和静态方法还没有分配空间, 所以无法访问
总结4:可以
- 非静态方法中可以访问静态变量
- 非静态方法中可以访问静态方法
- 理解:加载类的时候加载静态变量和静态方法,创建对象后,非静态变量和非静态方法就分配空间,此时静态变量和静态方法已经存在,所以可以访问
3、static代码块
总结1:局部代码块
* 1.位置:方法中
* 2.数量:多个
* 3.执行顺序:依次执行
* 4.局部代码块中定义的变量作用范围只限于当前的代码块
总结2:(成员)代码块
* 1.位置:类中
* 2.数量:多个
* 3.执行顺序:依次执行
* 4.执行时间:每次创建对象的时候都执行;先执行代码块,再执行构造方法
* 5.作用:实际开发中几乎不用
* 可以将各个构造方法中相同的代码提取到代码块
* 匿名内部类不能够提供构造方法,此时初始化操作可以将其放到代码块中
总结3:static代码块
* 1.位置:类中
* 2.数量:多个
* 3.执行顺序:依次执行
* 4.执行时间:第一次加载类的时候执行,且只执行一次
* 5.作用:实际开发中很常用
* 一般用于执行一些全局性的初始化操作。
* 加载数据库初始信息
* 总结4:类的成员
* 1.成员变量
* 2.成员方法
* 3.构造方法
* 4.代码块
* 5.静态代码块
* 6.内部类(知道即可,不是重点,不需要花费精力)