【Java基础】static关键字

通过static声明的属性或者方法可以通过类名称直接调用

static方法只能调用static属性或者方法,不能调用非static属性或者方法

非static方法则不受限,可以任意调用static声明的属性或者方法

注意:main方法本身就是一个static方法

示例1:static方法调用非static和static属性

public class StaticTest {

    static String staticStr = "这是一个静态变量";
    String norString = "这是一个普通变量";

    public static void main(String[] args){
        norString = "aa";
    }
}

运行代码会提示:Error:(10, 9) java: 无法从静态上下文中引用非静态 变量 norString

public class StaticTest {

    static String staticStr = "这是一个静态变量";
    String norString = "这是一个普通变量";

    public static void main(String[] args){
        staticStr = "aa";
    }
}

则会正常运行

示例2:static方法调用非static方法和static方法

public class StaticTest {

    static String staticStr = "这是一个静态变量";
    String norString = "这是一个普通变量";

    public static void main(String[] args){
        norFun();
    }

    public void norFun(){

    }
}

提示:Error:(10, 9) java: 无法从静态上下文中引用非静态 方法 norFun()

public class StaticTest {

    static String staticStr = "这是一个静态变量";
    String norString = "这是一个普通变量";

    public static void main(String[] args){
        norFun();
    }

    public static void norFun(){

    }
}

可以正常编译

示例三:普通方法调用static属性和方法

public class StaticTest {

    static String staticStr = "这是一个静态变量";
    String norString = "这是一个普通变量";

    public static void main(String[] args){
        new StaticTest().norFun();
    }

    public static void staticFun(){
        System.out.println("这是静态方法");
    }

    public void norFun(){
        staticStr = "aaa";
        staticFun();
    }

}
会发现编译正常通过

原因:内存可以分为四部分,栈内存、堆内存、全局数据区、全局代码区,static保存在全局数据区,所有的非static定义的结构必须是产生了实例化对象才会分配空间然后使用,而static定义的结构不受实例化对象的控制,可以在没有实例化对象的时候进行访问

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值