JAVA语言之Java笔记:成员变量,局部变量,类变量,实例变量以及注意事项
小标 2019-03-04 来源 : 阅读 1032 评论 0

摘要:本文主要向大家介绍了JAVA语言之Java笔记:成员变量,局部变量,类变量,实例变量以及注意事项,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了JAVA语言之Java笔记:成员变量,局部变量,类变量,实例变量以及注意事项,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

JAVA语言之Java笔记:成员变量,局部变量,类变量,实例变量以及注意事项

局部变量:方法中定义的变量。


成员变量(类似C中的全局变量):成员变量定义在方法体和语句块之外。成员变量就概括描述了类中的变量,不区分static。是以下变量的统称。


类变量(静态变量):独立于方法之外的变量,属于类本身。需要static修饰,事实上,类变量就是以static修饰的独立于方法之外的成员变量。


类变量必须在方法、构造方法和语句块之外。
无论一个类创建了多少个对象,类只拥有类变量的一份拷贝。
实例变量(非静态变量):独立于方法之外的变量,依赖实例存在。不需要static修饰,事实上,实例变量就是没有static修饰的独立于方法之外的成员变量。


实例变量声明在一个类中,但在方法、构造方法和语句块之外。
当一个对象被实例化之后,每个实例变量的值就跟着确定。
实例变量在对象创建的时候创建,在对象被销毁的时候销毁。
实例变量的值应该至少被一个方法、构造方法或者语句块引用,使得外部能够通过这些方式获取实例变量信息。
实例变量可以声明在使用前或者使用后。
实例变量对于类中的方法、构造方法或者语句块是可见的。一般情况下应该把实例变量设为私有。通过使用访问修饰符可以使实例变量对子类可见。
实例变量具有默认值。数值型变量的默认值是0,布尔型变量的默认值是false,引用类型变量的默认值是null。变量的值可以在声明时指定,也可以在构造方法中指定。


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         }

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 1 不喜欢 | 0
看完这篇文章有何感觉?已经有1人表态,100%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程