static关键字

static关键字,第1张

static关键字

文章目录
  • static关键字
    • static关键字是什么
    • static关键字的特殊性
    • static关键字的用途
      • static静态方法和static静态成员变量
      • static代码块

static关键字 static关键字是什么

在《Java编程思想》说:   “static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。”。

static关键字的特殊性
  • static修饰的成员方法和成员变量会在类被加载的时候就被初始化,而且只加载一次,从属于类。而普通的方法和成员变量从属于对象
  • static修饰的静态元素可以通过直接 类名.静态元素 来使用
  • static修饰的静态元素不可以使用this,super关键字
static关键字的用途

static可以用来修饰类的成员方法、类的成员变量,还可以编写static代码块来优化程序性能 。

static静态方法和static静态成员变量

static方法一般称作静态方法
代码案例:

public class TestStatic {
    //静态成员变量
    private static String nameStatic = "静态成员变量";
    //非静态成员变量
    private String name = "非静态成员变量";

    public void test1(){
        test2();//可以正常调用,非静态方法可以调用静态方法
        System.out.println(nameStatic);//正常访问,在非静态方法中可以访问静态成员变量
        System.out.println(name); //正常访问
        System.out.println("非静态方法");
    }

    public static void test2(){
        //test1(); //调用test1报错,静态方法中不能调用非静态方法
        //System.out.println(name);//访问name会报错,在静态方法中不能使用非静态成员变量
        System.out.println(nameStatic);
        System.out.println("静态方法");
    }

    public static void main(String[] args) {
        TestStatic.test2();//可以通过类名直接访问静态方法
        //TestStatic.test1();//报错,不可以直接访问非静态方法。非静态方法需要new对象访问,非静态成员变量也是同理。
        new TestStatic().test1();
    }
}

由上面的代码可以看出,如果想在不创建对象的情况下调用某个方法,就可以将这个方法设置为static。最常见的静态方法就是main方法。

static代码块
  • static代码块可以置于类的任何地方,类可以有多个static代码块
  • 在类初次被加载的时候,会按照static块的顺序来执行每个static块,并且只会执行一次
  • 静态代码块执行优先级高于非静态的初始化块

static代码块的作用是可以优化程序性能,因为static代码块只会在类加载的时候执行一次,看以下代码:

public class Person {
    private String name;

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

    //自我介绍
   public void introduce(){
        String start = "hello,我是";//介绍的开头语
       System.out.println(start + this.name);
   }
}

introduce是用来自我介绍当前人的,但是每次调用都会定义一个start,分配一个内存空间给start,这样就造成了空间浪费。那我们可不可以只初始化一次start了,这个时候我们就可以用到static代码块来优化性能了:

public class Person {
    private String name;
    private static String start;
    
    //static静态代码块在类初次被加载的时候调用,并且只初始化一次
    static {
        start = "hello,我是";//介绍的开头语
    }

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

    //自我介绍
   public void introduce(){
       System.out.println(start + this.name);
   }
}

因此,很多时候会将一些只需要进行一次的初始化 *** 作都放在static代码块中进行

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5686309.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存