this是存放在栈中的引用对象,它的值是在运行的时候才能确定的,是在运行期间调用方法的时候,动态绑定到该方法所在类生成的对象。
this关键字,是在方法中 引用 调用该方法所在类的一种办法。
this 是一个当前方法所在”类“的引用变量,本质是是方法的第一个隐含参数,在调用方法时候调用者传递给this。
this在方法外面并不适用,只是在方法内使用。他表示调用方法所在的类的引用变量。
方法中的this是可以省略的,因为java是在方法中找不到一个变量定义的时候才要在类中找该变量。如果在方法内部的局部变量和类体中的实例变量(属性变量)的名字是一样的,则需要在全局变量前加this,告诉编译器这个变量时实例变量(属性变量)而不是局部变量。
public class Demo04{
public static void main(String[] args) {
Cell c = new Cell();
c.row = 5;
c.drop(5);//方法调用本质上drop(c,5),C传递给this,5传递给n。this 在栈中就会存在,它也是指向堆中对象的首地址。
//而对于n和this这些局部变量,在方法执行完以后就会被回收。
System.out.println(c.row);
Cell c2 = new Cell();
c2.drop(5);
System.out.println(c2.row);
c2 = null;//相当于c2中存储的就是null,不指向任何地址。这样对c2的任何操作就会出现空指针异常。
c2.drop(5);
}
}
class Cell{
int row; int col;
/*当前格子下落n步*/
public void drop(/*cell this*/int n){
this.row+=n;
}
}
二、引用变量:
逻辑上是对象的代词,本质上存储对象堆内存的首地址,是操作对象的句柄。访问对象的属性就使用引用变量访问。
引用变量的值是null,这个时候引用变量就不再指向任何地址,对其的引用(访问方法、属性)就会出现空指针异常,这种情况是在运行的时候的错误。所以有引用变量不一定有对象。
三、构造器(构造方法、构造函数 constructor):
构造器用于初始化对象,经常用于初始化对象属性。
Point p = new Point(3,4);在上面的代码中Point(3,4)就是构造器,(3,4)就是初始化参数。用于初始化对象参数。
构造器语法要求:
1)构造器的方法名必须与类名一样
2)可以有构造器参数,这些参数就是创建对象的前提条件。
3)不能声明返回值类型
4)使用new运算调用构造方法来创建对象实例
5)构造方法可以重载。
6)在调用完构造方法够返回到调用的位置。
比较方法(method)和构造方法(constructor)的特点:
1)构造器的名字必须与类名一致,方法名一般与类名不相同
2)构造器不能声明返回值,方法必须声明返回值,方法没有返回值时使用void声明
3)方法是引用调用。构造方法使用new运算调用。
4)方法是用来定义对象的功能的。构造方法是用来创建初始化对象。
默认构造器现象
根本原则:java类一定有构造器;
1)如果类中没有声明构造器,javac会在编译的时候插入一个默认的构造方法声明的代码,该默认构造方法没有任何参数。
2)如果java类中声明了构造方法,javac就不再提供默认构造方法。如果在这个调用默认构造方法,就会出现编译错误。3)找对应构造方法是使用 名字+参数 的标准查找的。
public class Demo06 {
public static void main(String[] args){}
Point1 p1 = new Point1(3,4);//调用构造方法
Point1 p2 = new Point1(5);
}
class Point1{
int x;int y;
/*构造方法:创建一个点必须有x,y坐标*/
public Point1(int x,int y){
this .x = x; this .y = y;
}
/*构造器的重载:创建对角线上的点只需要一个参数*/
public Point1(int x){
this.x = x;
this.y = x;
}
}
this()使用:
this()实现在一个构造方法中调用另外一个构造方法。this()中带有的参数决定了调用哪一个构造方法。this() 不同于"this.”。
this()只能在构造器中的第一行使用,调用本类的其他构造器。
public class Demo07 {
public static void main(String[] args){
Point2 p = new Point2(5);
}
}
class Point2{
int x; int y;
public Point2 (int x,int y){
this.x = x; this.y = y;
}
public Point2 (int x){
this(x,x);//在构造器中的第一行,调用本类中的其他构造器。
}
}
java面向对象--this关键字、引用变量、构造方法
最新推荐文章于 2021-03-22 14:40:31 发布