JAVA面向对象 static final 静态/构造/局部代码块之间的关系

1 static(静态)

1.1 概念

是java中的一个关键字
用于修饰成员(成员变量和方法)

1.2 特点

  1. 可以修饰成员变量与成员方法
  2. 随着类的加载而加载,优先于对象加载
  3. 只加载一次,就会一直存在,不再开辟新空间, 直到类消失才一起消失
  4. 静态资源也叫做类资源,全局唯一,被全局所有对象共享
  5. 可以直接被类名调用
  6. 静态只能调用静态,非静态可以随意调用
  7. static不能和this或者super共用,因为有static时可能还没有对象

在这里插入图片描述

2 静态代码块、构造代码块、局部代码块

2.1 静态代码块格式

在这里插入图片描述
静态资源随着类的加载而加载,并且只被加载一次,一般用于项目的初始化
特点: 被static修饰,位置在类里方法外

2.2 三种代码块的比较

  1. 静态代码块:在类加载时就加载,并且只被加载一次,一般用于项目的初始化
  2. 构造代码块:在创建对象时会自动调用,每次创建对象都会被调用,提取构造共性
  3. 局部代码块:方法里的代码块,限制局部变量的范围
//代码块
//        1.静态代码块
//        位置:类里方法外,格式:static{ }
//        执行时机:随着类的加载而加载,优先与对象加载,并且只加载一次
//        作用:用于加载一些需要第一时间就加载并且只加载一次的资源
//        2.构造代码块
//        位置:类里方法外,格式:{ }
//        执行时机:创建对象时触发,优先于构造方法执行
//        作用:用于提取所有构造方法的共性功能
//        3.局部代码块
//        位置:方法里,格式:{ }
//        执行时机:调用当前所处方法时才触发
//        作用:用来控制变量的作用范围,变量的作用范围越小越好
//        4.执行顺序:
//        静态代码块->构造代码块->构造方法【创建好对象】->调用局部代码块所处的普通方法
//        5.为什么是这样的顺序呢?
//        静态代码块它也是静态资源,静态资源随着类的加载而加载,优先于对象的创建
//        静态资源只加载一次,并且一直存在,直到类消失,它才会消失
package cn.block;
/*本类用于测试代码块之间的关系*/
public class TestBlock {
    public static void main(String[] args) {
        //7.创建对象进行测试
        /*1.在创建对象之前,会先自动执行静态代码块,而且此静态代码块只执行一次*/
        /*2.每一次创建对象时,都会调用构造代码块与构造方法,构造代码块先执行*/
        Person p = new Person();
        Person p2 = new Person();//再次创建对象,静态代码块也不会执行了,只执行一次
        /*3.当对象调用方法时,如果方法里有局部代码块,局部代码块才会被触发*/
        p.sleep();
    }
}
//1.抽象封装形成一个Person类
class Person{
    //2.创建静态代码块
    /*静态代码块:
      位置:类里方法外
      触发时机:静态代码块也是静态资源,随着类的加载而加载,优先于对象加载,并且只加载一次
      作用:用于加载一些需要第一时间就加载,并且只加载一次的资源
    * */
    static{
        System.out.println("我是静态代码块~");
    }
    //3.创建构造代码块
    /*构造代码块:
      位置:类里方法外
      触发时机:创建对象时触发,而且要优先于构造方法执行
      作用:用于提取所有构造方法的共性功能
    * */
    {
        System.out.println("我是构造代码块~");
    }
    //4.创建构造方法
    /*构造方法是与类同名且没有返回值类型的方法,用于创建对象,在创建对象时触发*/
    public Person(){
        System.out.println("我是构造方法~");
    }
    //5.创建普通方法
    public void sleep(){
        System.out.println("我是普通方法~快醒醒,起来嗨~");
        //6.创建局部代码块
        /*局部代码块
          位置:方法里
          执行时机:调用本方法时触发
          作用:用来控制变量的作用范围,变量的作用范围越小越好
        * */
        {
            System.out.println("我是局部代码块~");
        }
    }
}

3 final(最终)

3.1 概念

  1. 是java的一个关键字
  2. final是最终的意思
  3. final可以修饰类,方法,成员变量
    初衷:java出现继承后,子类可以更改父类的功能,当父类的功能不许子类改变时,可以利用final关键字修饰父类。

3.2 特点

  1. 被final修饰的类,不能被继承
  2. 被final修饰的方法,不能被重写
  3. 被final修饰的变量是个常量,值不能被改变
  4. 常量的定义形式:final 数据类型 常量名 = 值
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值