标签:07 19 System int 2022 println password public out
Java(面向对象)
重点
1. 构造器
2. this关键字
3. 封装,代码层面,思想层面
4. 异常
5. get,set方法
6. 银行小项目,登录,注册
学习心得
了解了类,方法,构造器之间的关系,如何赋值,封装。封装有些难理解,对构建以及赋值的知识点有些不熟练,有些东西自己写不出来,还需要多多练习。
注意点
如果创建对象仅仅为了调用这个类的方法,建议使用无构造器
如果说创建对象的时候需要使用到对象的某个属性,可以使用构造器赋值
this关键字
代表的是当前类的对象,this代表的是当前方法的调用者
this既然代表方法的调用者,它实际上和对象的作用是一样的,既可以调属性,也可以调方法
this不能用在static的方法中
开发中this用在什么位置?
赋值,构造器赋值
调用构造器
this(str);
使用this调用的要求
- 必须在构造器中使用this调用构造器
- 必须是第一句话(第一行代码)
当使用对象去调用属性时,调用的是成员变量
面向对象的特征:封装
思想层面
可以把相似功能的代码封装成一个方法
如果说一堆的方法都要重复使用,我们还可以把一堆的方法封装成一个类
代码层面
- 属性私有化,所有的属性都要使用private
- 提供一个公有的set,get 方法
getter方法能够按照客户的期望返回格式化的数据
setter方法可以根据和检验setter方法传入的参数是否合法,隐藏对象的内部结构
正确定义一个类
- 所有的属性私有化
- 每个属性都有对应的setter,getter方法(规矩,要遵守)
异常
- 数组下标越界
- 内存溢出(错误)
- 空指针
空指针异常
引用数据类型的默认值(初始值是null,空引用)
总结
- this 代表当前类的对象,代表方法的调用者,通常用在构造器赋值。 set方法赋值,当形参名和成员变量的名相同时,赋值操作。
- 封装, 思想封装可以把相似功能的代码封装成一个方法
如果说一堆的方法都要重复使用,我们还可以把一堆的方法封装成一个类 - 封装,代码层面1. 属性私有化,所有的属性都要使用private
2. 提供一个公有的set,get 方法
getter方法能够按照客户的期望返回格式化的数据
setter方法可以根据和检验setter方法传入的参数是否合法,隐藏对象的内部结构
4.以后我们的赋值操作
- 不再使用对象.属性的方式
- 使用构造器
- setter方法
习惯:必须保证每个类都有一个无参构造器
代码练习
银行
/**
* 有一个Person类,有name,age属性
* 有一个Debit类,有cardId,password,balance属性
* Person类有一个开户的方法,openAccount,in(余额增加),out(余额减少,取款时判断)
* Debit类中有一个显示银行信息的方法
*
* 赋值的方式:
* 1.构造器
* 2.直接通过.属性的方式赋值
*
* 分析:
* 开户:给Person类的Debit属性赋值,Debit初始化时需要给cardId,password,balance赋值
* 最终在Demo中测试相关功能
*
*
* 加功能:键盘输入,存款和取款需要对比密码
* 加键盘输入:
* 哪些地方是需要我们来输入的
* 1.密码,姓名,年龄
* 2.存多少钱
* 3.取多少钱
*
* 在哪里写键盘输入
* Scanner应该出现在主方法里
*/
Person类
package com.morning.test01;
/**
* 习惯
* 如果一个类手写了构造器,原来的无参构造器失效了
* 我们要保证每个类都有无参构造器
*/
public class Person {
String name;
int age;
Debit debit;
public Person() { //无参构造器,每个类一定要有
}
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void openAccount(Debit debit){
this.debit = debit;
// 开户成功,显示开户信息
debit.show();
show();
}
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 void show(){
System.out.println("姓名:" + name + ",年龄:" + age);
}
public boolean valid(int pass){
if (pass == debit.password){
return true;
}
return false;
}
}
Debit类
package com.morning.test01;
public class Debit {
String cardId;
int password;
double balance;
public Debit() {
}
public Debit(String cardId, int password, double balance) {
this.cardId = cardId;
this.password = password;
this.balance = balance;
}
public void show(){
System.out.println("卡号:" + cardId + ",余额" + balance);
}
}
主方法
package com.morning.test01;
public class Demo {
public static void main(String[] args) {
Person person = new Person("张三",25);
Debit debit = new Debit("123456",123456,211);
person.openAccount(debit);
person.in(151);
person.out(200);
person.out(100);
}
}
新增功能
package com.morning.test01;
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Person person = new Person("张三",25);
for (;;){
System.out.println("请选择功能,1.开户2.存款3.取款");
String flag = sc.next();
switch (flag){
case "1":
System.out.println("请输入账户密码:");
int password = sc.nextInt();
System.out.println("请输入余额。");
double balance = sc.nextDouble();
Debit debit = new Debit("654321",password,balance);
person.openAccount(debit);
break;
case "2":
System.out.println("请输入密码:");
int pass = sc.nextInt();
//比对密码
boolean b = person.valid(pass);
if (b){
System.out.println("请输入存款金额:");
double money = sc.nextDouble();
person.in(money);
}else {
System.out.println("密码有误,无法存款!");
}
break;
case"3":
System.out.println("请输入密码:");
int pass1 = sc.nextInt();
//比对密码
boolean b1 = person.valid(pass1);
if (b1){
System.out.println("请输入取款金额:");
double money = sc.nextDouble();
person.out(money);
}else {
System.out.println("密码有误,无法取款!");
}
break;
}
}
}
}
登录和注册
* 注册和登录!
* 封装:属性一定要私有化,提供公有的set、get方法
* 1、创建一个User类,username和password
* 2、创建一个Employee类,id和name
* 3、Demo类。
*
* 登录:
* 输入账号和密码,然后去数组中比对,
* 遍历数组,分别比对账号和面,如果比对成功,则输出登录成功,则输入账号或密码错误!
*
*
* 空指针异常NullPointerException
*
* 注册2.0版本:
* 用户名不能重复!
* 遍历,用户名和数组中的用户名比对一下
User类
package com.jsoft.afternoon.test01;
public class User {
private int username;
private int 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;
}
public User() {
}
public User(int username, int password) {
this.username = username;
this.password = password;
}
}
主方法
package com.jsoft.afternoon.test01;
import java.util.Scanner;
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];
users[0] = new User(123456,123456);
int index = 1;
main:for (;;){
System.out.println("请选择功能:1、注册 2、登录");
String flag = sc.next();
u:for(;;){
switch (flag) {
case "1":
System.out.println("请输入账号:");
int username = sc.nextInt();
for (User user : users) {
if(user != null){
if(username == user.getUsername()){
System.out.println("用户名不能重复,请重新输入!");
continue u;
}
}
}
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 ++;
continue main;
case "2":
System.out.println("请输入账号:");
int username1 = sc.nextInt();
System.out.println("请输入密码:");
int password1 = sc.nextInt();
boolean b = false;
for (User u : users) {
if(u != null){
if(u.getUsername() == username1 && u.getPassword() == password1) {
b = true;
break;
// System.out.println("登录成功!");
}
// System.out.println("账号或密码错误!")
}
}
if(b) {
System.out.println("登录成功!");
}else {
System.out.println("账号或密码错误!");
}
}
}
}
}
}
标签:07,19,System,int,2022,println,password,public,out 来源: https://www.cnblogs.com/lurui711/p/16495825.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。