Chinaunix首页 | 论坛 | 博客
  • 博客访问: 310168
  • 博文数量: 72
  • 博客积分: 3111
  • 博客等级: 中校
  • 技术积分: 668
  • 用 户 组: 普通用户
  • 注册时间: 2009-07-30 15:45
个人简介

朝着心的方向前进

文章分类

全部博文(72)

文章存档

2014年(5)

2013年(1)

2012年(1)

2011年(1)

2010年(24)

2009年(40)

我的朋友

分类: 嵌入式

2012-07-06 11:41:01

 

先一一分析一下这几个东东:实例方法,实例变量,类方法,类变量。

实例变量(instance variable):或叫实例域、实例字段(instance field),或叫成员变量(member variable)。实例的变量,每个实例的变量可能不同。

实例方法(instance method):或叫成员方法(member method)。供实例用的方法,必须要先有实例,才能通过此实例调用实例方法。

类变量(class variable):或叫静态域、静态字段(static field),或叫静态变量(static variable)。出现在这样的情况下:一个类的所有实例需要一个公有的属性,比如,一,统计实例个数;二,常量。类变量与类直接关联在一起。内存当中只有一个地方存放这个变量。任何实例都可以修改它的值(前提是它没有被final修饰符修饰,不然就是常量),但是,访问类变量并不需要实例,用类就可以操作了。

类方法(class method):跟类变量的基本特点一样。供类用的方法,可以没有实例,直接通过类来调用类方法。

从形式上看,类变量和类方法,比一般的变量和方法多了一个static修饰符。因为这个原因,类变量和类方法也被叫做静态变量和静态方法。

它们的使用方法:

  1. 实例方法可以直接访问实例变量,调用实例方法;
  2. 实例方法可以直接访问类变量,调用类方法。但不推荐这么做,原因是不清晰,容易把类变量误认为是实例变量,把类方法误认为是实例方法(借助IDE,它会给出警告信息。);
  3. 类方法可以直接调用类变量和类方法;
  4. 类方法不能直接调用实例变量和实例方法;
  5. 类方法里面不能使用“this”关键字,因为没有实例存在,“this”不知道引用哪个实例。

程序代码:


点击(此处)折叠或打开

  1. public class MyClass {
  2.     public static String classVariable = "Class variable.";
  3.     public String instanceVariable = "Instance variable.";

  4.     public static void classMethod() {
  5.         System.out.println("Class method.");
  6.     }

  7.     public void instanceMethod() {
  8.         System.out.println("Instance method.");
  9.     }

  10.     public static void main(String[] args) {
  11.         //call another class method via a class method

  12.         classMethod();

  13.         //call class method via class

  14.         MyClass.classMethod();

  15.         //access class variable via class

  16.         System.out.println(MyClass.classVariable);
  17.         System.out.println(classVariable);

  18.         MyClass instance = new MyClass();
  19.         //call class method via instance reference

  20.         instance.classMethod();
  21.         //access class variable via instance reference

  22.         System.out.println(instance.classVariable);

  23.         //call instance method via instance reference

  24.         instance.instanceMethod();
  25.         //access instance variable via instance reference

  26.         System.out.println(instance.instanceVariable);
  27.     }
  28. }

注意这样一个特殊的情形:如果已有一个类变量,再定义一个方法去操作这个类变量。那么此方法可以不加static修饰符,本质上仍然是一个类方法。但是,现在就只能通过该类的一个实例,才能调用这个方法了。(这是典型的吃多了没事干。仅存活于某些笔试,面试题中。)

参考文章:


阅读(5795) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~