Java学习记录之static
发布日期:2021-05-24 05:19:33 浏览次数:16 分类:精选文章

本文共 2407 字,大约阅读时间需要 8 分钟。

静态方法和静态成员变量在Java中是与类相关联的,而不是与特定对象相关联。这样一来,在使用这些静态资源时,可以省去创建对象的步骤,从而简化了代码。

当一个方法或变量被标记为static时,它们就成为了类的一部分,而不是对象的一部分。这意味着这些成员可以通过类名直接调用或访问,而无需依赖于特定对象。下面的示例展示了静态方法和静态变量的使用:

public class MyClass {
// 非静态成员变量
int num;
// 静态成员变量
static int numStatic;
// 非静态成员方法
public void method() {
// 非静态方法可以访问非静态成员变量和静态成员变量
System.out.println(num);
System.out.println(numStatic);
}
// 静态成员方法
public static void methodStatic() {
// 静态方法可以访问静态成员变量
System.out.println(numStatic);
// 静态方法不能访问非静态成员变量
// System.out.println(num); // 错误的用法
}
}

通过对象调用静态方法或访问静态变量通常是不推荐的,尽管在编译时这也是可行的。因为这看起来更像非静态成员的调用,而不是通过类名直接调用。以下是一些示例代码:

public class Demo01StaticMethod {
public static void main(String[] args) {
MyClass obj = new MyClass();
// 非静态方法需要使用对象
obj.method();
// 静态方法可以通过对象或类名调用
obj.methodStatic();
MyClass.methodStatic(); // 推荐的用法
}
}

静态变量和静态方法的正确访问方式如下:

  • 静态变量:类名称.静态变量
  • 静态方法:类名称.静态方法(参数)

注意事项:

  • 静态不能直接访问非静态:静态成员不能访问非静态成员,反之亦然。这是因为静态成员在内存中占据的位置与非静态成员分开。

  • 静态方法中不能使用thisthis表示当前对象,静态方法中不能使用它,因为静态方法可以通过类名独立于任何一个对象调用。

  • 现在,让我们深入探讨静态代码块。

    静态代码块

    静态代码块与静态初始化块有关,它们用于初始化静态成员变量和代码。静态代码块只在第一次类被使用时运行一次。这与类的构造函数执行顺序不同,构造函数每次新实例化时都会执行。

    示例代码:

    public class Person {
    static {
    System.out.println("静态代码块执行了!");
    }
    public Person() {
    System.out.println("构造函数执行了!");
    }
    }

    运行结果:

    静态代码块执行了!
    构造函数执行了!

    每次新实例化都会执行构造函数,而静态代码块只在第一次使用时执行。

    典型用途:一个典型的用途是初始化一组静态数据或执行类级别的初始化操作。例如,初始化一个包含常数的数组。

    public class MyClass {
    static {
    // 初始化静态数组
    String[] staticLanguages = new String[] {
    "Java", "Python", "C#", "JavaScript"
    };
    }
    }

    工具类的静态方法:

    Java的工具类中有许多静态方法非常有用。例如,java.util.Arrays 提供了许多静态方法来操作数组。两个常用的静态方法是 toStringsort

    • public static String toString(数组):将数组转换为字符串。
    • public static void sort(数组):对数组进行排序。

    如下的代码展示了如何使用这些方法:

    public class Demo03Arrays {
    public static void main(String[] args) {
    int[] intArray = {10, 20, 30};
    String intStr = Arrays.toString(intArray);
    System.out.println(intStr); // 输出: [10, 20, 30]
    String[] array1 = {"bbb", "aaa", "ccc"};
    Arrays.sort(array1);
    System.out.println(Arrays.toString(array1)); // 输出: [aaa, bbb, ccc]
    }
    }

    关于排序的注意事项:

    • 对于整数数组,默认排序顺序是从小到大。
    • 对于字符串数组,默认排序顺序是按照字母顺序。
    • 对于自定义对象,需要实现Comparable接口。

    通过理解这些知识点,你可以更好地利用静态方法和静态变量,从而提高代码的可维护性和效率。

    上一篇:Java学习记录之Math
    下一篇:Java学习记录之String

    发表评论

    最新留言

    留言是一种美德,欢迎回访!
    [***.207.175.100]2025年04月30日 08时27分19秒