【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

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

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

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

最新文章

  1. JNI笔记1
  2. Docking Windows Phone controls to the bottom of a StackPanel
  3. 攻城狮在路上(叁)Linux(零)--- 软件环境、参考书目等一览表
  4. Centos系统上安装VNC view
  5. JAVA发送邮件工具类
  6. 在 Perl 中使用 Getopt::Long 模块来接收用户命令行参数
  7. Excel操作--使用NPOI导入导出Excel为DataTable
  8. [CodeForce]356D Bags and Coins
  9. linux下so动态库一些不为人知的秘密(中二)
  10. 4.Swift教程翻译系列——Swift基本运算符
  11. 《C#语言和数据库技术基础》单词必备
  12. 微信小程序教学第四章第二节(含视频):小程序中级实战教程:详情-视图渲染
  13. ImportError: numpy.core.multiarray failed to import
  14. 炸弹人游戏开发系列(7):加入敌人,使用A*算法寻路
  15. DAO 四个包的建立
  16. React16的interactiveUpdates
  17. How to create an rpm package
  18. css 类选择器结合元素选择器和多类选择器
  19. spring有关jar包的作用
  20. winform 窗体换皮肤,IrisSkin2.dll的用法

热门文章

  1. 调用altera IP核的仿真流程—下
  2. Android性能优化文章转载
  3. AOP动态代理解析3-增强方法的获取
  4. IMS Global Learning Tools Interoperability™ Implementation Guide
  5. 机器学习 —— 概率图模型(Homework: StructuredCPD)
  6. 【转】Nginx系列(三)--管理进程、多工作进程设计
  7. strcpy_s与strcpy的比較
  8. 在Linux下写一个线程池以及线程池的一些用法和注意点
  9. 生成唯一的id(转)
  10. Java-8ATM
  11. redis基本操作
  12. 通过使用浏览器对象模型,输出当前浏览器窗口中打开的文档的URL信息,并将显示在窗口中。
  13. Android 应用开发特色
  14. tf.reduce_sum tensorflow维度上的操作
  15. opencv-python教程学习系列1-安装库
  16. [Xamarin]我的Xamarin填坑之旅(二)
  17. 使用php生成数字、字母组合验证码(一)
  18. 使用copy函数输出容器中的内容
  19. appium desktop v1.2.7在android7.0上运行报错“Error: Error executing adbExec”
  20. WEB前端--CSS