20220719 第九组 于芮 面向对象——挺抽象2(第十二天)
this关键字(代表当前类的对象)--不能用static修饰的方法中
当使用对象调用属性时,调用的是成员变量
this既然是方法的调用者,实际上和对象是一样的
既可以调属性,也可以调方法
通常用在赋值,构造器的使用
面向对象的特征:封装
1.代码层面
a.属性私有化,所有的属性都使用private封装
b.提供一个公有的set,get方法
c.getter方法能够按照客户的期望返回格式化的数据
d.dsetter方法可以限制和检验setter方法转入的参数是否合法,隐藏对象的内部结构
正确定义一个类
1.所有的属性私有化
2.每个属性都有对应的setter,getter方法
2.思想层面
什么时候用构造器赋值?
看创建对象是为了干什么?
如果说创建对象仅仅是为了调用这个类的方法,建议使用无参构造器
如果说创建对象的时候需要使用到对象的某个属性,可以使用构造器赋值
空指针异常
什么情况下会出现空指针异常:
引用数据类型的默认值(初始值是null,空引用)
3个异常:
1、数组下标越界
2、内存溢出(错误)
3、空指针
总结:
1.this代表当前类的对象,代表方法的调用者,通常用在构造器赋值,
set方法赋值。当形参名和成员变量的名相同时,赋值操作。
2.封装,思想封装,把一堆重复执行的代码封装成方法。把一堆重复执行的
方法封装成一个类。
3.封装,代码层次的封装,所有的属性私有化。private,每个属性提供对应的
setter和getter方法。
以后我们的赋值操作:
1.不再使用对象.属性的方式
2.使用构造器
3.setter方法
今天的学习内容相对于来说不是很多,大部分时间都是老师带领我们进行实践,来看看今天的学习成果吧,今天的学习成果是一个简单的银行开户系统,可以简易完成开户、存款、取款,下面是今天的完整的代码了,一起看看吧!
public class Person { String name; int age; Debit debit; //构造器 public Person(String name,int age){ this.name=name; this.age=age; } //保证每个类都有无参构造器 public Person(){ } public void openAccount(Debit debit){ this.debit=debit; debit.show(); this.show(); } public void show(){ System.out.println("姓名:"+name+"年龄:"+age); } public void in(double money){ debit.balance+=money; System.out.println("存款成功!余额为:"+debit.balance); } public void out(double money){ if(money<= debit.balance){ debit.balance-=money; System.out.println("取款成功!余额为:"+debit.balance); }else { System.out.println("余额不足!余额为:"+debit.balance); } } public boolean valid(int pass){ if(pass== debit.passWord){ return true; } return false; } }
public class Demo { public static void main(String[] args) { Person person=new Person("张三",23); Debit debit=new Debit("33333333",111111,100); person.openAccount(debit); person.in(151); person.out(200); person.out(100); }
1 package lianxi; 2 3 import java.util.Scanner; 4 import java.util.function.DoubleUnaryOperator; 5 6 public class Demo2 { 7 public static void main(String[] args) { 8 Person person=new Person("张三",25); 9 Scanner in=new Scanner(System.in); 10 for (;;){ 11 12 System.out.println("请选择功能:1.开户2.存款3.取款"); 13 String flag=in.next(); 14 switch (flag){ 15 case "1": 16 System.out.println("请输入密码:"); 17 int password=in.nextInt(); 18 System.out.println("请输入余额:"); 19 double balance=in.nextDouble(); 20 Debit debit=new Debit("333333",password,balance); 21 person.openAccount(debit); 22 break; 23 case "2": 24 System.out.println("请输入密码:"); 25 int pass=in.nextInt(); 26 boolean b=person.valid(pass); 27 if(b){ 28 System.out.println("请输入存款金额:"); 29 double money=in.nextDouble(); 30 person.in(money); 31 }else { 32 System.out.println("密码有误,无法存款!"); 33 } 34 35 break; 36 case "3": 37 System.out.println("请输入密码:"); 38 int pass1=in.nextInt(); 39 boolean b1=person.valid(pass1); 40 if(b1){ 41 System.out.println("请输入取款金额:"); 42 double money=in.nextDouble(); 43 person.out(money); 44 }else { 45 System.out.println("密码有误,无法取款!"); 46 } 47 48 49 } 50 51 52 } } 53 }
1 package lianxi; 2 3 public class Debit { 4 String cardId; 5 int passWord; 6 double balance; 7 public Debit(){ 8 9 } 10 public Debit(String cardId,int passWord,double balance){ 11 this.cardId=cardId; 12 this.passWord=passWord; 13 this.balance=balance; 14 } 15 public void show(){ 16 System.out.println("卡号:"+cardId+"余额"+balance); 17 } 18 19 }