Java基础——static关键字

本是古典 何须时尚 2022-05-21 10:56 273阅读 0赞

1. 修饰成员变量和方法,让它们变为类的所属,而不是对象的所属

  1. 当修饰成员变量时,其在内存中位于静态存储区。
  2. static修饰成员方法最大的作用,就是可以使用”类名.方法名”的方式操作方法,避免了先要new出对象的繁琐和资源消耗,不过它也有使用的局限,一个static修饰的类中,不能使用非static修饰的成员变量和方法

2. 静态块

首先我们需要知道一个对象的初始化过程

  1. 当new一个对象时,static修饰的成员变量首先被初始化,随后是普通成员,最后调用类自己的构造方法完成初始化。
  2. 更进一步来讲,被static修饰的方法在第一次被调用时,即使没有new对象,其内部所有static修饰的方法都会完成初始化,并且只需要初始化一次即可。

    class Book{

    1. public Book(String msg) {
    2. System.out.println(msg);
    3. }

    }

    public class Person {

    1. Book book1 = new Book("book1成员变量初始化");
    2. static Book book2 = new Book("static成员book2成员变量初始化");
    3. public Person(String msg) {
    4. System.out.println(msg);
    5. }
    6. Book book3 = new Book("book3成员变量初始化");
    7. static Book book4 = new Book("static成员book4成员变量初始化");
    8. public static void funStatic() {
    9. System.out.println("static修饰的funStatic方法");
    10. }
    11. public static void main(String[] args) {
    12. Person.funStatic();
    13. System.out.println("****************");
    14. Person p1 = new Person("p1初始化");
    15. }
  1. /**Output
  2. * static成员book2成员变量初始化
  3. * static成员book4成员变量初始化
  4. * static修饰的funStatic方法
  5. * ***************
  6. * book1成员变量初始化
  7. * book3成员变量初始化
  8. * p1初始化
  9. */
  10. }

静态块是指,可以将static修饰的成员变量统一放在一个以static开始,用花括号包裹起来的块状语句中,将上面的例子稍微修改一下,结果并无二致。

  1. class Book{
  2. public Book(String msg) {
  3. System.out.println(msg);
  4. }
  5. }
  6. public class Person {
  7. Book book1 = new Book("book1成员变量初始化");
  8. static Book book2;
  9. static {
  10. book2 = new Book("static成员book2成员变量初始化");
  11. book4 = new Book("static成员book4成员变量初始化");
  12. }
  13. public Person(String msg) {
  14. System.out.println(msg);
  15. }
  16. Book book3 = new Book("book3成员变量初始化");
  17. static Book book4;
  18. public static void funStatic() {
  19. System.out.println("static修饰的funStatic方法");
  20. }
  21. public static void main(String[] args) {
  22. Person.funStatic();
  23. System.out.println("****************");
  24. Person p1 = new Person("p1初始化");
  25. }
  26. /**Output
  27. * static成员book2成员变量初始化
  28. * static成员book4成员变量初始化
  29. * static修饰的funStatic方法
  30. * ***************
  31. * book1成员变量初始化
  32. * book3成员变量初始化
  33. * p1初始化
  34. */
  35. }

总结他们的初始化顺序就是static修饰的最先初始化,之后是类中的方法,最后是类的构造函数

3. 静态导包

以下面代码为例

  1. /* PrintHelper.java文件 */
  2. package test;
  3. public class PrintHelper {
  4. public static void print(Object o){
  5. System.out.println(o);
  6. }
  7. }
  8. /* App.java文件 */
  9. import static test.PrintHelper.*;
  10. public class App
  11. {
  12. public static void main( String[] args )
  13. {
  14. print("Hello World!");
  15. }
  16. /**Output
  17. * Hello World!
  18. */
  19. }

而在App.java文件中,我们使用了static关键字导入PrintHelper类,它的作用就是将PrintHelper类中的所有类方法直接导入。不同于非static导入,采用static导入包后,在不与当前类的方法名冲突的情况下,直接可以采用”方法名”去调用类方法,就好像是该类自己的方法一样使用即可。

4. 总结

static是java中非常重要的一个关键字,而且它的用法也很丰富,主要有四种用法:

  1. 用来修饰成员变量,将其变为类的成员,从而实现所有对象对于该成员的共享;
  2. 用来修饰成员方法,将其变为类方法,可以直接使用“类名.方法名”的方式调用,常用于工具类;
  3. 静态块用法,将多个类成员放在一起初始化,使得程序更加规整,其中理解对象的初始化过程非常关键;
  4. 静态导包用法,将类的方法直接导入到当前类中,从而直接使用“方法名”即可调用类方法,更加方便。

参考文章:[java]static关键字的四种用法

发表评论

表情:
评论列表 (有 0 条评论,273人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Java语法基础-static关键字

    static关键字说明 “static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过...

    相关 java基础-关键字static

    在Java中并不存在全局变量的概念,但是我们可以通过static来实现一个“伪全局”的概念,在Java中static表示“全局”或者“静态”的意思,用来修饰成员变量和成员...