java面向对象--this关键字、引用变量、构造方法

一、this关键字:
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);//在构造器中的第一行,调用本类中的其他构造器。
    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值