三:this关键字

时间: 2023-08-02 admin 互联网

三:this关键字

三:this关键字

1、this调用本类属性

          

语法this.属性
代码实例

class Person {
    private String name;
    private int age;

    // 构造方法
    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // 实现setter和getter方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

}

          从上面程序中可以看出,在相同的变量名面前,使用了this关键字,可以清楚的得知哪个是本类属性。所以,在以后的程序代码中,只要是访问本类中属性的时候,一定要加上“this”关键字实现访问。

2、this调用本类方法

 语法场景
构造方法this()在使用关键字new的时候才会调用构造方法
普通方法this.方法名称()实例化对象产生之后就可以调用普通方法
 调用构造方法代码this调用本类的操作方法
要求每调用一次构造方法,则输出一条语句“这是一个新的Person对象”调用本类的set方法
 

class Person {
    private String name;
    private int age;

    // 构造方法
    public Person(String name, int age) {
        this(name);
        this.age = age;
    }

    public Person(String name) {
        this();
        this.name = name;
    }

    public Person() {
        System.out.println("这是一个新的Person对象");
    }

}

class Person {
    private String name;
    private int age;

    // 构造方法
    public Person(String name, int age) {
        this.setName(name);
        setAge(age);// 加与不加都一样,都表示调用本类方法
    }

    // 实现setter和getter方法
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

}
 

          从上面this调用构造方法的代码中,实现了构造方法的互相调用,但是对于本类中的构造方法互相调用,需要注意以下几个问题:

                    1)构造方法必须在实例化新对象的时候调用,所以“this()”的语句只允许放在构造方法的首行;

                    2)构造方法互相调用时请保留有程序的出口,不能形成死循环;

          范例:构造方法相互调用的案例

要求

定义一个描述有员工信息的程序类,该类中提供有:编号、姓名、部门、工资,该类中提供有四个构造方法:

1)无参构造:编号定义为1000,姓名定义为无名氏;

2)单参构造:传递编号,姓名定义为“新员工”,部门定义为“未定义”,工资定义为0.0;

3)三参构造:传递编号,姓名,部门,工资为2500;

4)所有的属性全部进行传递

代码

package cn.demos;

class Emp {

    private long empno;
    private String ename;
    private String dept;
    private double salary;

    public Emp() {
        this(1000, "无名氏", null, 0.0);
    }

    public Emp(long empno) {
        this(empno, "新员工", "未定", 0.0);
    }

    public Emp(long empno, String ename, String dept) {
        this(empno, ename, dept, 2500);
    }

    public Emp(long empno, String ename, String dept, double salary) {
        this.empno = empno;
        this.ename = ename;
        this.dept = dept;
        this.salary = salary;
    }

    public long getEmpno() {
        return empno;
    }

    public void setEmpno(long empno) {
        this.empno = empno;
    }

    public String getEname() {
        return ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }

    public String getDept() {
        return dept;
    }

    public void setDept(String dept) {
        this.dept = dept;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    @Override
    public String toString() {
        return "Emp [empno=" + empno + ", ename=" + ename + ", dept=" + dept + ", salary=" + salary + "]";
    }

}

public class Demo2 {
    public static void main(String arg[]) {
        Emp emp = new Emp(11011, "里斯", "财务", 2300);
        Emp emp2 = new Emp(11, "lisi", "mm");
        System.out.println(emp);
        System.out.println(emp2);

    }

}
 

结果Emp [empno=11011, ename=里斯, dept=财务, salary=2300.0]
Emp [empno=11, ename=lisi, dept=mm, salary=2500.0]

3、综合实战:简单java类

           所谓的简单Java类指的是可以描述某一类信息的程序类,且在这个类之中并没有特别复杂的逻辑操作,只作为一种信息存储的媒介。

           对于简单Java类而言,其核心的开发结构如下:

                      1)类名称一定要有意义,可以明确的描述某一类事物;

                      2)类之中的所有属性都必须使用private进行封装,同时封装后的属性必须要提供有setter、getter方法;

                      3)类之中可以提供无数多个构造方法,但是必须要保留有无参构造方法;

                      4)类之中不允许出现任何的输出语句,所有内容的获取必须返回;

           范例:定义一个简单Java类

class Dept {//属性private String deptno;private String dname;private String loc;//无参构造方法public Dept() {}//有参构造方法public Dept(String deptno, String dname, String loc) {super();this.deptno = deptno;this.dname = dname;this.loc = loc;}//setter和getter方法public String getDeptno() {return deptno;}public void setDeptno(String deptno) {this.deptno = deptno;}public String getDname() {return dname;}public void setDname(String dname) {this.dname = dname;}public String getLoc() {return loc;}public void setLoc(String loc) {this.loc = loc;}@Overridepublic String toString() {return "Dept [deptno=" + deptno + ", dname=" + dname + ", loc=" + loc + "]";}}