JAVA基础教程(5)
3817 点击·0 回帖
![]() | ![]() | |
![]() | 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.获取下底()); } } | |
![]() | ![]() |