一、今日重点
【√代表掌握了,-代表产生困惑但已解决,×代表没解决】
- this关键字【√】
- 封装【√】
- 练习:
1.实现用户的登录和注册【√】
2.银行系统【√】
二、今日知识
- this关键字
- this关键字可以用来访问本类的属性,方法、构造器
- this用于区分当前类的属性和局部变量
- 访问成员方法的语句:this。方法名(参数列表)
- 访问构造器语法:this(参数列表);注意只能在构造器中使用(即只能在构造器中访问另外一个构造器,必须放在第一条语句)
- this不能在类定义的外部使用,只能在类定义的方法中使用
- 开发中,this通常用在赋值,构造器赋值。
public Person(String name,int age) { this.name = name; this.age = age;
当我们实例化一个对象时我们会调用这个带参数的构造方法,构造方法中的this就代表我们实例化的这个对象。除此之外,this关键字还可以在构造方法中调用另一个构造方法
代码如下
class Person{ String name; int age public Person(String name){ this.name = name; } public Person(String name,int age){ this(name);//调用第一个构造器 this.age = age; } }
- 封装
封装就是把抽象出的数据【属性】和对数据的操作【方法】封装在一起,数据被保护在内部,程序的其他部分只有通过被授权的操作【方法】,才能对数据进行操作
- 封装步骤
- 将属性进行私有化private
- 提供一个public set方法,用于对属性判断并赋值
- 提供一个public get方法,用于获取属性的值
- 从代码层面理解封装
- 属性私有化:所有的属性都要使用private封装
- 提供一个公有的(public)setget方法
- getter方法能够按照客户的期望返回格式化的数据
- setter方法可以限制和检验setter方法传入的参数是否合法
- 隐藏对象的内部结构
- 正确定义一个类
- 所有的属性私有化
- 每个属性都有对应的set和get方法
- 这是规矩,必须遵守
public class Dog { private int age; private String color; public void setAge(int age){ this.age=age; } public void setColor(String color){ this.color=color; } public int getAge() { return age; } public String getColor() { return color; } }
- 从思想层面理解封装
- 把一堆重复执行(相似功能)的代码封装成方法
- 把一堆可能重复执行的方法封装成类
- 所有的属性私有化,由getter和setter方法
- 以后我们使用赋值的方式:
- 不在使用对象.属性的方式
- 使用构造器
- 使用setter方法
三、练习汇总
- 练习题:实现用户的注册和登录
User类
public class User { private int username; private int password; public User(){} public User(int username, int password) { this.username = username; this.password = password; } public int getUsername() { return username; } public void setUsername(int username) { this.username = username; } public int getPassword() { return password; } public void setPassword(int password) { this.password = password; } }
Demo类
public class Demo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // User类型的数组 // User类型的数中保存的就是一个一个的User对象 // 当从User类型的数组中取值的时候,比如说users[0]是一个User类型的对象 User[] users = new User[10]; int index = 0; for (; ; ) { System.out.println("请选择功能:1、注册 2、登录"); String flag = sc.next(); switch (flag) { case "1": c: for (; ; ) { System.out.println("请输入账号:"); int username = sc.nextInt(); for (User u : users) { if (u != null) { if (username == u.getUsername()) { System.out.println("账号已被注册"); break c; } } } System.out.println("请输入密码:"); int password = sc.nextInt(); // 保存账号密码,保存的是User对象 // 构建User对象 User user = new User(username, password); users[index] = user; System.out.println("注册成功,账号:" + users[index].getUsername() + ",密码:" + users[index].getPassword()); index++; break c; } break; case "2": System.out.println("请输入账号:"); int xxx = sc.nextInt(); System.out.println("请输入密码:"); int yyy = sc.nextInt(); boolean x = true; for (User u : users) { if (u != null) { if (u.getUsername() == xxx && u.getPassword() == yyy) { x = false; break; } } } System.out.println(x ? "登陆失败":"登录成功"); } } } }
- 练习题:银行系统
- 有一个Person类,有name,有age属性
- 有一个Debit类,有cardId,password,balance属性
- Person类有一个开户的方法,openAccount(存款),in(余额增加),out(余额减少)
- Debit类中有一个显示银行卡信息的方法。(账号和余额)
Debit类
public class Debit { int cardId;//卡号 int password;//密码 double balance;//余额 public Debit(){}//无参构造方法 public Debit(int cardId,int passwor){ this.cardId=cardId; this.password=password; } public Debit(int cardId,int password,double balance){ this.balance=balance; this.cardId=cardId; this.password=password; } public void show(){ System.out.println("卡号"+cardId+"余额"+balance); } }
Person类
public class Person { String name; int age; Debit debit; public Person(){} public Person(String name,int age){ this.age=age; this.name=name; } public Person(String name,int age,Debit debit){ this.age=age; this.name=name; this.debit=debit; } public void openAccount(Debit debit){ this.debit=debit; debit.show(); show(); } public void in(double banlance){ debit.balance+=banlance; System.out.println("存款成功"); } public void out(double banlance){ if(banlance<= debit.balance){ debit.balance-=banlance; System.out.println("取款成功"); }else{ System.out.println("余额不足,您的余额为:"+ debit.balance); } } public void show(){ System.out.println("姓名:"+name+".年龄"+age); } public boolean valid(int pass){ if(pass == debit.password){ return true; } return false; } }
Demo类
public static void main(String[] args) { Person p=new Person("小明",18); Debit d=new Debit(1362074,123456,10); p.openAccount(d); p.in(1000); p.debit.show(); p.out(100); p.debit.show(); }
1.输入功能。
2.能开户,能存款,能取款
3.取款判断存款够不够。
public class Demo { public static void main(String[] args) { Person p=new Person("小明",18); Scanner s=new Scanner(System.in); while (true) { System.out.println("请输入功能1.开户,2.存款,3.取款"); int flag = s.nextInt(); switch (flag) { case 1: System.out.println("请输入密码:"); int password = s.nextInt(); System.out.println("请输入存多少钱?"); int money = s.nextInt(); Debit d = new Debit(1362074, password, money); p.openAccount(d); break; case 2: System.out.println("请输入密码:"); int pass=s.nextInt(); boolean b=p.valid(pass); if(b) { System.out.println("登陆成功"); System.out.println("请输入存多少钱?"); double inmoney = s.nextInt(); p.in(inmoney); }else{ System.out.println("密码错误,无法存款!"); } break; case 3: System.out.println("请输入密码:"); int pass1=s.nextInt(); boolean b1=p.valid(pass1); if(b1) { System.out.println("登陆成功"); System.out.println("请输入取多少钱?"); double outmoney = s.nextInt(); p.out(outmoney); }else{ System.out.println("密码错误,无法存款!"); } break; } } } }
四、学习总结
- 觉得今天的内容比较有难度,但比昨天更有趣一些。
- 在思想层面上理解起来较为费力,但练习题可以算是掌握,老师讲解的十分清晰。
- 今天的作业比较难,希望可以攻克,加油。
浙公网安备 33010602011771号