每一个不曾起舞的日子,都是对生命的辜负。
java面向对象学习day07
一、Test
1、属性赋值
1.1、先后顺序
-
默认初始化
-
显式初始化
-
构造器中初始化
-
通过“对象.方法"或”对象.属性“的方式赋值
1.2、实例
package Object.day07;
public class UserTest {
public static void main(String[] args) {
User u = new User();
System.out.println(u.age);
User u1 = new User(2);
u1.setAge(3);
System.out.println(u1.age);
}
}
class User{
String name;
int age = 1;
public User(){
}
public User(int a){
age = a;
}
public void setAge(int a){
age = a;
}
}
1.3、JavaBean
所谓JavaBean,指符合如下标准的Java类:
-
类是公共的
-
有一个无参的公共的构造器
-
有属性,且有对应的get、set方法
二、this关键字
1、this关键字的使用:
-
this可以用来修饰:属性、方法、构造器
-
this可以理解为当前对象 或当前正在创建的对象(构造器)
2、说明
在类的方法中,我们可以使用“this.属性”或“this.方法''的方式,调用当前对象的属性或方法。但是,通常情况下,我们多选择省略”this.“。特殊情况下,如果方法的形参和类的属性同名是,我们必须显式的使用”this.变量“的方式,表明此变量是属性,而非形参。
简言之,若出现重名,便可用this加以区分。
3、this调用构造器
1、我们在类的构造器中,可以显式的使用“this(形参列表)”方式,调用本类中指定的其他构造器。
2、构造器中不能通过“this(形参列表)”方式调用自己
3、如果一个类中有n个构造器,则最多有n-1构造器中使用了“this(形参列表)”
4、规定:“this(形参列表)”必须声明在当前构造器的首行
5、构造器内部,最多只能声明 一个“this(形参列表)”,用来调用其他的构造器
实例:
package Object.day07;
public class PersonTest {
public static void main(String[] args) {
//Person p1 = new Person();
//p1.setAge(1);
//System.out.println(p1.getAge());
Person p2= new Person("yang");
System.out.println(p2.getName());
Person p3 = new Person("ting",45);
System.out.println(p3.getAge());
}
}
class Person{
private String name;
private int age;
public Person(){
String info = "缓缓飘落的枫叶像思念";
System.out.println(info);
}
public Person(String name){
this();
this.name = name;
}
public Person(int age){
this();
this.age = age;
}
public Person(String name,int age){
this(age);
this.name = name;
//this.age = age;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return this.name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return this.age;
}
public void eat(){
System.out.println("我爱吃饭");
this.study();
}
public void study(){
System.out.println("我爱学习");
}
}
三、package关键字
1、package关键字的使用:
-
为了更好地实现项目中类的管理,提供包的概念
-
使用package声明类或接口所属的包,声明在源文件的首行
-
包属于标识符,遵循标识符的命名规则、规范(xxxyyyzzz)、“见名知意”
-
每 “.” 一次,就代表一层文件目录
2、补充:
-
同一个包下,不能命名同名的接口、类。
-
不同的包下,可以命名同名的接口、类。
3、JDK中主要的包
4、MVC设计模式
四、Test2.0
1、Test one
题目:
代码:
TriAngle类:
package Object.day07.test.triangle;
public class TriAngle {
private double base;
private double height;
public TriAngle(){
}
public TriAngle(double b,double h){
base = b;
height = h;
}
public void setBase(double b){
base = b;
}
public double getBase(){
return base;
}
public void setHeight(double h){
height = h;
}
public double getHeight(){
return height;
}
}
TriAngleTest类:
package Object.day07.test.triangle;
import Object.day07.test.triangle.TriAngle;
public class TriAngleTest {
public static void main(String[] args) {
TriAngle t1 = new TriAngle();
t1.setBase(2.0);
t1.setHeight(2.4);
System.out.println("base : "+t1.getBase()+ " height : "+ t1.getHeight());
TriAngle t2 = new TriAngle(3.4,6.7);
System.out.println("base : "+t2.getBase()+ " height : "+ t2.getHeight());
}
}
程序运行结果:
2、Test two
题目:
代码:
Boy类:
package Object.day07.test.marry;
public class Boy {
private String name;
private int age;
public Boy(){
}
public Boy(String name){
this.name =name;
}
public Boy(String name,int age){
this.name = name;
this.age = age;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age){
this.age = age;
}
public int getAge(){
return age;
}
public void marry(Girl girl){
System.out.println("我想娶"+girl.getName());
}
public void shout(){
if(this.age >= 22){
System.out.println("你可以去结婚啦!");
}else{
System.out.println("你还不可以结婚哦~");
}
}
}
Girl类:
package Object.day07.test.marry;
public class Girl {
private String name;
private int age;
public Girl(){
}
public Girl(String name,int age){
this.name = name;
this.age = age;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void marry(Boy boy){
System.out.println("我想嫁给"+boy.getName());
boy.marry(this);
}
public int compare(Girl girl){
return this.age - girl.age;
}
}
BoyGirlTest类:
package Object.day07.test.marry;
import Object.day07.test.marry.Boy;
import Object.day07.test.marry.Girl;
public class BoyGirlTest {
public static void main(String[] args) {
Boy boy = new Boy("唐伯虎",20);
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(girl1.getName()+"大");
}else if(compare < 0){
System.out.println(girl.getName()+"大");
}else{
System.out.println("一样大");
}
}
}
程序运行结果:
3、Test three
题目:
代码:
Account类:
package Object.day07.test.account;
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){
System.out.println("余额不足,取款失败");
return;
}
balance -= amount;
System.out.println("成功取出:"+amount);
}
public void deposit(double amount){
if(amount > 0){
balance += amount;
System.out.println("成功存入:"+amount);
}
}
}
Customer类:
package Object.day07.test.account;
import Object.day07.test.account.Account;
public class Customer {
private String firstName;
private String lastName;
private Account account;
public Customer(String firstName,String lastName){
this.firstName =firstName;
this.lastName = lastName;
}
public String getFirstName(){
return firstName;
}
public String getLastName(){
return lastName;
}
public Account getAccount(){
return account;
}
public void setAccount(Account account){
this.account = account;
}
}
CustomerTest类:
package Object.day07.test.account;
public class CustomerTest {
public static void main(String[] args) {
Customer cust = new Customer("Jane","Smith");
Account acct = new Account(1000,2000,0.0123);
cust.setAccount(acct);
cust.getAccount().deposit(100);
cust.getAccount().withdraw(366);
cust.getAccount().withdraw(2366);
}
}
程序运行结果:
4、Test four
题目:
代码:
Accout1类:
package Object.day07.test.account2;
public class Account1 {
private double balance;
public Account1(double init_balance){
this.balance = init_balance;
}
public double getBalance(){
return balance;
}
public void deposit(double amt){
if(amt > 0){
this.balance += amt;
System.out.println("存钱成功~");
}
}
public void withdraw(double amt){
if(amt <= balance){
this.balance -= amt;
System.out.println("取钱成功~");
}else{
System.out.println("你账户里的钱不够啦~");
}
}
}
Customer类:
package Object.day07.test.account2;
import Object.day07.test.account.Account;
public class Customer {
private String firstName;
private String lastName;
private Account1 account;
public Customer(String f,String l){
this.firstName = f;
this.lastName = l;
}
public String getFirstName(){
return firstName;
}
public String getLastName(){
return lastName;
}
public Account1 getAccount(){
return account;
}
public void setAccount(Account1 acct){
this.account = acct;
}
}
Bank类:
package Object.day07.test.account2;
public class Bank {
private Customer[] customers;
private int numberOfCustomer;
public Bank(){
customers = new Customer[10]; //不要忘记了初始化对象数组
}
public void addCustomer(String f,String l){
// int i =0;
Customer c = new Customer(f,l);
// this.customer[i] = c;
// numberOfCustomer = ++i;
customers[numberOfCustomer++] = c;
}
public int getNumberOfCustomer(){
return numberOfCustomer;
}
public Customer getCustomer(int index){
// return customers[index]; //考虑问题不够周全
if(index >= 0 && index < numberOfCustomer){
return customers[index];
}
return null;
}
}
BankTest类:
package Object.day07.test.account2;
public class BankTest {
public static void main(String[] args) {
Bank bank = new Bank();
bank.addCustomer("Jane","smith");
bank.getCustomer(0).setAccount(new Account1(2000));
bank.getCustomer(0).getAccount().withdraw(500);
double balance = bank.getCustomer(0).getAccount().getBalance();
System.out.println("客户:" + bank.getCustomer(0).getFirstName() + "的账户余额为:" +balance);
System.out.println("************************");
bank.addCustomer("立万","扬名");
System.out.println("银行客户的个数为:" + bank.getNumberOfCustomer());
}
}
程序运行结果:
内存解析: