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

来源:互联网 发布:qq空间个性域名注册 编辑:程序博客网 时间:2024/06/15 10:03

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);    }

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

原创粉丝点击