Java笔记:成员变量,局部变量,类变量,实例变…
2018-10-03 17:57:41来源:博客园 阅读 ()
局部变量:方法中定义的变量。
成员变量(类似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 }
11
12 }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash