1. 传值和传引用
在java中,变量分为以下两类。
1.对于基本类型变量(int,long,double,float,byte,boolean,char),java是传值的副本。
2.对于一切对象型变量,java都是传引用的副本。其实传引用副本的实质就是复制指向地址的指针,String属于对象型变量,所以它必然是传引用的副本。
对于基本类型而言,传值就是把自己复制一份传递,及时自己的副本变了,自己也不变。而对于对象类型而言,它传的引用副本指向自己的地址,而不是自己实际值的副本。为什么要这么做呢?因为对象类型是放在堆里的,一方面速度相对于基本类型比较慢,另一方面对象类型本身比较大,如果采用重新复制对象值的办法,浪费内存且速度又慢。
静态变量和私有变量
一个常量被分配,他就不予许被改变。
一个静态的表示符可以被应用到类(内部类)、方法和变量中。
定义在类里的变量会被赋予一个默认值。
静态方法不能访问非静态变量。
Java内存管理。
过去的 语言要求程序员显示地分配内存、释放内存。程序在需要时分配内存,不需要时释放内存。但是这种做法常常引起“内存泄漏”,即由于某种原因使分配的内存始终没有得到释放。如果该任务不断地重复,程序最终会被耗尽内存并异常终止,至上无法继续运行,相比之下Java不要求程序员显示地分配内存和释放内存,避免了很多潜在的问题。Java在创建对象时会自动分配内存,并当该对象的引用不存在时释放这块内存。
Java中使用被称为垃圾收集器的技术来监视Java程序的运行,当对象不再使用时,就自动释放对象所使用的内存。Java使用一系列软指针来跟踪对象的各个引用,并用一个对象表来将这些软指针映射称为对象的引用。之所以称为软指针,是因为这些指针并不直接指向对象,而是指向对象的引用。使用软指针,Java的垃圾收集器能够以单独的线程在后台运行,并以此检查每个对象。通过更改对象表项,垃圾收集器可以标记对象、移除对象、移动对象或检查对象。
垃圾收集器是自动运行的,一般情况下,无须显示地请求垃圾收集器。程序运行时,垃圾收集器会不时检查对象的各个引用,并回收无引用对象所占用的内存。调用System()类中的静态gc()方法可以运行垃圾收集器,但这样并不能保证立即回收指定的对象。