java中的基础大合集

概述:    本文讲述java的最基本知识,为理解面向对象打下扎实的基础               (慢慢更新)

1:内存分配问题

      1):我们需要把内存模拟出一块块区域,比如一块区域给堆用,一块区域给栈用,以下是内存图    

              从上到下依次是堆,栈,静态区

从这个图可以知道,堆中存放的是实例化的对象;局部变量实在栈中分配的,局部变量就是函数里面的变量。如何区分局部变量:由数据类型  +  变量名  组成,就是局部变量。字符串就是放在第三个区,而函数,if,for等等放在代码区。而静态区存放有static定义的类变量,存放静态成员。

--》要明白的几个问题:既然堆存放实例化对象,就是类似c语言中的malloc动态分配,所以堆是动态分配的,动态分配有程序员手动分配,手动释放。

                                      1:栈不需要手动分配,他在函数终止时会自动释放,所以栈中的函数不能跨函数使用,因为局部变量是在栈中分配的,在局部变量所在的函数终止时会释放内存,所以栈中的函数不能跨函数使用。或者说栈中的局部变量随着方法的消失而消失,这就是局部变量只能在方法中有效的原因。

                                     :2:堆中的函数可以跨函数使用,因为他们的空间是手动释放的。例如a这个函数,b函数里面可以调用a这个函数。你可以想象为在堆中的东西都是共享,共享就是可以相互访问。

                                      3:一知道堆就要想到是动态分配,栈是静态分配。例如:有一个局部变量,马上可以想到它是静态分配的,实例化的对象马上想到它是在堆中,动态分配的。

      2):java程序的执行过程是如何?

           此时有个名为S.java文件,系统解读会将代码分为4块区域,该放哪的就放哪。例如局部变量放在栈中等等。


    3)关于new实例化对象的一些心得,知识

 以下是参考代码: 

                

从代码知道:(1): class A是我们定义的模型,类似于数据类型int型,但是这只是类抽象的,还未生成事物,还未分配内存

                     (2):A aa = new A();可以知道,A是数据类型, aa是局部变量,局部变量存在于内存中的栈中,进一步得知是静态分配的;而new A ()是在堆中动态分配的,new相当于C语言中的malloc函数。

                     (3):类只有用了new才是创建了对象,又称之为实例化对象,没有用new的时候系统还未分配内存,用了new之后系统为其分配内存。实例化了对象才可以使用这个类

                     (4):既然知道了aa是静态分配,new生成的A对象是动态分配了。那么aa保存了动态内存分配对象的地址,也就是说aa这个静态指针变量指向了动态内存中的A对象。aa.i的意思就是静态指针变量指向动态内存中A对象中的i变量。

                       (5):A aa = new A();是在堆中分配一块内存,这块内存里面的i和j变量的初始值是10和20,如果你通过aa.i=80;aa.j=66;这样在堆内存中两个的值就改变成了80和66。

                               内存参考图:


4)待续


阅读更多
个人分类: javase
上一篇2018年4月16日学习static关键字
下一篇18年构造函数的学习
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