【Java SE 代码回顾】——day04_列表、静态方法、构造方法

简介: 【Java SE 代码回顾】——day04_列表、静态方法、构造方法

这个系列是对javaSE课程代码的回顾,所有Demo都是亲自动手实现的,并做了小小的change,为了方便自己理解和后期复习,代码里加了大量的注释。现对所有知识点的代码进行复习整理,进一步理解、完善代码,对注释进行补充。其中重要的知识点会单独说明,但主要以代码为主。


说明:博客是对学习内容的巩固,很多注释是为了自己理解,所以不会很专业。


------------------------------------------------------ArrayList------------------------------------------------  

package cn.tjpu.javase04.ArrayList;
import java.util.ArrayList;
/**
 * ArrayList用法,<>中填入的是泛型参数,即数据类型
 * ArrayList是一种集合数据类型,可以装入任意多个数据且长度可变
 * size():ArrayList长度; add(值):添加数据 ;get(索引):读数据 ;remove(索引):移除数据
 */
public class ArrayListDemo01 {
  public static void main(String[] args) {
    // 创建一个用来装整数数据的ArrayList对象
    ArrayList<Integer> arylt = new ArrayList<Integer>();
    // 向arraylist中添加数据
    arylt.add(3);
    arylt.add(4);
    arylt.add(7);
    arylt.add(1);
    // 从arraylist中读取数据
    int a = arylt.get(2);
    int b = arylt.get(0);
    System.out.println(a + "," + b);
    System.out.println("------------------------------");
    // 遍历arraylist,按照角标顺序打印
    for (int i = 0; i < arylt.size(); i++) {
      System.out.println(arylt.get(i));
    }
    System.out.println("------------------------------");
    // 移除arraylist中数据
    arylt.remove(1);
    for (int i = 0; i < arylt.size(); i++) {
      System.out.println(arylt.get(i));
    }
    System.out.println("------------------------------");
    // 更改list中指定位置的数据
    arylt.set(2, arylt.get(0));
    // 可直接打印list
    System.out.println(arylt);
  }
}

------------------------------------------------------各种方法定义------------------------------------------------  

package cn.tjipu.javase04.function;
/**
 * 定义不同方法的类
 */
public class NumberPair {
  public int a;
  public int b;
  //无参有返回值的方法
  public int GetSum() {
    int sum = this.a + this.b;
    return sum;
  }
  // 没有返回值的方法
  public void say() {
    System.out.println("我吃了");
  }
  // 有参没有返回值的方法,同名方法,参数列表不一样,叫方法的重载
  public void say(String name) {
    System.out.println(name + "吃了");
  }
  // 带多个参数但没有返回值的方法
  public void say(String name1, String name2) {
    System.out.println(name1 + "和" + name2 + "都吃了");
  }
  // 有参且有返回值的方法
  public int Sum(int a, int b) {
    return a + b;
  }
}
package cn.tjipu.javase04.function;
/**
 * 不同方法的测试
 */
public class FunctionDemo1 {
  public static void main(String[] args) {
    NumberPair pair = new NumberPair();
    //给成员变量赋值
    pair.a = 10;
    pair.b = 33;
    /*
     //方法未封装,直接在主程序中计算
     int sum=pair.a+pair.b;
     System.out.println(sum);
    */
    // 在类中定义方法,用实例化的对象调用方法计算
    System.out.println(pair.GetSum());
    // 调没有返回值的方法
    pair.say();
    // 调用有参数,但没有返回值的方法
    pair.say("小明");
    pair.say("小明", "小红");
    // 调用有参且有返回值的方法
    int sum = pair.Sum(10, 2);
    System.out.println(sum);
  }
}

------------------------------------------------静态方法、list排序--------------------------------------------  

package cn.tjipu.javase04.function;
import java.util.ArrayList;
/**
 * list处理工具类(都是静态方法)
 * 静态方法 :
 * 和具体对象没有任何关系的方法(没有用到类的成员变量)可以定义为静态方法--类的方法 
 * 静态方法直可以用类名来调用
 */
