Java笔记:类变量,实例变量以及注意事项
程序员文章站
2022-04-25 18:25:26
类变量(静态变量):独立于方法之外的变量,属于类本身。需要static修饰。 实例变量(非静态变量):独立于方法之外的变量,依赖实例存在。不需要static修饰。 Example(from CoreJava): 假定公司需要给每一个雇员赋予唯一的标识码。 分析:每一个雇员对象都有一个自己的id域,但 ......
类变量(静态变量):独立于方法之外的变量,属于类本身。需要static修饰。
实例变量(非静态变量):独立于方法之外的变量,依赖实例存在。不需要static修饰。
example(from corejava):
假定公司需要给每一个雇员赋予唯一的标识码。
分析:每一个雇员对象都有一个自己的id域,但这个类的所有实例将共享一个nextld 域。换句话说,如果有 1000 个employee类的对象,则有 1000 个实例域 id。但是,只有一个静态域 nextld。即使没有一个雇员对象,静态域 nextld 也存在。它属于类,而不属于任何独立的对象。
代码如下(以员工jack作为第一名员工简单示例):
1 public class employee { 2 3 public static int nextid=1; 4 public int id; 5 public void setid(){ //该方法意味着下面new的对象jack的id域(实例域)被设置为静态域nextld当前的值(1),并且静态域nextld的值加1 6 id=nextid; 7 nextid++; 8 } 9 10 public void method(){ //定义一个用于输出标识码的非静态方法 11 system.out.println(id); 12 } 13 14 public static void main(string[] args){ 15 employee jack=new employee(); //new一个叫jack的员工 16 jack.setid(); //调用setid方法为jack分配一个标识码 17 jack.method(); //调用method方法输出jack的标识码 18 } 19 20 }
注:无法在静态变量中引用非静态成员(非静态变量,非静态方法),因为非静态的变量是依赖于对象存在的,对象必须实例化之后,它的变量才会在内存中存在。
解决方案:一、将变量变为静态变量,在变量类型前增加static。
二、先实例化一个对象,然后使用 对象名.变量名 来引用即可。
代码如下:
1 //以下为第二种方法,第一种方法只需在第四行public和string之间增加static即可(name即变为静态变量) 2 public class test { 3 4 public string name; //name为非静态变量 5 6 public static void main(string[] args){ 7 test learner=new test(); //在主方法(为静态方法)中要调用非静态变量name,需要先实例化一个对象learner 8 learner.name="西柚冬瓜"; //然后采用 对象名.变量名 方式来在主方法中引用非静态变量name 9 system.out.println(learner.name); 10 } 11 12 }
推荐阅读
-
C++笔记一(创建一个不带指针成员变量的类)[注意事项]
-
Java笔记:类变量,实例变量以及注意事项
-
Java 反射修改类的常量值、静态变量值、属性值实例详解
-
JAVA 基础 /第七课: 面向对象 / JAVA类的属性,类变量与实例变量
-
java - PHP5的类实例变量的声明问题
-
使用sql生成表对应的CRUD语句和表对应java实体类的实例变量
-
java - PHP5的类实例变量的声明问题
-
静态变量、实例变量初始化时机,以及子类隐藏父类成员时,创建子类对象的一些问题
-
使用sql生成表对应的CRUD语句和表对应java实体类的实例变量
-
C++笔记一(创建一个不带指针成员变量的类)[注意事项]