Java的内存结构:

堆内存:new,构造函数对类属性的初始化;

栈内存:测试函数




Java参数传递:

直传递;

java 参数个数 java的参数_内存空间

引用:

java 参数个数 java的参数_可变参数_02

可变参数:


可变参数是从JDK1.5中加入的语法,是指其参数可以是0个,可以是1个,2个,3个,n个,用…表示。类似数组的概念,可变参数必须放在参数列表的最后且一个方法只能包含一个这样的参数,在方法体内被当做数组处理。

publci int compute(int …args) { int sum=0; for(int i:args) { sum+=I; } return sum; }

对象的释放:


内存泄露:是指内存空间不够时,超出内存的最大限制。Java可以自动回收空间,使用GC垃圾回收(Garbage Collector),它有以下的特点:
1.回收无用的对象的内存空间
2.判断一个对象的内存空间是否无用
3.不可以强制执行
4.不能保证一个无用的对象一定被垃圾收集及收集
5.无法得知哪个对象被首先回收
6.可以将对象的引用变量初始化为null值,来暗示垃圾收集及收集该对象,如果该对象连接了监视器,不能被回收,要清除监视器,才可以回收
7.与垃圾收集及收集相关联还有Object.finalize(),fianlize->栈上jni,java调用c,c++,gc->堆上,有三种情况 1)所有对象被Garbage Collection时自动调用,比如运行System.gc()的时候. 2)程序退出时为每个对象调用一次finalize方法。 3)显式的调用finalize方法 除此以外,正常情况下,当某个对象被系统收集为无用信息的时候,finalize()将被自动调用,但是jvm不保证finalize()一定被调用,也就是说,finalize()的调用是不确定的,这也就是为什么sun不提倡使用finalize()的原因. 简单来讲,finalize()是在对象被GC回收前会调用的方法,而System.gc()强制GC开始回收工作纠正,不是强制,是建议,具体执行要看GC的意思简单地说,调用了 System.gc() 之后,java 在内存回收过程中就会调用那些要被回收的对象的 finalize() 方法。

信息的封装和隐藏:


Java中通过将数据声明为私有的(private),再提供公开的(public)方法:getXXX和setXXX实现对该属性的操作,以实现下述目的:

隐藏一个类的实现细节;

使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;

便于修改,增强代码的可维护性;