public class ListUtils {
  /**
   * 该方法是对传入的list排序
   */
    public static void sort(ArrayList<Integer> list){
      for(int i=0;i<list.size()-1;i++){
        for(int j=0;j<list.size()-1-i;j++){
          if(list.get(j)>list.get(j+1)){
            //先把list中第j和j+1位置的内容取出来
            int tmp=list.get(j);//把j的值赋给tmp
            //再利用set方法将调换过的值放到指定列表的位置
            list.set(j, list.get(j+1));//把j+1的值赋给j
            list.set(j+1, tmp);// 把tmp的值赋给j+1
          }
        }
      }
    }
  /**
   * 该方法是从传入的list中找最大值(找最大值需要一个临时变量)
   */
    public static int getMax(ArrayList<Integer> list){
      int tmp=list.get(0);
      for(int i=1;i<list.size();i++){
        if(list.get(i)>tmp){
          tmp=list.get(i);
        }
      }
      return tmp;
    }
  /**
   * 该方法是从传入的list中找最小值(改变判断语句中的符号)
   */
    public static int getMin(ArrayList<Integer> list){
      int tmp=list.get(0);
      for(int i=1;i<list.size();i++){
        if(list.get(i)<tmp){
          tmp=list.get(i);
        }
      }
      return tmp;
    }
  /**
   * 该方法是求传入的list的数据平均值
   */
    public static float getAvg(ArrayList<Integer> list){
      int sum=0;
      for(int i=0;i<list.size();i++){
        sum+=list.get(i);
      }
      return ((float)sum/list.size());
    }
}
package cn.tjipu.javase04.function;
import java.util.ArrayList;
/**
 * 测试list处理工具类 ,直接用类调用方法
 */
public class ListUtilsTest {
  public static void main(String[] args) {
    // 造一些ArrayList的数据
    ArrayList<Integer> list = new ArrayList<Integer>();
    list.add(3);
    list.add(4);
    list.add(1);
    list.add(9);
    list.add(5);
    // 测试list排序,方法无返回值,执行完方法list覆盖原有顺序,遍历打印即排好的顺序
    ListUtils.sort(list);
    for (int i = 0; i < list.size(); i++) {
      System.out.println(list.get(i));
    }
    System.out.println(list);
    // 测试最大值
    int max = ListUtils.getMax(list);
    System.out.println("max is:" + max);
    // 测试最小值
    int min = ListUtils.getMin(list);
    System.out.println("min is:" + min);
    // 测试平均值
    float avg = ListUtils.getAvg(list);
    System.out.println("avg is:" + avg);
  }
}

------------------------------------------------------订单管理------------------------------------------------  

package cn.tjipu.javase04.ProductOder;
/**
 * 用户类
 */
public class User {
  public String userId;
  public String userName;
  public String vipLeval;
  //空参构造方法
  public User() {
  }
  //带参构造方法
  public User(String userId, String userName, String vipLeval) {
    this.userId = userId;
    this.userName = userName;
    this.vipLeval = vipLeval;
  }
}
package cn.tjipu.javase04.ProductOder;
/**
 * 商品类
 */
public class Product {
  public String pId;
  public String pName;
  public float price;
  public int Number;
  public Product() {
  }
  public Product(String pId, String pName, float price, int Number) {
    this.pId = pId;
    this.pName = pName;
    this.price = price;
    this.Number = Number;
  }
  public String toString() {
    String tmp = this.pId + "," + this.pName + "," + this.price + ","
        + this.Number;
    return tmp;
  }
  public float GetAmount() {
    return this.price * this.Number;
  }
}
package cn.tjipu.javase04.ProductOder;
import java.util.ArrayList;
/**
 * 订单类
 */
public class Order {
  // 订单id
  public String oderId;
  // 订单所属用户(用户对象)
  public User user;
  // 订单所包含的商品(不定数量个商品对象)
  public ArrayList<Product> prods;
  // 订单总金额
  public float amountFee;
  // 订单应付金额
  public float topayFee;
  // 计算订单总金额的方法
  public void setamountFee() {
    float sum = 0;
    for (int i = 0; i < this.prods.size(); i++) {
      sum += this.prods.get(i).price * this.prods.get(i).Number;
    }
    this.amountFee = sum;
  }
  // 计算打折后实际应付的金额
  public void settopayFee() {
    float tmp = this.amountFee;// 已取得上一个方法的值,赋给一个临时变量方便后续计算
    // 根据总金额打折
    if (this.amountFee > 1000 && this.amountFee <= 2000) {
      tmp = this.amountFee * 0.98f;// 根据总金额打折后的实际金额
    }
    if (this.amountFee > 2000 && this.amountFee <= 3000) {
      tmp = this.amountFee * 0.95f;
    }
    if (this.amountFee >= 3000) {
      tmp = this.amountFee * 0.90f;
    }
    // 根据vip等级打折(在总金额折后的基础上)
    if (user.vipLeval.equals("黄金vip")) {
      tmp = this.amountFee * 0.98f;// 根据vip等级打折后的实际金额
    }
    if (user.vipLeval.equals("钻石vip")) {
      tmp = this.amountFee * 0.96f;
    }
    if (user.vipLeval.equals("至尊vip")) {
      tmp = this.amountFee * 0.92f;
    }
    // 把计算出来的结果赋值给toPayFee成员变量
    this.topayFee = tmp;
  }
}
package cn.tjipu.javase04.ProductOder;
/**
 * 订单管理测试
 */
