java修饰实例方法、静态方法、代码块有什么不同?

在Java中,修饰实例方法、静态方法和代码块有不同的含义和作用:

  1. 实例方法的修饰符

    • 实例方法是属于类的一个对象的方法,只有在类的对象实例化后才能调用。
    • 例如,public void myMethod(),这里的public就是一个修饰符,表示该方法对所有类都是可见的。除此之外,还有protectedprivatedefault(默认访问权限,即无修饰符)等修饰符,它们用于控制方法的访问级别。
  2. 静态方法的修饰符

    • 静态方法(如public static void myStaticMethod())是属于类本身的,而不是属于类的某个对象,因此在不创建类的实例的情况下就可以直接通过类名调用。
    • 静态方法不能访问非静态成员变量,因为非静态成员变量是在对象实例化时才分配内存的,而静态方法在类加载时就已经存在。
    • 修饰符同样可以用于静态方法,控制其访问级别。
  3. 代码块的修饰符

    • 在Java中有两种类型的代码块:实例初始化块(非静态初始化块)和静态初始化块。
    • 实例初始化块:位于类的成员变量和方法之外的大括号包裹的代码块,它在创建类的实例时执行,并且在构造方法调用之前执行,可以用来初始化实例变量。
    • 静态初始化块static关键字修饰的代码块,它在类加载时执行,且只会执行一次,用于初始化静态变量或执行需要在类初始化阶段完成的操作。
public class MyClass {
    // 静态初始化块
    static {
        System.out.println("Static initialization block executed");
    }

    // 实例初始化块
    {
        System.out.println("Instance initialization block executed");
    }

    // 静态变量和静态方法
    public static int staticVar;
    public static void staticMethod() {}

    // 实例变量和实例方法
    private String instanceVar;
    public void instanceMethod() {}
}

为了更直观地理解实例方法、静态方法和代码块在Java中的作用,我们可以用一个图书馆管理系统的生活例子来说明:

  1. 实例方法(非静态方法)

    • 想象一个图书馆管理员(对象实例)负责借书和还书的工作。管理员有自己的姓名、工号等属性,而他的“借书”和“还书”操作就是实例方法
    1public class Librarian {
    2    private String name;
    3    public void borrowBook(Book book) {...} // 借书方法
    4    public void returnBook(Book book) {...} // 还书方法
    5}

    这里的borrowBookreturnBook方法是实例方法,必须先创建一个Librarian对象(即有具体的管理员在岗)才能执行这些操作。

  2. 静态方法

    • 图书馆有一个公共公告板,上面张贴着图书馆的开放时间和总藏书量等信息,这些信息并不依赖于具体哪个管理员。于是,“获取图书馆开放时间”可以被设计为一个静态方法。
    1public class Library {
    2    public static String getOpeningHours() {...} // 获取开放时间的静态方法
    3}

    不管有多少个管理员,也不论是否有管理员在场,任何人都可以直接通过Library.getOpeningHours()获取开放时间,因为这个方法与具体管理员无关,是属于整个图书馆的。

  3. 代码块

    • 初始化块就像是图书馆刚开馆时的一些准备工作,比如打开大门、摆放好桌椅等。

    • 实例初始化块:当有新的管理员上岗时,他们可能需要领取一套制服和工具。这个过程可以看作实例初始化块,每次创建管理员实例时都会执行。

    1public class Librarian {
    2    {
    3        prepareEquipment(); // 实例初始化块
    4    }
    5    private void prepareEquipment() {...} // 准备装备的方法
    6}

    每次创建一个新的Librarian对象时,都会调用prepareEquipment()方法准备管理员所需的装备。

    • 静态初始化块:图书馆刚建成时,需要统计初始的藏书数量。这个过程可以看作静态初始化块,只在类加载时执行一次。
    1public class Library {
    2    static {
    3        initTotalBooksCount(); // 静态初始化块
    4    }
    5    private static void initTotalBooksCount() {...} // 初始化总藏书数量的方法
    6}

    当类Library被加载时,不论创建了多少个对象,initTotalBooksCount()方法都只会执行一次,用于统计和设置图书馆的初始藏书数量。

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值