java-static关键字使用情形

static修饰符使用情形

  1. 静态导包
  2. 修饰类(静态内部类)
  3. 修饰方法(静态方法)
  4. 修饰代码块(静态代码块)
  5. 修饰成员变量

1:静态导包(较少使用)

com.demo.utils包是我自己的测试工具包

package com.demo.utils.StringUtil;

public class StringUtil {
    public static boolean isBlank(String str){
        return str == null || "".equals(str.trim());
    }
    ..........
}

如果使用下面导包方式,如果要调用方法则需要以类名.方法名方式调用

import com.demo.utils.StringUtil.*;		//StringUtil.isBlack(str);

如果使用static导包方式,如果要调用方法则只需要以方法名方式调用

import static com.demo.utils.StringUtil.*;		//isBlack(str);

2:修饰类(静态内部类)

内部类分为四种

  1. 有成员内部类
  2. 静态内部类
  3. 局部内部类
  4. 匿名内部类

能用static修饰的内部类有两种(如下代码)

public class StaticClassDemo {
    //一级静态内部类
    public static class innerClassA{      
        //二级静态内部类
        public static class innerClassB{
            
        }       
    }
}
  • static内部类详解

3:修饰方法(静态方法)

使用static来修饰方法,相比于修饰成员变量,修饰方法对于数据的存储方面并没有多大的变化,因为方法本身就是存放在类的定义当中的,既方法区类的信息中。类可以使用类名.方法名的方式操作方法,避免了要new对象的资源消耗,静态方法的应用在工具类中经常被使用到,同时在JDK8新特性(接口的增强)中,可以在接口中使用static去修饰的具体方法,从而使得接口拥有具体的方法。

public class StringUtil {
    public static boolean isBlank(String str){
        return str == null || "".equals(str.trim());
    }
}

注:
1.可以使用类名.方法名去调用方法。
2.静态方法不允许直接调用非静态成员,因为在类的加载中,静态成员在类加载时优先 级高于非静态成员(实例变量,非静态方法等)。所以不能在静态方法已经被JVM加载识别的时候,方法体内存在着一个没有被JVM所加载识别的东西。
3.静态方法体内不允许使用this,super关键字。因为静态方法属于类的范畴,是通过类名.方法名进行调用的,不需要实例化出对象来调用,所以不存在对象这个概念.但this和super是属于对象的概念范畴。

4:修饰代码块(静态代码块)和修饰成员变量

  1. static修饰的代码块必须得在类中且在方法体外,class文件被加载在jvm里,static资源就开始加载(用于初始化类和对象等)
  2. 静态代码块和静态成员变量加载优先级是一样的,根据代码先后顺序加载
  3. 程序运行期间有且仅加载一次
public class Demo{
    static int num;
    static { 
        num = 1;
        System.out.println(num);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值