Java基础6(面向对象3)

关键字:this的使用

一.this可以用来修饰:属性、方法、构造器
二.this修饰属性和方法:

  this理解为:当前对象
(1)
  在类的方法中,我们可以使用“this.属性”或“this.方法”的方式,调用当前对象的属性或方法。
  通常情况,我们都省略“this.”。特殊情况下,如果方法的形参和类的属性同名时,我们必须显式的使用“this.变量”的方式表明此变量是属性,而非形参。
(2)
  在类的构造器中,我们可以使用“this.属性”或“this.方法”的方式,调用当前对象的属性或方法。
  通常情况,我们都省略“this.”。特殊情况下,如果方法的形参和类的属性同名时,我们必须显式的使用“this.变量”的方式表明此变量是属性,而非形参。

三.this调用构造器

(1)我们在类的构造器中,可以显式的使用“this(形参列表)”的方式调用本类中指定的类的其他构造器
(2)构造器中不能通过“this(形参列表)”的方式调用自己。
(3)如果一个类中有n个构造器,则最多有n-1构造器使用“this(形参列表)”
(4)规定:“this(形参列表)”必须声明在当前构造器的首行
(5)构造器内部,最多只能声明一个“this(形参列表)”,用来调用其它的构造器。

例子:
package test;

public class PersonTest {
    public static void main(String[] args) {
        Person p1 = new Person();
        p1.setAge(12);
        p1.setName("tom");
        System.out.println("name:"+p1.getName()+",age:"+p1.getAge());
    }
}
class Person{
    private String name;
    private int age;
    public void setAge(int age) { this.age = age; }
    public int getAge() { return age; }
    public void setName(String name) { this.name = name; }
    public String getName() { return name; }
}

在这里插入图片描述

练习:

在这里插入图片描述

BoyGirlTest.java

package test;

public class BoyGirlTest {
    public static void main(String[] args) {
        Boy boy = new Boy("罗密欧",21);
        boy.shout();
        Girl girl = new Girl("朱丽叶",18);
        girl.marry(boy);
        Girl girl1 = new Girl("祝英台",19);
        int compare = girl.compare(girl1);
        if (compare>0){
            System.out.println(girl.getName()+"大");
        }else if (compare<0){
            System.out.println(girl1.getName()+"大");
        }else{
            System.out.println("一样大");
        }
    }
}

Boy.java

package test;

public class Boy {
    private String name;
    private int age;

    public void marry(Girl girl){
        System.out.println("我想娶"+girl.getName());
    }
    public Boy(String name, int age){
        this.name = name;
        this.age = age;
    }
    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; }
    public void shout(){
        if (this.age >= 22){
            System.out.println("你可以去合法登记结婚了");
        }else{
            System.out.println("先多谈谈恋爱~~");
        }
    }
}

Girl.java

package test;

public class Girl {
    private String name;
    private int age;
    public String getName() { return name; }
    public Girl(){

    }
    public Girl(String name, int age){
        this.name = name;
        this.age = age;
    }
    public void setName(String name) { this.name = name; }
    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }
    public void marry(Boy boy){
        System.out.println("我想嫁给"+boy.getName());
        boy.marry(this);
    }
    public int compare(Girl girl){
        return this.age - girl.age;
    }
}

在这里插入图片描述

方法形参的传递机制:值传递

1.形参:方法定义时,声明的小括号内的参数
2.实参:方法调用时,实际传递给形参的值
注意:
  如果变量是基本数据类型,此时赋值的是变量所保存的数据值
  如果变量是引用数据类型,此时赋值的是变量所保存的数据的地址值
在这里插入图片描述
在这里插入图片描述

Circle.java
package test;

public class Circle {
    double radius;
    public double findArea(){
        return Math.PI*radius*radius;
    }
}

PassObject.java
package test;
public class PassObject {
    public static void main(String[] args) {
        PassObject test = new PassObject();
        Circle c = new Circle();
        test.printAreas(c,5);
        System.out.println("now radius is "+ c.radius);
    }
    public void printAreas(Circle c, int time){
        System.out.println("Radius\t\tArea");
        //设置圆的半径
        for (int i = 1; i <=time ; i++) {
            c.radius = i;
            System.out.println(c.radius+"\t\t"+c.findArea());
        }
        c.radius = time +1;
    }
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Account.java
package test;

public class Account {
    private  int id;//账号
    private double balance;//余额
    private double annualInterestRate;//年利率
    public Account(int id , double balance, double annualInterestRate){
        this.id = id;
        this.balance = balance;
        this.annualInterestRate = annualInterestRate;
    }
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }
    public double getBalance() { return balance; }
    public void setBalance(double balance) { this.balance = balance; }
    public double getAnnualInterestRate() { return annualInterestRate; }
    public void setAnnualInterestRate(double annualInterestRate) { this.annualInterestRate = annualInterestRate; }

    //在提款方法withdraw中,需要判断用户余额是否能够满足提款数额的要求,如果不能,应给出提示
    public void withdraw(double amount){
        if (balance < amount){
            System.out.println("余额不足,提款失败");
            System.out.println("*******************");
        }
        else{
            balance-=amount;
            System.out.println("成功取出:"+amount);
            System.out.println("余额:"+balance);
            System.out.println("*******************");
        }
    }
    //存钱
    public void deposit(double amount){
        if (amount > 0){
            balance+= amount;
            System.out.println("成功存入:"+amount);
            System.out.println("余额:"+balance);
            System.out.println("*******************");
        }
    }
}

Customer.java
package test;

public class Customer {
    private String firstName;
    private String lastname;
    private Account account;
    public Customer(String f,String l ){
        this.firstName= f;
        this.lastname= l;
    }

    public String getFirstName() { return firstName; }
    public String getLastname() { return lastname; }
    public Account getAccount() { return account; }
    public void setAccount(Account account) { this.account = account; }
}


CustomerTest.java
package test;

public class CustomerTest {
    public static void main(String[] args) {
        Customer cust = new Customer("Jane","Smith");
        Account account = new Account(1000,2000,0.0123);
        cust.setAccount(account);
        System.out.println("当前用户:"+account.getId()+", 名字:"+cust.getFirstName()+" "+cust.getLastname()+", 当前余额:"+account.getBalance());
        cust.getAccount().deposit(100);//存100
        cust.getAccount().withdraw(960);//取960
        cust.getAccount().withdraw(2000);//取2000

    }
}

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值