目录
现在有一个学生类,里面的成员变量分别有姓名,年龄,班级等。现在想要创建三个对象,它们的姓名年龄不一样,但都属于同一个班级。例如:张三 18 高三一班,李四 19 高三一班,王五 18 高三一班。我们如何来写这个学生类呢?
我们可以把班级设置为static修饰的静态成员。这样就默认创建的对象是高三一班的了。
把classes设置为静态成员变量。
static修饰的成员变量,称为静态成员变量,静态成员变量最大的特性:不属于某个具体的对象,是所有对象所共 享的。静态成员变量不依赖于对象,可以直接用类名去访问它:
1. 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中2. 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问3. 类变量存储在方法区当中4. 生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁)
![]()
此时classes被private修饰,我们通过setClasses这个方法来设置classes。
1. 不属于某个具体的对象,是类方法2. 可以通过对象调用,也可以通过类名.静态方法名(...)方式调用,更推荐使用后者3. 不能在静态方法中访问任何非静态成员变量4. 静态方法中不能调用任何非静态方法,因为非静态方法有this参数,在静态方法中调用时候无法传递this 引用

创建了3个对象,实例代码块里面的内容执行了3次 ,而静态代码块里面的内容只执行了一次,且在实例代码块之前执行。
静态成员变量是类的属性,因此是在JVM加载类时开辟空间并初始化的如果一个类中包含多个静态代码块,在编译代码时,编译器会按照定义的先后次序依次执行(合并)实例代码块只有在创建对象时才会执行

外部内:创建对象和成员访问
- public static void main(String[] args) {
- //创建实例内部类对象
- OutClass.InnerClass innerClass1 = new OutClass().new InnerClass();
-
- //先创建外部类对象,在创建实例内部类对象
- OutClass outClass2 = new OutClass();
- OutClass.InnerClass innerClass2 = outClass2.new InnerClass();
-
- }
1. 外部类中的任何成员都可以在实例内部类方法中直接访问2. 实例内部类所处的位置与外部类成员位置相同,因此也受public、private 等访问限定符的约束3. 实例内部类对象必须在先有外部类对象前提下才能创建4. 外部类中,不能直接访问实例内部类中的成员,如果要访问必须先要创建内部类的对象。
静态内部类
- public static void main(String[] args) {
- OutClass.InnerClass innerClass3 = new OutClass.InnerClass();
- }
- public class OutClass {
- private int a;
- static int b;
- int c;
- public void method(){
- int a = 10;
- // 局部内部类:定义在方法体内部
- // 不能被public、static等访问限定符修饰
- class InnerClass{
- public int d = 20;
- public void print(){
- System.out.println(d);
- }
- }
- }
- public void method1(){
- System.out.println(d);// 报错:局部变量的成员和方法只能在该方法体内部使用,其他位置都不能用
- }
- }