• static成员,代码块,内部类


    目录

    1.static成员

    1.1static修饰的成员变量:

    1.2用类名访问静态成员变量

    1.3静态成员变量特性:

    1.4Static修饰的成员方法:

    1.5通过静态方法访问静态成员

    1.6静态方法特性

    2.代码块

    2.1普通代码块:

    2.2构造块

    2.3静态代码块

    2.4静态代码块不管生成多少个对象,其只会执行一次 

    2.5注意事项:

    3内部类

    3.1实例内部类

     3.2实例内部类注意事项

    3.3静态内部类

    3.4在静态内部类中只能访问外部类中的静态成员

     3.5创建静态内部类对象时,不需要先创建外部类对象

    3.6局部内部类


    1.static成员

    现在有一个学生类,里面的成员变量分别有姓名,年龄,班级等。现在想要创建三个对象,它们的姓名年龄不一样,但都属于同一个班级。例如:张三 18 高三一班,李四 19 高三一班,王五 18 高三一班。我们如何来写这个学生类呢?

    1.1static修饰的成员变量:

    我们可以把班级设置为static修饰的静态成员。这样就默认创建的对象是高三一班的了。

    把classes设置为静态成员变量。

     

    1.2用类名访问静态成员变量

    static修饰的成员变量,称为静态成员变量,静态成员变量最大的特性:不属于某个具体的对象,是所有对象所共 享的。静态成员变量不依赖于对象,可以直接用类名去访问它:

    比如这里我不设置classes的初始值,直接用类名去修改它。

     

     

    1.3静态成员变量特性:

    1. 不属于某个具体的对象,是类的属性,所有对象共享的,不存储在某个对象的空间中
    2. 既可以通过对象访问,也可以通过类名访问,但一般更推荐使用类名访问
    3. 类变量存储在方法区当中
    4. 生命周期伴随类的一生(即:随类的加载而创建,随类的卸载而销毁)

    1.4Static修饰的成员方法:

    一般类中的数据成员设置为private,而成员方法设置为public。那么设置后,Student类中的classes如何在类外访问呢?

    1.5通过静态方法访问静态成员

    static 修饰的成员方法称为静态成员方法,是类的方法,不是某个对象所特有的 。静态成员一般是通过 静态方法来访问的。

     此时classes被private修饰,我们通过setClasses这个方法来设置classes

    1.6静态方法特性

    1. 不属于某个具体的对象,是类方法
    2. 可以通过对象调用,也可以通过类名.静态方法名(...)方式调用,更推荐使用后者
    3. 不能在静态方法中访问任何非静态成员变量
    4. 静态方法中不能调用任何非静态方法,因为非静态方法有this参数,在静态方法中调用时候无法传递this 引用

    2.代码块

    使用 {} 定义的一段代码称为代码块
    根据代码块定义的位置以及关键字,又可分为以下四种:
    普通代码块
    构造块
    静态块
    同步代码块(本篇博客不讲)

    2.1普通代码块:

    定义在方法中的代码块

    普通代码块就是大家最常见的代码块,例如:

    这就是一个普通代码块

    2.2构造块

    定义在类中的代码块(不加修饰符)。也叫:实例代码块构造代码块一般用于初始化实例成员变量

     

    2.3静态代码块

    使用static定义的代码块称为静态代码块。一般用于初始化静态成员变量。

     

    2.4静态代码块不管生成多少个对象,其只会执行一次 

     

     

     

    创建了3个对象,实例代码块里面的内容执行了3次 ,而静态代码块里面的内容只执行了一次,且在实例代码块之前执行。

    2.5注意事项:

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

    3内部类

    Java 中, 可以将一个类定义在另一个类或者一个方法的内部,
    前者称为内部类,后者称为外部类
    1. class OutClass{//外部类
    2. class InnerClass{//内部类
    3. }
    4. }

    3.1实例内部类

    未被static修饰的成员内部类。

    在实例内部类中可以直接访问外部类中:任意访问限定符修饰的成员
    如果外部类和实例内部类中具有相同名称成员时,优先访问的是内部类自己的
    如果要访问外部类同名成员时候,必须:外部类名称.this.同名成员名字

    外部内:创建对象和成员访问

    1. public static void main(String[] args) {
    2. //创建实例内部类对象
    3. OutClass.InnerClass innerClass1 = new OutClass().new InnerClass();
    4. //先创建外部类对象,在创建实例内部类对象
    5. OutClass outClass2 = new OutClass();
    6. OutClass.InnerClass innerClass2 = outClass2.new InnerClass();
    7. }

     3.2实例内部类注意事项

    1. 外部类中的任何成员都可以在实例内部类方法中直接访问
    2. 实例内部类所处的位置与外部类成员位置相同,因此也受publicprivate 等访问限定符的约束
    3. 实例内部类对象必须在先有外部类对象前提下才能创建
    4. 外部类中,不能直接访问实例内部类中的成员,如果要访问必须先要创建内部类的对象。

    3.3静态内部类

    static 修饰的内部成员类称为静态内部类。

    3.4在静态内部类中只能访问外部类中的静态成员

    外部类:

    静态内部类

     

     3.5创建静态内部类对象时,不需要先创建外部类对象

    1. public static void main(String[] args) {
    2. OutClass.InnerClass innerClass3 = new OutClass.InnerClass();
    3. }

    3.6局部内部类

    定义在外部类的方法体或者 {} 中,该种内部类只能在其定义的位置使用,一般使用的非常少
    1. public class OutClass {
    2. private int a;
    3. static int b;
    4. int c;
    5. public void method(){
    6. int a = 10;
    7. // 局部内部类:定义在方法体内部
    8. // 不能被public、static等访问限定符修饰
    9. class InnerClass{
    10. public int d = 20;
    11. public void print(){
    12. System.out.println(d);
    13. }
    14. }
    15. }
    16. public void method1(){
    17. System.out.println(d);// 报错:局部变量的成员和方法只能在该方法体内部使用,其他位置都不能用
    18. }
    19. }

  • 相关阅读:
    Goldilocks域
    Mybatis实战练习四【单个条件(动态SQL)&添加数据】
    【Andriod】adb调试安卓手机时连接真机或模拟器的3种方法,你知道么?
    编程技术对网络社会的益作用?
    Python编程 基础数据类型
    python设计模式(二)--创建类设计模式
    D. AND, OR and square sum(二进制位+贪心)
    verilog设计抢答器【附源码】
    阿里云——算法面经
    SQLServer连接表
  • 原文地址:https://blog.csdn.net/qq_62712350/article/details/126247818