java学习之路的自我回顾1

  前段时间一直在做一些android的项目开发,但是慢慢的觉得自身现在的知识储备已经完全不够用了,又因为之前学习java的经历太水,基本没学到什么东西,基本思路还停留在C/C++学习时期,因此打算重新把java在学习一遍,也算是一种对于自身的激励吧,将自身所学到的感觉重要的东西发上来。


java中的数组

1.java中的数组可以说和C++中有挺大的不同,首先说说java中数组的定义方式吧

1.[type] [] str;

2.[type] str[];

虽然2中方式都可以,而且我在以前的C++学习中也习惯于使用第二种方式,但是不得不说,还是第一种方式更加通俗易懂,首先,可以将[type] [] 看成是一种类型,变量名为str,这样看的话就很容易理解了。根据一些书籍中提到的信息,现在的大趋势是使用第一种格式,第二种格式已经被很多语言所抛弃,例如C#,所以,还是习惯于第一种方式比较好

  有一点比较重要的事现在的str还不可以使用,现在只是创建了这个变量(实际是引用变量),但还未给其分配内存空间,即str的作用是用来指向一个内存空间,有点像指针了


2.数组的初始化(为其分配内存空间)

分为动态和静态初始化,静态为程序员给予每个元素初始值,动态为程序员只给予长度,由程序自行给予初始值

静态初始化 str=new [type] []{1,2,3,4,5};     简略写法str={1,2,3,4,5};

动态初始化 str=new [type] [length];


至于一些使用数组的方式方法,就不放上来了,下面的会比较深入

内存中的数组

以前写java程序的时候真的没怎么注意过数组在内存中的存在方式呢,关于C++中大致是以数组的头地址开始,地址一个接一个的往下排列来存储数据的,然后数组通过连接到首地址来访问这些数据,当时只是了解到这一步,现在发现,这里面还真有玄机呢


java中,要想访问一个数组的元素,不能够直接访问,而是只能够通过一个引用变量来访问,感觉有点像类呢,

实际上,我们所使用的引用变量是保存在栈(stack)内存中的,实际的数组元素则保存在堆(head)内存中,引用变量是通过调用堆内存来实现访问数组元素的,这里又牵扯出一个很有意思的东西,就是变量的生命周期(我自己认为的)

就是当一个方法执行的时候,每个方法都会建立自己的内存栈,这个方法内的变量将会一次被放入这个栈中,当方法结束时,这个内存栈也随即销毁,变量也被销毁;但当我们创建一个对象时,这个对象将会被保存到运行时数据区去,以便反复利用(因为对象的创建通常成本更大),这个运行数据区就是对内存,堆内存中的数据不会因为方法的结束而结束,比如方法中的形参,返回值等。只有当没有任何一个引用变量指向他时,系统才会在合适的时间将其销毁。

这个原理还是比较有趣的



你可能感兴趣的:(Java,java,回顾,内存)