Java static静态属性和静态方法内存分析和注意事项静态方法不能调用非静态属性和非静态方法,普通方法可以调用静态属性和方法

Java static 静态属性和方法

1、静态属性和方法从属于类,不从属与对象

2、不能在静态方法中调用非静态变量和非静态方法

3、可以在普通方法中调用静态属性和方法

我们以下面的这个简单的Student类为例

public class Student {

    //普通属性
    private String name;

    //静态属性又称类属性
    private static String id;

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

    //静态方法又称类方法
    public static void study() {
        System.out.println(id);
    }

    //普通方法
    public void doHomework() {

    }
}

那么我们来对下面这个程序来做一下内存分析

Student s1 = new Student("张三");

这里写图片描述

我们需要注意到的是在通过类模板构建对象的时候,对象中是不包含static静态属性和方法的信息的,很简单,因为static属性和方法从属于类,可以通过类名.例如Student.study()来直接调用

Student.id

以上代码的内存分析就是直接在Student类模板中的static属性和变量专区查找指定的静态属性和方法,而无需通过s1对象

静态方法不能调用非静态属性或非静态方法

例如以下的代码是不合法的

public static void study() {
        System.out.println(name);//这是不合法的,静态方法不能调用非静态属性
    }

由于name是普通方法,外界要操纵普通属性必须通过对象,可以简单的理解为普通属性从属于对象,由于static方法从属于类,所以在静态方法中无法获取普通属性和普通方法

非静态方法可以调用静态属性或静态方法

例如以上面的例子为例,一下的代码是合理的

public void doHomework() {
        study();
        System.out.println(id);
    }

原因在于,普通方法从属于对象,可以通过这个对象确定方法区的类模板,知道了这个类模板,作为这个类模板中的一部分,静态属性和静态方法自然而然就可以访问到

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值