Java基础——三大修饰符(abstract,static,final)

一、引言

在 Java 编程中,修饰符是一种用于修改类、方法和变量行为的关键字。其中,abstract、static 和 final 是三个常用的修饰符,它们具有不同的作用和特点。理解这些修饰符的含义和使用方式,对于掌握 Java 基础编程至关重要。

二、abstract(抽象)

  • 抽象的,不是真实存在的

1.抽象类

(1)语法
public abstract class 类名{}
abstract public class 类名{}:修饰符之间的顺序不做要求
(2)使用
  1. 无法实例化对象
  2. 通常情况下,父类应为抽象类
  3. 抽象父类中仍然存在构造,作用为供子类使用
  4. 抽象类中可以存在非抽象内容
  5. 抽象父类仍然可以参与多态

2.抽象方法

(1)语法
访问修饰符 abstract 返回值类型 方法名(参数列表);
(2)使用
  1. 没有方法体

  2. 抽象方法必须存在于抽象类

  3. 通常情况下,父类中的行为方法都应该是抽象方法

  4. 子类必须对父类中的抽象方法提供重写,除非子类自身也是抽象类

    • 通常子类都应该选择重写
  5. 抽象父类的完整作用:

    1. 解决子类之间的冗余问题
    2. 强制约束子类必须拥有某些内容
    3. 强制约束子类必须重写某些方法

3.抽象的好处

  1. 更符合现实逻辑
  2. 使父类单纯的为子类服务,更贴合程序设计

三、static(静态)

1.修饰属性

(1)概念
  • 静态属性,也称为静态变量 类变量等
(2)语法
static 数据类型 属性名;
(3)使用
  1. 静态内容独立存放在方法区

  2. 静态内容在内存中只有一份,被该类所有对象共享

    • 普通属性所有对象在对象内容中都有一份
  3. 可以通过类名.静态属性名的方式直接访问静态属性

  4. 静态属性封装之后,必须调用getter|setter方法才能访问

    • getter|setter是静态的:直接通过类名.getter()|setter()访问
    • getter|setter不是静态的: 必须通过任一对象名.getter()|setter()访问

在这里插入图片描述

package com.by.entity;

public class ClassA {
    private static int count;//累加器属性

    public static int getCount() {
        return count;
    }

    public static void setCount(int count) {
        ClassA.count = count;
    }
   /* public int getCount() {
        return count;
    }

    public void setCount(int count) {
        ClassA.count = count;
    }*/


    public ClassA(){
        count++;
    }
}
package com.by.test;

import com.by.entity.ClassA;

public class Test2 {
    public static void main(String[] args) {
        ClassA ca1 = new ClassA();
        ClassA ca2 = new ClassA();
        ClassA ca3 = new ClassA();

        /*System.out.println(ca3.count);//3
        System.out.println(ca2.count);//3
        System.out.println(ca1.count);//3*/

      //  System.out.println(ClassA.count);//3

        System.out.println(ca1.getCount());
        System.out.println(ClassA.getCount());
    }
}

2.修饰方法

(1)概念
  • 静态方法,也就是函数
(2)语法
访问修饰符 static 返回值类型 方法名(形参列表){
    //操作语句
}
(3)使用
  1. 不能访问非静态内容

    1. 什么是类加载?

      第一次使用类内容时,通过ClassPath类路径找到对应的字节码文件,将字节码文件中的内容加载到虚拟机内存中的过程,称之为类加载, 通常只会发生一次.

    2. 触发类加载的时机

      1. 第一次创建类的对象
      2. 第一次访问静态内容时
      3. 通过Class.forName("全限定名")强制触发类加载
        • 全限定名:类的完整路径,也就是包名.类名
      4. 子类类加载也会触发父类的类加载
      5. 只声明引用不会触发类加载

    静态内容是在类加载时进入内存,但是非静态内容是在创建对象时进入内存

    非静态方法可以访问任何内容

  2. 无法使用this和super关键字

    • 使用静态内容时对象可能并未创建
  3. static无法修饰局部变量

    • 局部变量的作用范围使其无法成为类变量
  4. 无法修饰构造

    • 构造无法通过类名直接调用
  5. 子类可以继承和重写父类静态方法,但是在多态的前提下,仍然执行父类内容

    • 静态内容的执行关注的是引用类型

3.修饰初始代码块(了解)

(1)初始代码块
{
    //初始代码块
}
(2)使用
  1. 通常写在属性之下,构造之上
  2. 作用为构造方法共有内容的提炼,通常用于给属性赋值
  3. 在创建对象时执行,先执行初始代码块再执行构造内容,可以执行多次
(3)static修饰初始代码块
static{
    //静态初始代码块
}
(4)使用
  1. 内部内容的限制与静态方法相同
  2. 在类加载的时候执行,通常只会执行一次
  3. 作用为给静态属性赋值

四、final(最终)

1.修饰属性

final 数据类型 属性名;
  • 常量属性, 值不可改
  • 在创建时必须赋值, 两次赋值时机:
    1. 声明的时候赋值
    2. 在构造中赋值
      • 每个构造中都存在赋值语句(也可将赋值语句提炼至初始代码块)

2.修饰方法

  • 可以被继承,不可被重写

3.修饰类

  • 无法被继承

4.修饰局部变量

  • 变成常量,值不可改

5.修饰引用

  • 对象内容可改,引用地址不可改

abstract无法与private static final结合使用

private static final之间可以任意结合

五、结语

通过合理地运用这些修饰符,我们可以实现更加灵活和高效的程序设计。使用 abstract 修饰符,我们可以定义抽象类和抽象方法,提供接口规范供子类实现;使用 static 修饰符,我们可以创建全局共享的静态变量和方法,方便直接调用;使用 final 修饰符,我们可以确保常量的不可变性,并限制类和方法的继承和修改。

然而,我们也需要谨慎使用这些修饰符,避免滥用导致程序设计的混乱和可维护性的下降。我们应该根据具体的需求和场景,选择合适的修饰符来优化代码结构和实现功能。

通过对 abstract、static 和 final 修饰符的学习和理解,我们可以更好地掌握 Java 编程语言的基础知识,提升自己的编程能力,并在实际项目中写出高效、可靠的代码。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值