1、构造器初始化
new一个对象首先会给器分配一块内存,并且调用构造方法进行初始化。
构造方法:构造方法与类型一致,且没有返回类型。每个类都有一个默认的构造方法。
构造方法和普通方法一样可以重载,用于传入不同的参数。区分构造方法,只能由参数个数不同,类型不同去区分。
public class Contruct {
Contruct() { //无参构造方法
System.out.println("构造器");
}
Contruct(int i){ //有参构造方法
System.out.println("构造器:"+i);
}
Contruct(double s){
System.out.println("构造器:"+s);
}
public void Contruct(int i){ //普通方法(非构造方法)
System.out.println("非构造方法");
}
}
2、 成员初始化
成员初始化
类的成员变量,基本类型默认初始化,对象需要手动将其初始化,免得使用的时候会报错。
局部成员变量需要初始化,包括基本类型,否则编译报错。
static方法内,不能直接引用非是static变量和方法。
public class TestMain {
int j;
static int k;//类的成员变量,默认初始化为0
public static void main(String[] args) {
TestMain t;
for(int i=0; i<j; i++){ //Cannot make a static reference to the non-static field j
t.f(); //The local variable t may not have been initialized
new Contruct();
new Contruct(i);
System.out.println("k:"+k); //k:0
}
}
public void f(){
int m;//局部变量
System.out.println(j); //j非局部变量,默认初始化值为0
System.out.println(m);//The local variable m may not have been initialized
}
}
3、数组初始化
数组初始化的方法:
1、静态初始化:int[] a1 = {1,2,3,4,5};
2、动态初始化: 先声明int[] a2; for(){a2[i]};
3、创建数组对象,默认初始化int[] a3 = new int[];
public class ArrayTest {
public static void main(String[] args) {
int[] a1 = {1,2,3,4,5}; //(1)静态初始化
int[] a2; //声明
int[] a3 = new int[5];//(2)创建数组对象,默认初始化为0
a2 = a1;//引用的赋值
for(int i=0; i<a2.length; i++){
a2[i]++; //(3)动态初始化
}
for(int j=0; j<a1.length; j++){
prin("a1["+j+"]:"+a1[j]);
}
for(int k=0; k<a3.length; k++){
prin("a3["+k+"]:"+a3[k]);
}
}
static void prin(String s){
System.out.println(s);
}
}
3、清除
GC:JVM垃圾回收机制,回收new出来的内存,只针对内存回收,当对象的不再使用的时候自动调用。
final、finally、finalize的区别
final:定义属性、方法和类。定义的属性不可改变;定义的方法不可重写;定义的类不可继承。
finally:异常处理语句的一部分,表示总是执行try{}catch{}finally{}
finalize:在垃圾回收的时候调用被回收对象的此方法,用于垃圾回收。