灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2663回复:0

[系统教程]JAVA基础教程(5)

楼主#
更多 发布于:2012-09-08 08:09


1.实例变量和类变量
我们已经知道一个类可以使用new关键字可以创建多个不同的对象,这些对象被分配不同的内存空间.具体说的话,不同的对象的实例变量将被分配不同的内存空间,如果类中的成员变量有类变量,那么所有对象的这个类变量都分配分配给相同的一处内存,改变其中一个对象的这个类变量会影响其他对象的这个类变量,也就是说对象共享类变量.如

复制代码
class Takecare
{
static int x;
int y;
}
class A
{
Takecare A1=now Takecare();
Takecare A2=now Takecare();

//在此代码中如果给x赋值那么,A1.x 和A2.x指的是同一个内存空间,无论那个对象修改都是对一个x进行操作
}


java程序执行时,类的字节码文件被加载到内存,如果该类没有创建对象,类的实例成员变量不会被分配内存.但是类中的类变量被加载到内存时,会被分配相应的内存空间.简单的说就是,没创建对象当类加载到内存时候,只有类变量(static)会被分配内存空间,只有创建对象时候实例变量才会被分配空间的.
像上面的例子里,在没有创建Takecare的对象时候,Takecare::x是有空间的即此时可以访问的,当且仅当Takecare A1=now Takecare()时A1.y才会有内存空间.
通过下面的例子体会一下,不同的对象会共享一个底

复制代码
class 梯形  
{   float 上底,高;
    static float 下底;
梯形(float x,float y,float h)
{   上底=x; 下底=y; 高=h;
    }
float 获取下底()
{   return 下底;
    }
void 修改下底(float b)
{   下底=b;
    }
}
class Example4_7
{   public static void main(String args[])
  {  梯形 laderOne=new 梯形(3.0f,10.0f,20),laderTwo=new 梯形(2.0f,3.0f,10);
       梯形.下底=200;                 //通过类名操作类变量
       System.out.println("laderOne的下底:"+laderOne.获取下底());
       System.out.println("laderTwo的下底:"+laderTwo.获取下底());
       laderTwo.修改下底(60);         //通过对象操作类变量
       System.out.println("laderOne的下底:"+laderOne.获取下底());
       System.out.println("laderTwo的下底:"+laderTwo.获取下底());
    }
}




喜欢0 评分0
游客

返回顶部