1、Java中,this关键字比较难,他的作用域和其词义很接近。
1)、在方法内部使用,即这个方法所属对象的引用;
2)、在构造器内部使用,表示该构造器正在初始化的对象。
2、this.name=name; //赋值号左边带有this.的base是当前正在创建的对象的属性,赋值号后边的name是形参;
this.name=name; 也可书写为: this(name); //效果一致;
this();可以用来显示的调用当前类的重载的指定的构造器。
3、this:
1)、可以用来修饰属性、方法、构造器
2)、this理解为当前对象或当前正在创建的对象
3)、可以在构造器中通过"this(形参)"的方式显示的调用当前重载的指定的构造器
要求:(1)、在构造器内部this();必须声明在首行;
(2)、若一个类中有n个构造器,那么最多有n-1个构造器使用了this(形参);
一、Person(人)的类:
package com.atguigu.java;
/*
* this:
* 1、可以用来修饰属性、方法、构造器
* 2、this理解为当前对象或当前正在创建的对象
* 3、可以在构造器中通过"this(形参)"的方式显示的调用当前重载的指定的构造器
* 要求:1、在构造器内部this();必须声明在首行;
* 2、若一个类中有n个构造器,那么最多有n-1个构造器使用了this(形参);
* */
public class TestPerson {
public static void main(String[] args) {
Person p1=new Person();
p1.setAge(12);
p1.show();
p1.setName("John"); //此处p1调用的setName,因而p1就是this。
p1.show();
}
}
class Person{
private String name;
private int age;
//setters & getters方法
public String getName() {
return name;
}
public void setName(String name) {
// //这样赋值把两边的都看为是形参name,而没有属性name的事;age这样赋值出现的问题一样。
// name = name; //赋值号左边的name是属性中的name(即private定义的属性)
//解决方案
this.name=name; //谁调setName谁就是this;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
//以下为构造函数
public Person(){
}
public Person(String name) {
this.name=name;
}
public Person(String name,int age) {
this.name=name;
this.age=age;
}
public void eat() {
System.out.println("吃");
}
public void drink() {
System.out.println("喝");
}
public void play() {
System.out.println("玩");
}
public void show() {
System.out.println("姓名:"+name+";年龄:"+age); //此处name和age前也有this.,只是省略了。
}
}
二、计算三角形面积程序代码:
package com.atguigu.java;
/*
* 编写两个类:TriAngle和TestTriAngle,其中TriAngle中声明私有的底边长base和高height,
* 同时声明公共方法访问私有变量,另一个类中使用这些公共方法,计算三角形面积。
*
*
* */
public class TestTriAngle {//Angle:角 Angel:天使
public static void main(String[] args) { //main函数修饰符写为private的话,不会显示任何结果
// TODO Auto-generated method stub
TriAngle t=new TriAngle();
t.setBase(3.0); t.setHeight(4.0);
t.info();
System.out.println("**************************");
}
}
class TriAngle{ //
private double base;
private double height;
public TriAngle(){
//此处this.表示当前正在创建的对象的属性;
this.base=1.0;
this.height=1.0;
}
public TriAngle(double base,double height) {
//赋值号左边带有this的是当前对象的属性,赋值号后边的是形参;
this.base=base;
this.height=height;
}
public void setBase(double b) {
base=b;
}
public void setHeight(double height) {
this.height=height; //形参名与属性名同名的情况,赋值号左边的是属性名(需要加上this.),右边的是形参名;
}
public double getBase() {
return base;
}
public double getHeight(){
return height;
}
public void info() {
System.out.println("base:"+this.base+",height:"+this.height);
System.out.println(this.area());
}
public double area() {
return (base*height)/2;
}
}
三、this关键字习题一:
package com.atguigu.exercise;
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;
}
//取钱
public void withdraw(double amount) {
if(balance>=amount) {
balance-=amount;
System.out.println("成功取出:"+amount);
}else {
System.out.println("余额不足,取款失败!");
}
}
//存款
public void deposit(double amount) {
balance+=amount;
System.out.println("成功存入:"+amount);
}
}
package com.atguigu.exercise;
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 Account getAccount() {
return account;
}
public void setAccount(Account account) {
this.account = account;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
}
package com.atguigu.exercise;
public class TestCustomer {
public static void main(String[] args) {
Customer cust=new Customer("Jane","Smith");
cust.setAccount(new Account(1000,2000,0.0123));
Account account=cust.getAccount();
account.deposit(100); //cust.getAccount().deposit(100);
account.withdraw(960); //cust.getAccount().withdraw(960);
account.withdraw(2000); //cust.getAccount().withdraw(2000);
System.out.println("Customer ["+cust.getLastName()+","+cust.getFirstName()+"] has a account: id is "
+account.getId()+",annualInterestRate is:"+account.getAnnualInterestRate()*100+"%,balance is:"+account.getBalance());
}
}
四、this关键字习题二:
(1)、Boy类中的代码:
package com.atguigu.exercise;
public class Boy {
private String name;
private int 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 marry(Girl girl) {
System.out.println("我要娶"+girl.getName());
}
public void shout() {
if(age>22)
System.out.println("我到了结婚年龄。");
else
System.out.println("未到");
}
}
(2)、Girl类中的代码:
package com.atguigu.exercise;
public class Girl {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void marry(Boy boy) {
System.out.println("我要嫁给"+boy.getName());
}
}
(3)、test类中的代码:
package com.atguigu.exercise;
public class test {
public static void main(String[] args) {
Boy boy=new Boy();
boy.setName("宫本");
boy.setAge(25);
Girl girl=new Girl();
girl.setName("梅花");
boy.marry(girl);
boy.shout();
System.out.println();
girl.marry(boy);
}
}
五、JavaBean——UML——package——import等关键字
1、JavaBean:
2、UML图:
3、package:声明源文件所在的包,写在程序的第一行;每”.”一次,表示一层文件目录;包名要小写。
4、import:显式的导入指定包下的类或接口;写在包的声明与源文件之间;如果需要引入多个类或接口,那么就并列就行。
Import static :表示导入类的static的属性或方法。