java笔记(第三课)

小知识:

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:一个类中最好有重载的构造函数(继承)

******

  1. :在一个类里,java中可以有两个同名函数(函数的重载),但形参列表必须不一样,返回值可以一样.

  1. 没有名字的语句块只在生成对象时调用(只有一次)

******

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;
        }      
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值