静态与动态

目录

1.动态方法与静态方法

1.动态方法

2.静态方法

2.动态变量和静态变量

1.动态变量

2.静态变量

3.相对优势与使用场景

4.静态代码块


1.动态方法与静态方法

1.动态方法

动态方法是指在类中定义的,需要先创建该类实例后才能使用的方法。通常用于定义需要操作类内部成员变量、方法的行为。在 Java 中,所有非静态方法都是动态方法。例如:

public class Person {
    private String name;
    private int age;

    // 动态方法
    public void sayHello() {
        System.out.println("Hi, I'm " + name + ", " + age + " years old.");
    }
}

// 创建实例并调用动态方法
Person person = new Person();
person.name = "John";
person.age = 28;
person.sayHello();

2.静态方法

静态方法是指在类中通过 static 关键字定义的方法,可以直接使用类名调用,而不需要创建该类的实例。静态方法通常用于定义和实现通用的工具函数,例如可以不依赖类的任何实例的数学函数或IO操作等。静态方法不可以使用非静态变量或调用非静态方法。例如:

public class MathUtils {
    public static int add(int a, int b) {
        return a + b;
    }
}

// 调用静态方法
int result = MathUtils.add(1, 2);

2.动态变量和静态变量

1.动态变量

动态变量(实例变量)是指属于类的一个实例的变量,在实例化对象时候被初始化,在每个对象的生命周期内保留一份副本。通过类的实例来访问它们。动态变量通常包含了对象状态数据,例如一个人的名字、年龄等属性信息。例如:

public class Person {
    private String name;    // 动态变量
    private int age;        // 动态变量

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    // 动态方法
    public void sayHello() {
        System.out.println("Hi, I'm " + name + ", " + age + " years old.");
    }
}

// 创建实例并访问动态变量
Person person = new Person("John", 28);
person.sayHello();

2.静态变量

静态变量(类变量)是指使用 static 关键字定义的变量,它属于整个类,从属于类而不是某个实例。静态变量只会被初始化一次,也就是在整个程序的生命周期中只会有一个拷贝,而不是每个实例都拥有一个。静态变量通常用于定义和表示与类级别相关的信息,例如统计某个类的实例数等。使用类名来直接进行访问,不需要将其实例化。例如

public class Person {
    public static String KIND = "Human"; // 静态变量

    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

// 访问静态变量
String kind = Person.KIND;

3.相对优势与使用场景

  1. 使用静态方法的情况:
  • 方法不需要访问或更改任何成员变量。
  • 方法不依赖任何实例,而是直接使用它们的参数。
  • 方法通常是工具函数,可以被多个类或方法重复利用。

例如 Math 类中大部分的方法,如 Math.abs(), Math.max(), Math.pow() 等,都是静态方法,它们都独立于数学对象本身,仅仅对参数进行计算而已。

  1. 使用动态方法的情况:
  • 方法需要访问或更改类实例的成员变量。
  • 方法需要对实例进行一些特定的行为和逻辑操作。
  • 方法需要重写继承的操作。
  • 方法涉及到面向对象的多态性等。

例如,对于 Person 类,sayHello() 方法涉及到类实例的成员变量 “name” 和 “age”,并且方法行为依赖于这些成员变量的值,因此需要通过动态方法来具体实现。另一个例子比如在一个类继承自父类并且需要重新定义父类的行为,这时需要用动态方法(覆盖重写父类的方法)来实现子类所特有的行为。

4.静态代码块

在 Java 中,静态代码块是一段被 static 关键字修饰、被花括号 {} 包含的代码块,在类的加载阶段执行。静态代码块可以用来在类加载时完成一些静态变量的初始化、静态资源的加载等操作。
静态代码块的语法如下所示:
 

public class MyClass {
    static {
        // 静态代码块中的逻辑代码
    }
}

当 JVM 第一次使用该类时,会对其进行初始化。这会导致静态代码块中的代码被执行,这些代码可以用于初始化类的静态变量或执行其他的初始化逻辑,并且只会执行一次。另外,如果类定义了多个静态代码块,它们会按照在代码中出现的顺序依次执行。
静态代码块可以用于:

初始化静态变量。可以通过在静态代码块中初始化静态变量来确保其初始状态是正确的。
加载资源文件。可以在静态代码块中加载外部的资源文件,例如图片、音频文件等,并将其作为静态变量存储在内存中以供后续的访问。
初始化连接池或其他的资源。在静态代码块中执行一些复杂的初始化操作,例如初始化连接池或其他的资源,这可以保证这些资源在类加载时就被初始化并且在整个程序生命周期内可供使用。

使用静态代码块时需要注意的是,其主要用于在类加载时初始化静态变量和执行其他初始化操作,因此代码块中的代码应该尽可能地简洁。另外,静态代码块不能访问非静态变量和方法,因为在其执行时实例还没有被创建。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

*kkkk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值