Java基础-学习笔记08

08 类变量、类方法、main方法、代码块

类变量(静态变量)

类变量也叫静态变量/静态属性,是该类的所有对象共享的变量,任何一个该类对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量。

关于静态变量在内存中的存放地址,有两种说法,①认为静态变量存放在堆中,②认为静态变量存放在方法区中的方法域中。
不管哪种说法,不影响类变量作为类对象的共享属性的特点。类变量是随着类的加载而创建,所以即使没有创建对象实例也可以访问。
实际上,JDK7版本以前是②存放在方法区里的,JDK以上的版本则是①存放在堆里的。在进行类加载时,会在堆里生成一个对应的class对象(原型对象),在这个对象的最后会加载类变量。

定义语法:

访问修饰符 static 数据类型 变量名;
static 访问修饰符 数据类型 变量名;

访问语法:

类名.类变量名
对象名.类变量名 //静态变量的访问修饰符发访问权限,和普通属性一样

使用细节:

  1. 什么时候使用类变量
    当我们需要让某个类的所有对象都共享一个变量时,就可以考虑使用类变量(静态变量):比如:定义学生类,统计所有学生共交多少钱。Student(name, static fee)
  2. 类变量与实例变量(普通属性)的区别
    类变量是该类的所有对象共享的,而实例变量是每个对象独享的。
  3. 加上 static 称为类变量或静态变量,否则称为实例变量/普通变量/非静态变量。
  4. 类变量可以通过 类名.类变量名 或者 对象名.类变量名 来访问,前提是满足访问修饰符的访问权限和范围。
  5. 类变量的生命周期随类的加载开始,随类消亡而销毁。

类方法(静态方法)

形式:

访问修饰符 static 数据返回类型 方法名(){}
static 访问修饰符 数据返回类型 方法名(){}

类方法的调用:

类名.类方法名
对象名.类方法名 //前提是满足访问修饰符的访问权限和范围

使用细节:

  1. 当方法中不涉及到任何和对象相关的成员,则可以将方法设计成静态方法,提高开发效率。比如,工具类中的方法utils,这样我们不需要创建对象就可以使用了。
  2. 类方法和普通方法都是随着类的加载而加载,将结构信息存储在方法区。类方法中无 this 参数,普通方法中隐含着 this 的参数。
  3. 普通方法和对象有关,需要通过对象名调用,不能通过类名调用。
  4. 类方法中不允许使用和对象有关的关键字,比如 this 和super,普通方法可以。
  5. 类方法(静态方法)中只能访问静态变量或静态方法。普通成员方法,遵守访问权限的前提下,既可以访问非静态成员,也可以访问静态成员。

理解 main 方法

解释 main 方法的形式:public static void main(String[] args){}

  1. main方法是虚拟机在调用
  2. Java虚拟机需要调用类的 main() 方法,所以该方法的访问权限必须是public
  3. Java虚拟机在执行main() 方法时不必创建对象,所以该方法必须是 static
  4. 该方法接收 String 类型的数组参数,该数组中保存执行Java命令时传递给所运行的类的参数,接收参数
  5. Java执行的程序 参数1 参数2 参数3
    Eg:

IDEA传参数:edit configurations

代码块

代码块又称为初始化块,,属于类中的成员(即是类的一部分),类似于方法,将逻辑语句封装在方法体中,通过 {} 包围起来
但和方法不同,没有方法名,没有返回,没有参数,只有方法体,而且不用通过对象或类显示调用,而是加载类时,或创建对象时隐式调用。
语法:

[修饰符]
{
  代码
};

说明:

  1. 修饰符可选,只能选static或者不选
  2. 使用static修饰的叫静态代码块,没有static修饰的叫普通代码块
  3. 结尾 ; 可写可不写
    理解:
  4. 相当于另外一种形式的构造器(对构造器的补充机制),可以做初始化操作
  5. 当多个构造器中都有重复的语句,可以抽取到初始化块中,提高代码的重用性
  6. 代码块的执行顺序,优先于构造器

使用细节:

  1. static代码块,随着类的加载而执行,只会执行一次。如果是普通代码块,每创建一个对象,就执行一次。
  2. 类被加载的3种情况
    ① 创建对象实例时(new)
    ② 创建子类对象实例,父类也会被加载
    ③ 使用类的静态成员时(静态属性、静态方法)

创建对象时,先进行类的加载。先加载父类,再加载子类。(加载静态属性、执行静态代码块)。然后执行构造器,执行构造器时,会默认执行super();

posted @ 2024-08-12 15:39  JuneFall  阅读(3)  评论(0编辑  收藏  举报