关键字: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
}
}