import java.util.ArrayList;
public class OrderTest {
  public static void main(String[] args) {
    // 创建一个订单
    Order o1 = new Order();
    o1.oderId = "001";
    // 创建订单所属用户对象
    User zs = new User("111", "张三", "黄金vip");// 先创建一个用户对象
    o1.user = zs;
    // 创建商品列表
    ArrayList<Product> prod = new ArrayList<Product>();
    // 造一些商品数据
    // 1.使用无参构造方法
    Product pt1 = new Product();
    pt1.pId = "101";
    pt1.pName = "牛奶";
    pt1.price = 5.5f;
    pt1.Number = 2;
    // 2.使用有参构造方法(可以直接给对象初始化)
    Product pt2 = new Product("102", "面包", 3.5f, 3);
    Product pt3 = new Product("103", "火腿", 1.5f, 5);
    // 将商品数据加入到商品列表中
    prod.add(pt1);
    prod.add(pt2);
    prod.add(pt3);
    // 创建订单所包含商品
    o1.prods = prod;
    // 用实例化的order对象调用方法setAmountFee()来计算总金额并给对象上的属性amountFee赋值
    o1.setamountFee();
    // 用实例化的order对象调用方法setToPayFee()来应付金额并给对象上的属性toPayFee赋值
    o1.settopayFee();
    // 调用成员变量打印
    System.out.println("总金额:" + o1.amountFee);
    System.out.println("应付金额:" + o1.topayFee);
  }
}
相关文章
|
7天前
|
Java
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
|
21天前
|
XML 安全 Java
Java反射机制:解锁代码的无限可能
Java 反射(Reflection)是Java 的特征之一,它允许程序在运行时动态地访问和操作类的信息,包括类的属性、方法和构造函数。 反射机制能够使程序具备更大的灵活性和扩展性
34 5
Java反射机制:解锁代码的无限可能
|
17天前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
48 3
|
23天前
|
存储 安全 Java
系统安全架构的深度解析与实践:Java代码实现
【11月更文挑战第1天】系统安全架构是保护信息系统免受各种威胁和攻击的关键。作为系统架构师,设计一套完善的系统安全架构不仅需要对各种安全威胁有深入理解,还需要熟练掌握各种安全技术和工具。
64 10
|
17天前
|
Java 测试技术 Maven
Java一分钟之-PowerMock:静态方法与私有方法测试
通过本文的详细介绍,您可以使用PowerMock轻松地测试Java代码中的静态方法和私有方法。PowerMock通过扩展Mockito,提供了强大的功能,帮助开发者在复杂的测试场景中保持高效和准确的单元测试。希望本文对您的Java单元测试有所帮助。
32 2
|
16天前
|
Java 程序员 数据库连接
Java执行顺序大揭秘:静态块、非静态块和构造方法谁先谁后?
本文详细介绍了Java中的初始化块,包括静态初始化块和非静态初始化块的概念、执行顺序和实际应用场景。通过具体示例,帮助读者理解这两种初始化块的区别和使用场景,让面试官对你刮目相看。
26 0
Java执行顺序大揭秘:静态块、非静态块和构造方法谁先谁后?
|
18天前
|
分布式计算 Java MaxCompute
ODPS MR节点跑graph连通分量计算代码报错java heap space如何解决
任务启动命令:jar -resources odps-graph-connect-family-2.0-SNAPSHOT.jar -classpath ./odps-graph-connect-family-2.0-SNAPSHOT.jar ConnectFamily 若是设置参数该如何设置
|
17天前
|
Java
Java代码解释++i和i++的五个主要区别
本文介绍了前缀递增(++i)和后缀递增(i++)的区别。两者在独立语句中无差异,但在赋值表达式中,i++ 返回原值,++i 返回新值;在复杂表达式中计算顺序不同;在循环中虽结果相同但使用方式有别。最后通过 `Counter` 类模拟了两者的内部实现原理。
Java代码解释++i和i++的五个主要区别
|
6月前
|
Java
使用Java代码打印log日志
使用Java代码打印log日志
315 1
|
Java BI API
在Java代码中打日志需要注意什么?
日志是什么?日志是你在代码运行时打印出来的一些数据和记录,是快速排查问题的好帮手,是撕逼和甩锅的利器!
701 0