小知识:
Attributes 属性(通常用来表征一个类的状态)
子类,父类(继承会学到)
自定义类型变量:(结构体,共用体)
类——>想象为数据结构
UML:Unit Model Language
文件名可以和类名不一致,不过公共类public必须放在同名的文件名下(且是代码规范)
类外只可以有package 和 import,Java不能在类外定义全局变量
类的内部:(变量的定义,行为的定义)
不允许调用,不允许赋值,可以在函数内调用。
*可以通过class后缀名文件反编译出代码(javap)
john = new Student();//john指向一个内存空间,若再写一个,则前面的john成为垃圾
###
函数解决赋初值的冗余
放到大类的大括号前, + init函数
Static void init(Cust st , String n , int ID, int pwd,double m)
后在主函数执行:
init(st[0],"张晓红",111,123456,1000);
init(st[1],.....)
###
在对象类里 + init 函数(核心逻辑:主谓.
Void init (String n ,int i, int p ,double m)
{
}
//主函数变化
st[0].init();
st[1].init();
###
加了init函数后的代码
package customer;
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
Cust st[] = new Cust[4];
st[0] = new Cust();
st[1] = new Cust();
//初始化赋值
st[0].init("张晓红",111,123456,1000);
st[1].init("张晓丽",222,123456,10000);
System.out.println("请输入您的账户!");
int ID = sc.nextInt();
boolean find = false;
for(int i = 0 ;i < st.length; i++)
{
if(ID == st[i].ID)
{
find = true;
System.out.println("请输入密码!");
int password = sc.nextInt();
if(password == st[i].pwd)
{
boolean flg = true;
System.out.println("登入账户成功!");
while(flg)
{
st[i].run(st);
System.out.println("输入_> Y 退出!");
String cmd = sc.next();
if(cmd.equals("Y"))
{
flg = false;
}
}
}
break;
}
}
if(!find) System.out.println("查无此用户!");
}
}
class Cust
{
int ID;
double m;
int pwd;
String name;
void init(String name ,int ID, int pwd ,double m)
{
this.name = name;
this.ID = ID;
this.pwd = pwd;
this.m = m;
}
void dM()
{
Scanner sc = new Scanner(System.in);
System.out.println("请输入要转账的金额!");
double mo = sc.nextDouble();
m+=mo;
System.out.println("存款成功!");
}
void gM()
{
Scanner sc = new Scanner(System.in);
System.out.println("请输入需要取出的金额!");
double mo = sc.nextDouble();
if(m - mo > 0)
{
m-=mo;
System.out.println("取款成功!");
}
else
{
System.out.println("取款失败,余额不足!");
}
}
void print()
{
System.out.println("您当前余额为:" + m);
}
void zZ(Cust st[])
{
Scanner sc = new Scanner(System.in);
System.out.println("请输入您需要转账的对象账户!");
int ID = sc.nextInt();
boolean find = false;
for(int i = 0 ;i < st.length; i++)
{
if(st[i].ID == ID)
{
find = true;
System.out.println("请输入您需要转账的金额!");
double mo = sc.nextDouble();
if(m - mo > 0)
{
m -= mo;
st[i].m += mo;
System.out.println("转账成功!");
}
else
{
System.out.println("余额不足,转账失败!");
}
break;
}
}
if(!find)
{
System.out.println("查无此用户!");
}
}
void run(Cust st[])
{
Scanner sc = new Scanner(System.in);
System.out.println("****存钱\t1****");
System.out.println("****取钱\t2****");
System.out.println("****查询\t3****");
System.out.println("****转账\t4****");
System.out.println("****退出\t5****");
int cmd = sc.nextInt();
switch(cmd)
{
case 1:
dM();
break;
case 2:
gM();
break;
case 3:
print();
break;
case 4:
zZ(st);
break;
case 5:
System.exit(1);
default:
break;
}
}
}
###
构造函数
1作用:给该类的对象进行初始化
2:不用定义返回值
3:函数名和类名必须一致
4:必须在new运算符后调用
5:如果没有为一个类显式地定义一个构造函数,则系统为它分配一个无参的,默认的,方法体为空的构造函数.
6:一个类中最好有重载的构造函数(继承)
******
- :在一个类里,java中可以有两个同名函数(函数的重载),但形参列表必须不一样,返回值可以一样.
- 没有名字的语句块只在生成对象时调用(只有一次)
******
6:一个类中最好有重载的构造函数(继承) 如何理解?
Cust (String n ,int i,...)
{
}
//+上一个函数
Cust()
{
}
###
将init函数改为构造函数Cust的代码
package customer;
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
Cust st[] = new Cust[4];
//有了构造函数后可以直接在 new 分配内存后赋值
st[0] = new Cust("张晓红",111,123456,1000);
st[1] = new Cust("张晓丽",222,123456,10000);
System.out.println("请输入您的账户!");
int ID = sc.nextInt();
boolean find = false;
for(int i = 0 ;i < st.length; i++)
{
if(ID == st[i].ID)
{
find = true;
System.out.println("请输入密码!");
int password = sc.nextInt();
if(password == st[i].pwd)
{
boolean flg = true;
System.out.println("登入账户成功!");
while(flg)
{
st[i].run(st);
System.out.println("输入_> Y 退出!");
String cmd = sc.next();
if(cmd.equals("Y"))
{
flg = false;
}
}
}
break;
}
}
if(!find) System.out.println("查无此用户!");
}
}
class Cust
{
int ID;
double m;
int pwd;
String name;
//重载构造函数(不需要传递参数)
Cust()
{
}
//构造函数,用于初始化
Cust(String name,int ID, int pwd,double m)
{
this.name = name;
this.ID = ID;
this.pwd = pwd;
this.m = m;
}
void dM()
{
Scanner sc = new Scanner(System.in);
System.out.println("请输入要转账的金额!");
double mo = sc.nextDouble();
m+=mo;
System.out.println("存款成功!");
}
void gM()
{
Scanner sc = new Scanner(System.in);
System.out.println("请输入需要取出的金额!");
double mo = sc.nextDouble();
if(m - mo > 0)
{
m-=mo;
System.out.println("取款成功!");
}
else
{
System.out.println("取款失败,余额不足!");
}
}
void print()
{
System.out.println("您当前余额为:" + m);
}
void zZ(Cust st[])
{
Scanner sc = new Scanner(System.in);
System.out.println("请输入您需要转账的对象账户!");
int ID = sc.nextInt();
boolean find = false;
for(int i = 0 ;i < st.length; i++)
{
if(st[i].ID == ID)
{
find = true;
System.out.println("请输入您需要转账的金额!");
double mo = sc.nextDouble();
if(m - mo > 0)
{
m -= mo;
st[i].m += mo;
System.out.println("转账成功!");
}
else
{
System.out.println("余额不足,转账失败!");
}
break;
}
}
if(!find)
{
System.out.println("查无此用户!");
}
}
void run(Cust st[])
{
Scanner sc = new Scanner(System.in);
System.out.println("****存钱\t1****");
System.out.println("****取钱\t2****");
System.out.println("****查询\t3****");
System.out.println("****转账\t4****");
System.out.println("****退出\t5****");
int cmd = sc.nextInt();
switch(cmd)
{
case 1:
dM();
break;
case 2:
gM();
break;
case 3:
print();
break;
case 4:
zZ(st);
break;
case 5:
System.exit(1);
default:
break;
}
}
}