四、实例变量和类变量

来源:互联网 发布:unity3d 外发光shader 编辑:程序博客网 时间:2024/06/11 05:40

读书笔记

类内成员变量分为:

有static:静态变量/类变量。属于类本身的特性

无static:非静态变量/实例变量。属于对象


开发中需要我们将内存分配合理


代码如下

Person.java

public class Person{String name;int age;static int eyenum;public void info(){System.out.println("我的名字是:" + name + ",我的年龄是:" + age);}}


FieldTest.java

public class FieldTest{public static void main(String[] args){Person.eyenum = 2;//_________(1)_________System.out.println("Person的eyenum属性:" + Person.eyenum);Person p1 = new Person();p1.name = "BaiJie";p1.age = 19;System.out.println("通过p1的eyenum属性:" + p1.eyenum);//_________(2)____________p1.info();Person p2 = new Person();p2.name = "XuHongxiang";p1.age = 19;p2.eyenum = 3;//_________(3)___________System.out.println("---------------\n通过p1的eyenum属性:" + p1.eyenum);System.out.println("通过p2的eyenum属性:" + p2.eyenum);System.out.println("Person的eyenum属性:" + Person.eyenum);}}


警告如下



运行结果

Person的eyenum属性:2
通过p1的eyenum属性:2
我的名字是:BaiJie,我的年龄是:19
---------------
通过p1的eyenum属性:3
通过p2的eyenum属性:3
Person的eyenum属性:3


代码分析

(1)::把Person.eyenum赋值为2。

(2):由于eyenum本质上是Person类的类变量而非实例变量,所以即使JAVA允许通过Person实例来访问,但底层依然会转换为通过Person访问eyenum类变量。

(3):当通过p2对eyenum类变量赋值,实际上仍然是对Person类的eyenum类变量进行赋值。

故p1、p2、Personl类访问eyenum时都是输出3。





0 0