【JAVA 零基础入门系列】Day12 Java 类的简单应用

  俗话说的好,实践出真知,所以除了理论知识掌握扎实以外,更重要的是要多加操练,这样才能掌握核心科技。

  今天我们就用刚学会的类来实践一下,目标便是完成上一篇中的剁手任务。

  我们的商品类已经准备好了,代码重新罗列一次,这里增加了一个重载方法,关于重载这里不过多介绍,以后会专门文章介绍,这里把它当成一个普通方法就好了,主要用来比较两个商品是否相等,如果对代码不熟悉的话可以再返回去看一下上一篇文章。

  这里顺便介绍一下 Java 注释的正确使用姿势。注释是插在源代码中间用于对代码进行说明的文字,不会被编译和执行。代码不仅仅是用来编译的,更是用来阅读的,因此写上足够多的注释是有必要的,这样可以保证自己在以后回过头来看自己写的破代码的时候写的是什么鬼,如果将自己写代码的思路也记录下来的话,那就更方便自己以后的对比提升了。

  Java 中的注释方法主要有三种:

  1. 单行注释,使用 //

  2. 多行注释,使用 /* 代码 */

  3. 文档注释,使用 /** 代码 */ 这种格式是为了便于 javadoc 程序自动生成文档。这里先不做介绍,之后会又专门一篇来做讲解。

/*GOODS类
主要用于记录商品信息,并提供商品信息的访问方法
*/
public class Goods{
  //实例域,用于存储商品信息
    private String title="";
    private double price=0.0;
    private String link = "";
  
  //构造器1
    public Goods(String aTitle,double aPrice,String aLink){
        title = aTitle;
        price = aPrice;
        link = aLink;
    }
  //构造器2
    public Goods(String aTitle,double aPrice){
        title = aTitle;
        price = aPrice;
        link = "www.baidu.com";
    }
  //构造器3
    public Goods(double aPrice){
        price = aPrice;
        title = "Goods";
        link = "www.baidu.com";
    }
  //取商品标题
    public String getTitle(){
        return title;
    }
  //取商品价格
    public double getPrice(){
        return price;
    }
  //取商品链接
    public String getLink() {
        return link;
    }
  //设置商品标题
    public void setTitle(String aTitle){
        title = aTitle;
    }
  //设置商品价格
    public void setPrice(double aPrice){
        price = aPrice;
    }
  //设置商品链接
    public void setLink(String aLink){
        link = aLink;
    }
  //输出商品信息
    public void print(){
        System.out.println("title:"+title+" price:"+price+" link:"+link);
    }


  //重载equals判断方法
  @Override
  public boolean equals(Object obj) {
      return super.equals(obj);
  }
}

  这样一注释,这个类的功能就很清晰了,人家一看就知道你要做什么瞎操作了,当然,如果每次使用类都要上类的源码查看的话,也确实不方便,所以才有了 Javadoc 这样的工具,这里因为还没有介绍,所以先不使用。

  接下来,我们需要一个购物车来存放商品。因为只需要管理一个购物车,所以预算类就先不写了,不然也有些太小题大做了。

package pers.frank.test;

/**
 * Cart类
 * 购物车类用于管理商品和预算信息
 * 提供添加商品,获取预算,修改预算等方法
 */
public class Cart {
    //实例域
    Goods[] goodsList = new Goods[20];//商品列表,因为还没有介绍列表跟集合,所以先使用数组存储,先假设你不会买超过20件商品
    int goodsNum = 0;//商品数量
    double budget = 0.0;//预算
    double totalPrices = 0.0;//当前商品总价

    //构造函数
    public Cart(double aBudget){
        budget = aBudget;
    }

    //获取商品总价
    public double getTotalPrices() {
        return totalPrices;
    }

    //获取预算
    public double getBudget() {
        return budget;
    }

    //修改预算
    public void setBudget(double aBudget) {
        budget = aBudget;
    }

