关闭

Java的内存思维

标签: 内存java静态属性方法-动态
202人阅读 评论(0) 收藏 举报
分类:

风吹山岗
2016-05-30

我们这一节主要理解并解决以下问题:
1 .Java中调用属性与方法有什么规则?
2. 什么时候用静态属性?什么时候用动态属性?
3. 类内部动态方法调用动态属性/方法为什么可以不new?
4. Test t = new Test();与Test t = null;的区别?

在java内存中,凡是静态的(属性或方法),虚拟机在调用main()方法去运行程序时,会在内存开辟一块空间。而这块空间里面就存储着这些的静态的属性和方法。


当class B想去调用这个class A里面静态的属性或方法时,可以直接通过类调用,即【类名.属性/方法名】。相当于这些静态的东西全都在一个房间里面,所以你想找一个静态的朋友,直接在房间里面找就可以了,而不用打开门出去找。
但是动态的东西,我们就要打开房门,去new 一个新的房间,新房间就会存放着动态的东西。所以调用动态的时候,先创建(new)一个对象,再用对象去调用。即开辟一个新房间给动态的朋友。需要注意的是,新房间之间是相互独立,互不干扰的。例如:int a = 3;
T t1 = new T(); System.out.println( t1.a);
T t2 = new T();System.out.println( t2.a);
刚开始都是输出3.但是把t2.a = 4,在输出。结果是t1.a = 3; t2.a = 4 ;这些在各自房间做出的改变是不会影响其他房间的。
所以第一个问题,我们就从它是静态还是动态的方面着手。
那什么时候用静态,什么时候用动态?从上面房间的例子,我们可以知道,新房间都是给动态的,静态的都在第一个类创建的老房间里面。而且静态的只能有一份,即只有一个老房间,所以当静态的东西被修改之后,它在内存的值就真的被修改了。而新房间可以有多间。也就是说,在一些需要公用的,保持它唯一性的数据上就可以让它成为静态,而一些有多种可能性的就用动态。比如在一个银行ATM系统中,用户的账号、密码、余额这些数据就可以用静态的属性去定义。因为是唯一的。而取款、转账这些操作方法,我们就可以定义为动态的。因为多个用户都需要去调用它。
关于第三个问题,我想看下来就很清楚了吧。因为动态的东西,他们都在同一个空间里面,所以直接调用就可以,不用重新再new。
TestA ta = new TestA();与TestA ta = null;的区别?
前者是已开创了一个内存空间,里面存放着TestA的属性和方法;后者是向内存预定一个空间,但什么也没有存放。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1487次
    • 积分:97
    • 等级:
    • 排名:千里之外
    • 原创:7篇
    • 转载:1篇
    • 译文:0篇
    • 评论:2条
    最新评论