关闭

Java的内存思维

标签: 内存java静态属性方法-动态
253人阅读 评论(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网站的观点或立场

[笔记][思维导图]读深入理解JAVA内存模型整理的思维导图

本人记忆差,整理这个思维导图,相当于较认真的看了一遍,整个思维导图,基本上就是对原文的拷贝。 有了层级关系。和本人自己的一些理解。由于思维导图弄出来的图片大于100M了。所以就放出源文件, 更方便...
  • mr_zhuqiang
  • mr_zhuqiang
  • 2015-07-28 12:32
  • 2040

关于Java中多维数组的内存结构分析

本文是推测分析的结果,非真理性,因为JDK的源代码部分内容有限,不可把本文作为“真理”使用,仅提供参考提供给对底层感兴趣的小伙伴用来阅读之用!当然尽可能保证文章的客观性,所有的实验在各个平台进行了很多...
  • silentbalanceyh
  • silentbalanceyh
  • 2015-01-12 16:32
  • 5371

C语言二维数组的内存结构图与Java二维数组的内存结构图

C语言二维数组的内存结构图与Java二维数组的内存结构图。。。。。。
  • songshiMVP1
  • songshiMVP1
  • 2015-10-25 00:36
  • 1389

读深入理解JAVA内存模型整理的思维导图-免积分

  • 2015-07-30 09:23
  • 672KB
  • 下载

Java内存思维

1-Java方法与属性调用Java中调用属性与方法有什么规则? 不同的对象之间: 访问类的静态属性:类名.属性;对象名.属性 访问类的动态属性:对象名.属性 调用类的静态方法:类名.方法名()...
  • Enjolras_fuu
  • Enjolras_fuu
  • 2017-03-01 15:26
  • 153

静态存储区、堆、栈的内存空间分配——合理设立对照组与发散思维

除了对照组的设立,本文能从单纯对比strlen与sizeof的单位,发展到研究strlen对结束符的判定,再到观察对比数组地址,到最后的堆栈空间,还有windows与linux栈指针的增长方向,堆栈等...
  • huqinweI987
  • huqinweI987
  • 2014-04-10 16:21
  • 2102

java面向对象核心思维导图

  • 2017-12-13 11:14
  • 354KB
  • 下载

java基础知识思维导图

  • 2017-09-27 16:32
  • 10.30MB
  • 下载

java流IO思维导图

  • 2017-09-11 16:38
  • 2.43MB
  • 下载

Java思维导图

  • 2012-07-12 14:32
  • 1018KB
  • 下载
    个人资料
    • 访问:2675次
    • 积分:108
    • 等级:
    • 排名:千里之外
    • 原创:7篇
    • 转载:1篇
    • 译文:0篇
    • 评论:2条
    最新评论