- 2024.03.01
面对对象高级部分
- 类变量(静态变量):即static修饰的变量名,为同一个类的所有对象所共享,static修饰的变量在类加载的时候就初始化了,类变量是随着类的加载而创建,随着类的消亡而销毁,所以即使没有创建对象实例也可以访问类变量
- 类方法(静态方法):类方法和普通方法都是随着类的加载而加载,将结构信息存储在方法区,类方法中无this参数,普通方法中隐含着this参数;类方法只能访问类方法和类变量
- 非静态方法可以访问静态成员和非静态成员
- main()方法是由JVM虚拟机调用,所以main()方法需要是public的访问权限;且JVM在调用main()时不需要创建对象,所以main()是static修饰的;形参中的数组可以接收执行java命令时,在java命令后传递给所运行的类的参数
- 在main()方法中,可以直接访问main()方法所在类的静态方法和静态成员,但是不能直接访问该类的非静态成员,需要创建该类的对象实例后才能去访问
- 代码块:又称初始化块,属于类的成员(即是类的一部分),不能通过对象或类显示调用,而是加载类的时或创建对象时隐式调用;代码块分为静态代码块或非静态代码块,所以代码块前的修饰符只能选择static或者不选;代码块可以相当于另一种形式的构造器(对构造器的补充机制),可以做初始化的操作;
- 代码块应用场景:若多个构造器中有冗余代码,可以放在代码块中,提高代码的重用性,不论使用哪个构造器创建对象时,都会先调用代码块中的内容;代码块的执行会先于构造器的执行
- static代码块随着类的加载而执行,只会执行一次,如果是普通代码块,每创建一个对象就会执行
- 对于普通的代码块:在创建对象实例时会被隐式调用,被创建一次就调用一次,如果只是使用该类的静态成员时,普通代码块不会执行
类在什么时候会被加载?
- 创建对象实例时(new)
- 创建子类对象实例,父类也会被加载
- 使用类的静态成员时(属性和方法)
创建一个对象时,一个类的调用顺序是如何的?
-
- 先调用静态代码块和静态变量初始化(这两者的优先级相同,如果有多个静态代码块和静态变量初始化,则按照定义顺序调用)
- 调用普通代码块和普通属性的初始化(这两者的优先级相同,如果有多个普通代码块和普通属性初始化,则按照定义顺序调用)
- 调用构造方法