本篇来详细说说成员变量与局部变量,对内存的管理,构造方法,this关键字,方法重写与方法重载.
成员变量与局部变量
请看下面的表格,已经详细列出了两者的区别:
|
上面的对比中提到了几个关键词:构造器,堆,栈帧,下面来详细讲解一下这些关键词.
构造方法
又名构造器,是一种特殊的方法:没有返回值,方法名与类名相同.作用是给成员变量初始化.
示例代码:
public class Test{
int x;
int y;
public Test(){}//构造方法1
public Test(int x,int y){//构造方法2
this.x=x;
this.y=y;
}
public int sum(int x,int y){//普通方法
return x+y;
}
}
如果我们没有自定义构造方法,系统会默认提供一个无参构造器,就是上面的构造方法1,不会显示出来.
如果我们添加了如构造方法2一样的有参构造器,则系统不再提供无参构造器,如果需要无参构造器则需要自己编写一个.
注意:若提供了有参构造器,因为构造器是用来初始化成员变量的,所以形式参数与成员变量一致,在赋值时需要添加this.
this关键字:形式参数与变量名一致时,需要在成员变量前添加this. ,意思是指向将要创建的那个对象,即变量.方法()
如何使用(调用)构造器?
只能使用new关键字调用,例如:
//在上面Test类插入主方法:
public static void main(String[] args){
Test t1=new Test();//调用无参构造器
Test t2=new Test(3,5);//调用有参构造器
}
如果调用的是无参构造器,则无需传入参数,若调用了有参构造器,则必须传入与构造器形参相同的参数.
内存管理机制
JVM将内存分为三大主要区域:堆,栈,方法区.内存管理中引入了垃圾回收机制,可以让程序员无需考虑内存溢出问题.
方法区:用来加载字节码(.class)文件,存储类的信息.
堆:存储引用类型的变量.
栈:存储方法内的局部变量.
栈中还包含栈帧,栈帧指的是,当程序运行到一个方法时,JVM专门为其开辟的一个独有空间,用来存储方法内的局部变量
垃圾回收机制(Garbage Collection,GC)是JAVA特有的一个线程,用于回收没有任何指向的对象,它的存在使得JAVA程序员无需担心发生内存溢出或内存泄露的情况(C,C++等就需要经常考虑内存溢出或泄露的问题.).
方法重载(Overload)
Test类中的构造方法1与构造方法2的方法名相同,但是参数列表不同,这就是方法的重载.
方法重载:同一个类中,方法名相同,参数列表不同,就叫做方法重载,三个条件缺一不可.
下面给一个普通方法的方法重载实例:
public class Test{
public void sum(int x,int y){//方法
System.out.println(x+y);
}
public void sum(int x,int y,int z){//重载1
System.out.println(x+y+z);
}
public void sum(double x,double y){//重载2
System.out.println(x+y);
}
public static void main(String[] args) {
Test t=new Test();
t.sum(5,5);//调用方法
t.sum(6,2,7);//调用重载1
t.sum(9.2,7.7);//调用重载2
}
}
在调用时,系统会自动根据传入的参数判断该调用哪个方法而执行相应的逻辑.