OOP面向对象编程二

六. this关键字

    在方法调用、参数传递过程中,极有可能出现参数名称与实例变量名同时的情况。在一个方法内,可以定义和成员变量同名的局部变量或参数,此时成员变量被屏蔽。

    参考例子:Student.java。
    
作用1:区别成员变量和局部变量
public class Student{
    private String name;
    public void setName(String name){
        this.name = name;
        System.out.print(name);
        String name;
        name = "tom";
    }

}    

作用2:
public class Student{
    private String name;

    public void setName(String name){
        this.name = name;
    }
    public void print(){
        //表示调用当前类中的setName方法
        this.setName("tom");
        //setName("tom");

        //在类中可以表示当前类的对象
        System.out.println("this:"+this);
    }
    
    public static void main(String[] args){
        Student s = new Student();
        s.setName("tom");
        System.out.println("s:"+s);
    }
}

作用3: 在类的构造器中用this关键字可以调用类的其他的构造器
1.this只能出现在构造函数代码块中的第一句(前提是this这个时候代表的是调用其他构造器)
2.由this调用的构造器不会再创建新的对象
例如:
public class Car{
    private String name;
    private double price;

    public Car(){
        //无参构造器中调用了一个参数的构造器
        this("tom");
    }
    public Car(String name){
        //一个参数的构造器中调用了俩个参数的构造器
        this(name,100000);
    }
    public Car(String name,double price){
        this.name = name;
        this.price = price;
    }

}
 七.构造方法
    (构造器/构造函数/构造方法)
    1. 定义:

    . 构造方法的名字和类的名字相同
    . 没有返回类型,有返回类型的构造器就变成了普通方法。

    2. 调用时刻:

    在创建对象的时候调用;
    注意:是先创建对象,然后初始化对象中的属性值,最后在调用构造器

    3. 作用:
    可以让我们在创建对象的时候做一些对象中数据的初始化工作.(因为在new的后面就是写的构造器)
    new Student();
    new Student("tom",age);

    4. 构造方法的调用:

    构造方法只能通过以下方式被调用:
    . 当前类的其他构造方法通过this语句调用它;
    . 当前类的子类的构造方法通过super语句调用它;
    . 在程序中通过new语句调用它;
八.默认的构造方法

    构造方法可分为两种:
    1) 隐含的默认构造方法(无参构造器);
    2) 程序显示定义的构造方法;

    在Java语言中,每个类至少有一个构造方法。为了保证这一点,如果用户定义类中没有提供任何构造方法,那么在运行的时候JVM将自动提供一个隐含的默认构造方法。该构造方法没有参数,用public修饰,而且方法体为空,格式如下:

    public ClassName(){}      //隐含的默认构造方法

    在程序中也可以显示地定义默认构造方法。

    如果类中显式定义了一个或多个构造方法,那么Java语言便不再分配隐含的默认构造方法。举例:

    public class Sample{
    public Sample(int a) {
        System.out.println("My Constructor");
     }
    }

    创建Sample类对象的语句:

    Sample s1 = new Sample();        //编译出错
    Sample s2 = new Sample(1);       //合法的
九.创建和初始化对象

    按照前面讲述的定义类的形式、定义方法的形式,构建好类了之后,程序要真实的运行,还是得通过对象的交互来完成。
创建好了类,只是创建了构建对象的模板。接下来,我们可以通过new操作符,快速地构建出对象。使用new有以下作用有以下几步:

    1.为对象分配内存空间,将对象的实例变量自动初始化默认值;
    2.如实例变量显示初始化,将初始化值赋给实例变量(把默认值覆盖掉);
    3.调用构造方法;
    4.返回对象的地址值;
    (注意:之后我们会把这个步骤再细分)

十.构造方法重载

    当通过new语句创建一个对象时,在不同的条件下,对象可能会有不同的初始化行为。
例如对于公司新来的一个雇员,在一开始的时侯,有可能他的姓名和年龄是未知的,也有可能仅仅他的姓名是已知的,也
有可能姓名和年龄都是已知的。如果姓名是未知的,就暂且把姓名设为“无名氏”,如果年龄是未知的,就暂且把年龄设为-1. 

    可通过重载构造方法来表达对象的多种初始化行为。在一个类的多个构造方法中,可能会出现一些重复操作。
为了 提高代码的可重用性,Java语言允许在一个构造方法中,用this语句来调用另一个构造方法。

  使用this语句来调用其他构造方法时,必须遵守以下语法规则:

  1.假如在一个构造方法中使用了this语句,那么它必须作为构造方法的第一条要执行的语句(不考虑注释语句)。
      
      public Employee() {
          String name="无名氏";
          this(name);      //编译错误,this语句必须作为第一条语句
      }
      public Employee(String name) {
          String name=name;
      }

  2.只能在一个构造方法中用this语句来调用类的其他构造方法,
而不能在实例方法中用this语句来调用类的其他构造方法;

  3.只能用this语句来调用其他构造方法,而不能通过方法名来直接调用构造方法。

      public Employee() {
          Employee(name);      //编译错误,要使用this关键字来调用
          String name="无名氏";
      }
      public Employee(String name) {
          String name=name;
      }
 

猜你喜欢

转载自blog.csdn.net/bifuguo/article/details/81365834