2022-07-27 第4组 蒋萍 代码块和static关键字

面向对象(7)

类的内部结构:属性、方法、构造器、代码块、内部类

image

1、代码块

??: 初始化块,属于类的成员,是将一些逻辑语句封装在方法体中,(但不是方法体)通过{}包裹起来;代码块没方法名,没参数,没返回值,没返回权限,它不需要通过对象或类进行显式调用,它会在类加载或创建对象时隐式调用

2、代码块分类

2.1 静态代码块

静态变量:静态变量不能声明在内部类还有方法里,并且在内存中只有一个拷贝空间

  • 一个类被加载时被调用一次,做一些初始化工作
static{
    // 静态代码块,方法里能写啥,这里就能写啥
}
  • 静态代码块不能存在任何方法体中

  • 普通变量只能通过对象来调用,是不能放在静态代码块中的。

2.2 实例代码块

  • 每次创建对象都会被调用一次
public class name{
    {
        System.out.println("实例代码块");
    }   
}
  • 造两个对象时,静态代码块执行一次,实例代码块有几个对象执行几次

  • 两种代码块都可以在一个类里写多个(一般都不写多个)

面试:静态块优于其他,父类优于子类

(1)当没有继承关系(1个类):执行顺序为 静态块,实例块,构造器

public class CodeBlock {
    {
        System.out.println("实例代码块"); // 2
    }
    static {
        System.out.println("静态代码块"); // 1
    }
    public CodeBlock(){
        System.out.println("无参构造函数"); // 3
    }

    public static void main(String[] args) {
        new CodeBlock(); // 测试

    }
}

(2)有继承关系:父类静态块,子类静态块,父类实例块,父类构造,子类实例块,子类构造器

  • 静态块优于其他,父类优于子类

3、static关键字

  • 可以修饰属性、方法、代码块

  • static修饰的结构,不属于任何一个对象

3.1 static修饰变量

static 修饰的变量是常量吗??

不是,static 修饰的变量是唯一的,但不是不变的,加上final修饰的就是常量

  • static修饰的结构,不属于任何一个对象,不依赖于对象,没对象也能调用

调用时:类名.属性名

3.2 static修饰类

image

3.3 static修饰方法 (也叫类方法或静态方法)

调用时,不用对象

image

4、static内存解析

  • 垃圾回收会忽略static修饰的结构,就是用完不会被回收,static的变量或方法在方法区

  • 不属于某一实例对象,只存在于方法区,比如工具类

  • 调用静态结构:‘ 类名. ’的方式即可

尽量别用静态

5、实例方法 和 静态方法的互相调用

实例方法要通过 对象.方法名 的方式调用

  • 静态结构随着类的加载而加载;

​ 非静态结构随对象的创建而加载

  • 在Java中调用实例方法必须要有主体(要用实例方法就得用对象)

​ - 静态方法无论在哪,包括构造器,都是通过类名.方法名调用

​ 同一个类的静态调用静态时是可以省略类名的

  • 5、静态方法没有重写的概念

6、静态方法怎么用

Arrays.toString()

Arrays.sort()

String.ValueOf()

啥时候用呢??

设计一些工具类时

其他

image

一些优化:

image

补充

  • 接口中的常量默认有public final static

  • 无论是super还是this都不能用在静态结构(包括代码块、方法)里 ,why ?????
    this和super分别都可以调属性和方法还有构造器,this.methodName 和 super.methodName 看上去是类.方法()
    静态结构是属于类的,静态结构是优先于对象存在的,

  • this和 super 什么时候出现呢??
    必须依赖于对象才能出现(必须有实例才能用)
    静态方法没有方法重写,继承或者接口对于静态方法来说毫无意义,那就和super无关
    静态结构出现的时候,对像还没产呢,而 this代表当前对象,

(开发中常量的声明基本上是这样的)

最后

今天晚上状态不错,继续努力 !!
自己敲代码实现记忆更深刻,感觉今天的导图做的不太好,会继续改进的。

posted @ 2022-07-27 22:48  来日可追  阅读(18)  评论(0编辑  收藏  举报