- 用构造器确保初始化
构造器与类名称相同;是一种特殊类型的方法,因为它没有返回值。
在创建对象时,会为对象分配存储空间,并调用相应的构造器。
不包含任何参数的构造器叫做默认构造器
- 方法重载
class Person {
public Person() {}
public Person(String name){}
public Person(String name,int age){}
}
区分重载:每个方法都有独一无二的参数类型列表
方法重载:
1.如果传入的数据类型小于方法中声明的形式参数类型,实际数据类型就会被提升;
char略有不同,如果无法找到恰好接受char参数的方法,就会把char直接提升至int型
2.如果传入的实际参数大于重载方法声明的形式参数,就需要进行强制转换,否则编译器就会报错。
eg:
void test(byte b) {}
int i = 5;
test(i);//编译器会报错
- 默认构造器
默认构造器又名“无参”构造器,是没有形式参数的。
如果类中没有构造器,编译器会自动帮你创建一个默认构造器。
作用:用于创建一个“默认对象”
- this关键字
this关键字只能在方法内部使用,表示对“对调用方法的那个对象”的引用
如果在方法内部调用同一个类的另一个方法,就不必使用this,直接调用即可
class Test {
private Test(){}
public Test newInstance() {
return this;
}
}
在构造器中调用构造器
class Test {
String s;
public Test(){this("test");}
public Test(String s){this.s = s;}
}
构造器中只能用this调用一个构造器,并且必须置于初始处
除构造器外,编译器禁止其他方法调用构造器
static的含义
可以通过类本身来调用static方法,也可以通过对象来调用
static方法就是没有this的方法
在static方法内部不能调用非静态方法,反过来是可以的。
- 清理:终结处理和垃圾回收
java垃圾回收器负责回收无用对象占据的内存资源
垃圾回收器只知道释放那些经由new分配的内存
finalize()的用途何在
一旦垃圾回收器准备好释放对象占用的储存空间,将首先调用其finalize(),并且在下一次垃圾回收动作发送时,才会真正回收对象占用的内存
无论是“垃圾回收”还是“终结”,都不保证一定会发生。
如果java虚拟机(JVM)并未面临内存耗尽的情形,它是不会浪费时间去执行垃圾回收以恢复内存的。
System.gc()用于强制进行终结动作
Java虚拟机采用一种自适应的垃圾回收技术。
自适应技术
标记-清扫:
从堆栈和静态存储区出发,遍历所有的引用,进而找出所有存活的对象。
每当它找到一个存活的对象,就会给对象设一个标记,这个过程中不会回收任何对象。
只有全部标记工作完成的时候,清理动作才会开始。
在清理过程中,没有标记的对象将被释放,不会发生任何复制动作。
停止-复制:
先暂停程序的运行,然后将所有的存活的对象从当前堆复制到另一个堆,没有被复制的全部都是垃圾。
“标记-清扫”与“停止-复制”都是在程序暂停的情况下才能进行。
Java虚拟机会进行监视,如果所有对象都很稳定,垃圾回收器的效率降低的话,就切换到“标记-清扫”方式;
同样,Java虚拟机会跟踪“标记-清扫”效果,要是堆空间出现很多碎片,就会切换回“停止-复制”方式
注意
1.对象可能不被垃圾回收
2.垃圾回收并不等于“析构”
3.垃圾回收只与内容有关