Java初始化与垃圾回收:
Java采用了构造器进行初始化、并对不再使用的内存资源进行回收。Java采用的构造器名称与类名称相同而且没有返回值,在创建对象时会分配内存空间并调用构造方法对类进行初始化。
注:若手动添加了有参数的构造器,则系统不会默认添加构造器。在Java中“初始化”和“创建”两者不能分离。
范例:
public class Student {
private String name;
public Student(){//无参构造方法
}
public Student(String name){//有参构造方法
this.name=name;
}
}
方法重载:
在同一个类中方法名相同但参数列表不行同。
以参数列表区分重载方法:
范例:
public int add(){
return 0;
}
public int add(int a){
return 0;
}
this关键字:
this关键字只能在方法内部使用表示当前调用该方法的对象。如果在方法内部调用同一个类的其他方法就没必要使用this关键字。
范例:
public class Student {
int age=0;
Student increment(){
age++;
return this;//表示调用该方法的当前对象
}
public static void main(String agrs[]){
Student s1=new Student();
System.out.print(s1.increment());
}
}
this关键字还可以将当前对象传递给其他方法:
class Person {
public void eat(Apple apple){
Apple peeled=apple.getPeeled();
}
}
class Peeler{//去皮器
static Apple peel(Apple apple){
//去皮……
return apple;
}
}
class Apple{
Apple getPeeled(){
return Peeler.peel(this);//当前苹果对象去皮
}
}
public class Main{
public static void main(String args[]){
new Person().eat(new Apple());
}
}
this关键字在构造器中调用构造器:
this中添加了参数列表就是调用与之相匹配的构造方法。
class Person {
private String name;
public Person(){
}
public Person(String name){
this();//调用默认构造器
this.name=name;//this关键字的另一种用法(参数name与成员变量名称相同)
}
}
static关键字:
static方法的内部不能调用非静态方法。
终结处理和垃圾回收:
Java允许在类中定义一个名为finalize()的方法。一旦垃圾回收器准备释放对象所占用的存储空间,将首先调用finalize()方法,并且在下一次垃圾回收时真正回收对象占用的内存。
注:垃圾回收并不能保证一定会发生,如果JVM并未面临内存资源耗尽的情况,它就不会浪费时间去执行垃圾回收方法。
System.gc()表示强制进行终结动作。
成员初始化:
类的数据成员如果为基本类型数据成员都会默认初始化。
初始化顺序:
在类的内部,根据变量定义的顺序先后进行初始化。静态数据无论定义多少个对象都只占用一块内存空间。static关键字不能应用于局部变量它只能作用于域。如果一个域是静态的基本类型域,且没有对它进行初始化那么就会根据基本类型进行默认值初始化。
在类的初始化过程中静态成员变量先进行初始化,然后在执行成员变量初始化,最后再执行构造方法进行初始化。静态初始化在加载类的class文件时执行一次。构造方法在创建对象时执行,每创建一个对象就执行一次构造方法。在创建对象时首先在堆内存空间上为对象分配一块内存空间并进行类成员初始化,然后再执行构造方法。
静态语句块:
static{
int i=47;
}
数组初始化:
声明数组时只是声明了一个对数组的引用并没有给数组分配内存空间,数组初始化时才给数组分配相应的内存空间。
int[] a1={1,2,3,4,5};
int[] a2;
a2=a1;
注:a1,a2引用指向同一块内存空间,因此对a1的修改a2可见。
枚举类型:
public class Main {
public static void main(String args[]){
Spiciness hot=Spiciness.FLAMING;
System.out.print(hot);
for(Spiciness s:Spiciness.values()){//遍历枚举类型数组
System.out.print(s.ordinal());//枚举类型的创建顺序
}
}
}
enum Spiciness{
NOT,MILD,MEDIUM,HOT,FLAMING
}