    //添加商品,预算足够则返回真,不够则返回假
    public boolean addGoods(Goods aGoods){
        //先判断预算
        if(totalPrices + aGoods.getPrice() > budget){
            return false;
        }
        //预算足够则添加
        //遍历数组,寻找元素为null的位置
        int i = 0;
        for(; i < goodsList.length; i++){
            if(goodsList[i] == null) {
                goodsList[i] = aGoods;
                break;
            }
        }
        if(i == goodsList.length)
            return false;
        totalPrices = totalPrices + aGoods.getPrice();
        goodsNum++;
        return true;
    }
//遍历输出购物车中的商品信息
    public void showGoodsList(){
        System.out.println("购物车内商品数量:" + goodsNum + " 商品总价:" + totalPrices);
        for( Goods a: goodsList){
            if (a == null) continue;
            a.print();
        }
    }
}

  这里的代码没有太多需要介绍的东西,注释里已经写的很详细了。关于数据描述和使用的类已经构建好了,接下来只需要使用它们就可以了。

public class Test{
    public static void main(String[] args) {
        double budget = 20000;//预算
        Cart myCart = new Cart(budget);//实例化一个购物车对象
        //创建商品对象数组
        Goods[] goodsList = new Goods[3];
        goodsList[0] = new Goods("goodsA",10000,"link1");
        goodsList[1] = new Goods("goodsB",6000,"link2");
        goodsList[2] = new Goods("goodsC",6000,"link3");

        //循环添加商品
        for (int i = 0; i < goodsList.length; i++){
            if (myCart.addGoods(goodsList[i]) == true){
                //添加成功
                System.out.println("商品添加成功!标题:" + goodsList[i].getTitle() + " 价格:" + goodsList[i].getPrice() + " 链接:"+ goodsList[i].getLink());
            }else {
                //添加失败
                System.out.println("商品添加失败!当前预算:" + myCart.getBudget() + " 当前商品总价:"+ myCart.getTotalPrices()+" 要添加的商品价格:" + goodsList[i].getPrice());
                break;
            }
        }

        //打印购物车内所有商品信息
        myCart.showGoodsList();
    }
}

  输出如下:

商品添加成功!标题:goodsA 价格:10000.0 链接:link1
商品添加成功!标题:goodsB 价格:6000.0 链接:link2
商品添加失败!当前预算:20000.0 当前商品总价:16000.0 要添加的商品价格:6000.0
购物车内商品数量:2 商品总价:16000.0
title:goodsA price:10000.0 link:link1
title:goodsB price:6000.0 link:link2

  我们的类的简单应用就编写完成了,当然这个类并不完善,有些更复杂的概念还没有介绍,这里只是为了演示类的正确使用姿势而设计的,不要过于纠结于细节。

  我们可以看出,测试用的主要代码其实很少,因为我们把具体实现都封装在了类里,只需要按规则使用类中的方法就可以了。这就好比盖房子,不是直接用石头木材堆出来的,而是先加工成砖瓦门窗,然后再搭建。使用这些砖瓦门窗当然要比直接使用石头木材方便得多。使用类的便利性也在于此。我们把商品跟购物车类构建好之后,如果某些地方需要修改,只需要在相应的类中进行修改即可,只要对外提供的方法没有改变,那么调用这些代码的其他代码就不需要进行修改,这样就能降低代码的耦合度。

  至此,本篇就结束了,之后会介绍关于类的更多内容,欢迎大家继续关注!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,271评论 5 466
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,725评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,252评论 0 328
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,634评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,549评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 47,985评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,471评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,128评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,257评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,233评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,235评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,940评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,528评论 3 302
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,623评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,858评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,245评论 2 344
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,790评论 2 339

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    X先生_未知数的X阅读 15,967评论 3 119
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,559评论 18 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,251评论 25 707
  • 今年早春的一天早上,我的奶奶突发心脏病离世了,那是我报道的第一天。早上接到通知我奶奶病危的变化后,我疯了一样从学校...
    谭塔塔阅读 360评论 0 0
  • 利用了三个下午整理完了韵律按摩的笔记,还配上了插图心情美美哒!诸多要做的事儿终于完成了其中的一项啦!每次...
    善水100阅读 459评论 0 0