zoukankan      html  css  js  c++  java
  • JAVA基础 面向对象编程

    一、什么是面向对象编程

    • 面向就是拿或找的意思
    • 对象就是东西的意思
    • 面向对象编程就是拿或找东西过来编程

    二、设计类和对象、定义类注意事项

    1、如何定义类

    public class 类名{

        1、成员变量(代表属性,一般是名词)

        2、成员方法(代表行为,一般是动词)

        3、构造器

        4、代码块

        5、内部类

    }

    2、如何得到类的对象

    类名 对象名 = new 类名();

    Car c = new Car();

    3、如何使用对象

    • 访问属性:对象名.成员变量
    • 访问行为:对象名.方法名()

    4、自己设计对象并使用

    1)Car.java

    public class Car {
    //属性(成员变量)
        String name;
        double price;
    
    //行为(方法)
        public void start(){
        System.out.println(name+",价格是:"+price+"启动了");
    }
    
     public void run(){
        System.out.println(name+",价格是:"+price+"启动了");
    }

    2)Test.java

    public class Test {
        public static void main(String[] args) {
    //类名 对象名 = new 类名();
              Car c = new Car();
              c.name = "奔驰";
              c.price = 39;        
              System.out.println(c.name);
              System.out.println(c.price);
    c.start();
    c.run(); }

    5、定义类的注意事项

    • 成员变量的完整定义格式是:修饰符 数据类型 变量名称 = 初始化值;  一般无需指定初始化值,存在默认值
    • 类名首字母建议大写,且有意义,满足“驼峰模式”
    • 一个java文件中可以定义多个class类,且只能一个类是public修饰,而且public修饰的类名必须成为代码文件名
    • 实际开发中建议还是一个文件定义一个class类

    三、购物车案例

    1、Goods.java

    package com.hello.object;
    
    public class Goods {
        int id; // 编号
        String name; // 名称
        Double price; // 价格
        int buyNumber; // 购买数量
    }

    2、ShopCarTest.java

    package com.hello.object;
    
    /*
    目标:面向编程训练,购物车模块模拟
     */
    
    import java.util.Scanner;
    
    public class ShopCarTest {
        public static void main(String[] args) {
            //1、定义商品类,用于后期创建商品对象
            //2、定义购物车对象,使用一个数组对象表示。(严格来说不应该使用数组的,因为不确定长度)
            //现在数组要装商品对象,类本身也是类型
            Goods[] shopCar = new Goods[100];
            //3、搭建操作架构
            while (true) {
                System.out.println("请您选择如下命令进行操作:");
                System.out.println("添加商品到购物车:add");
                System.out.println("查询商品到购物车:query");
                System.out.println("修改商品购买数量:update");
                System.out.println("结算购买商品的金额:pay");
                Scanner sc = new Scanner(System.in);
                String command = sc.next();
                switch (command){
                    case "add":
                        //添加商品到购物车
                        addGoods(shopCar,sc);
                        break;
                    case "query":
                        //查询商品到购物车
                        queryGoods(shopCar);
                        break;
                    case "update":
                        //修改商品购买数量
                        updateGoods(shopCar,sc);
                        break;
                    case "pay":
                        //结算购买商品的金额
                        pay(shopCar);
                        break;
                    default:
                        System.out.println("没有该功能!");
                }
            }
        }
    
        public static void pay(Goods[] shopCar) {
            queryGoods(shopCar);
            //1、定义一个求和变量累加金额
            double money = 0;
            //2、遍历购物车数组中的全部商品对象,累加单价*数量
            for (int i = 0; i < shopCar.length; i++) {
               Goods g =  shopCar[i];
               if(g != null){
                   money+=(g.price* g.buyNumber);
               }else {
                   break;
               }
            }
            System.out.println("订单总金额:"+money);
        }
    
        public static void updateGoods(Goods[] shopCar,Scanner scanner) {
            //让用户输入要修改商品的id,根据id要修改的商品对象
            while (true) {
                System.out.println("请您输入要修改的商品id:");
                int id = scanner.nextInt();
                Goods g = getGoodsById(shopCar,id);
                if(g == null){
                    //没有该商品
                    System.out.println("对不起,没有购买该商品");
                }else {
                    //说明存在该商品对象,可以修改它了
                    System.out.println("请您输入:"+g.name+"商品最新购买数量:");
                    int buyNumber = scanner.nextInt();
                    g.buyNumber = buyNumber;
                    System.out.println("修改完成 ");
                    queryGoods(shopCar);
                    break;
                }
            }
    
        }
    
        public static Goods getGoodsById(Goods[] shopCar, int id){
            for (int i = 0; i < shopCar.length; i++) {
                Goods g = shopCar[i];
                if(g != null){
                    //判断这个商品对象的id是否是我们要找的
                    if(g.id==id){
                        return g;
                    }
                }
                else {
                    return null;//找完了全面存在的商品,都没有找到
                }
    
            }
            return null;//代表找完了100个商品都没有找到id一样的商品
        }
    
        /**
        查询购物车中的商品对象信息,并展示出来
         */
        public static void queryGoods(Goods[] shopCar) {
            System.out.println("========查询购物车信息如下============");
            System.out.println("编号\t\t名称\t\t\t价格\t\t\t购买数量");
            //shopCar = [g1,g2,g3]
            for (int i = 0; i < shopCar.length; i++) {
                Goods g = shopCar[i];
                if(g != null){
                    //展示这个商品对象
                    System.out.println(g.id+"\t\t"+g.name+"\t\t\t"+g.price+"\t\t\t"+g.buyNumber);
                }else {
                    //遍历结束
                    break;
                }
            }
        }
    
        /**
         完成商品添加到购物车的功能
         */
        //main方法已经new了一个扫描器对象了,在它调用addGoods方法时可以把对象当作参数传进入,此时addGoods方法需要用一个形参scanner接收
        public static void addGoods(Goods[] shopCar,Scanner scanner) {
            //1、录入用户输入的购买商品的信息
            System.out.println("请您输入购买商品的编号(不重复)");
            int id = scanner.nextInt();
            System.out.println("请您输入购买商品的名称:");
            String name = scanner.next();
            System.out.println("请您输入购买商品的数量:");
            int buyNumber = scanner.nextInt();
            System.out.println("请您输入购买商品的价格:");
            double price = scanner.nextDouble();
    
            //2、把这个购买商品的信息封装成一个商品对象
            Goods g = new Goods();
            g.id = id;
            g.name = name;
            g.buyNumber = buyNumber;
            g.price = price;
    
            //3、把这个商品对象添加到购物车数组中去
            //shopCar = [null,null,null]
            for (int i = 0; i < shopCar.length; i++) {
                if(shopCar[i]==null){
                    //说明此位置没有元素存入,把我们新买的商品添加到此处即可
                    shopCar[i] = g;
                    break;//结束,因为商品已经成功存入了,不需要继续找位置了
                }
            }
            System.out.println("您的商品:"+ g + "已经添加到购物车");
    
        }
    }

    四、面向对象语法:构造器、this

    1、构造器

    1)Car.java

    package com.hello.constructor;
    
    public class Car {
        String name;
        double price;
        //无参数构造器
        public Car(){
            System.out.println("无参数构造器被触发执行");
        }
        //有参数构造器
        public Car(String n,double p){
            System.out.println("有参数构造器被触发执行");
            name = n;
            price = p;
        }
    }

    2)Test.java

    package com.hello.constructor;
    
    /**
     * 目标:说出对象是通过构造器初始化出来的,并理解构造器的分类和区别
     * 一、构造器的作用:用于初始化一个类的对象,并返回对象的地址 Car c = new Car();
     * 二、构造器的定义格式   修饰符 类名(形参列表){}
     * 三、构造器的分类:
     * 1、无参数构造器(默认存在的):初始化的对象时,成员变量的数据均采用默认值
     * 2、有参数构造器:在初始化对象的时候,同时可以为对象进行赋值
     * 四、注意事项:
     * 1、任何类定义出来,默认就自带了无参数构造器,写不写都有
     * 2、一旦定义了有参数构造器,无参数构造器就没有了,此时就需要自己写一个无参数构造器了
     */
    
    public class Test {
        public static void main(String[] args) {
            Car c = new Car();//调用无参数构造器
            Car c2 = new Car("宝马",80);//调用有参数构造器
    
        }
    }

    2、this关键字

    1)Car.java

    package com.hello.constructor;
    
    public class Car {
        String name;
        double price;
    
        //this出现在有参数构造器中的用法
        public Car(String name,double price){
            System.out.println("有参数构造器被触发执行");
            /**当局部变量跟成员变量的名称一样时,以下赋值是赋给局部变量
            name = name;
            price = price;
    
             比如调用 Car c = new Car("奔驰",45)
                     c.name; //该值为空,因为调的是成员变量的名称,而上面的赋值是赋给了局部变量
             */
            
            this.name = name;
            this.price = price;
             
        }
        
        //this出现在成员方法中的用法
        public void goWith(String name){
            //this.name取的是成员变量的值,name取的是局部变量的值
            System.out.println(this.name + "正在和" + name + "一起比赛");
        }
    }

    2)Test.java

    package com.hello.constructor;
    
    /**
     * 目标:this关键字
     * 一、作用:出现在成员方法、构造器中代表当前对象的地址,用于访问当前对象的成员变量、成员方法
     * 二、掌握this出现在有参数构造器中的用法 和 this出现在成员方法中的用法
     */
    
    public class Test {
        public static void main(String[] args) {
            //调用有参数构造器,给成员变量赋值
            Car c = new Car("宝马",80);
    
            //调用成员方法,给成员方法的局部变量赋值
            //最终的输出结果是:宝马和奔驰一起比赛
            c.goWith("奔驰");
        }
    }

    五、三大特征之一:封装、Javabean

    package com.hello.javabean;
    
    public class Student {
         /*
        面向对象的三大特征:封装、继承、多态
        一、封装:隐藏实现细节,暴露出合适的访问方式(合理隐藏、合理暴露)
        二、封装的实现步骤
        1、一般对成员变量使用private(私有)关键字修饰进行隐藏,private修饰后该成员变量就只能在当前类中访问
        2、提供public修饰的公开的getter、setter方法暴露其取值和赋值
        三、封装的好处
        1、加强了程序代码的安全性
        2、适当的封装可以提升开发效率,同时可以让程序更容易理解与维护
         */
        /*
        以下是把age做了封装
         */
    /*
        private int age;
    
        //取值的方法:getAge
        public int getAge(){
            return age;
        }
    
        //赋值的方法:setAge
        public void setAge(int age){
            if(age>=0&&age<=200){
                this.age = age;
            }else {
                System.out.println("年龄非法");
            }
        }
     */
    
    
        /*目标:理解JavaBean,并学习其定义规范
        一、JavaBean:可以理解成实体类,其对象可以用于在程序中封装数据
        实体类:在现实世界中能够找到实际的个体,比如老师、学生(创建学生对象可以封装学生数据,创建汽车对象可以封装汽车数据)
        二、标准JavaBean须满足以下要求:
        1、成员变量使用private修饰
        2、提供每一个成员变量对应的setXxx() / getXxx()
        3、必须提供一个无参构造器
         */
    
        //1、成员变量私有
        private String name;
        private double height;
        private double salary;
    
        //3、必须有无参数构造器(默认的)
    
        public Student() {
        }
    
        //4、有参数构造器(不是必须的,可以选择)
    
    
        public Student(String name, double height, double salary) {
            this.name = name;
            this.height = height;
            this.salary = salary;
        }
    
        //2、必须提供成套的getter  和 setter方法暴露成员变量的取值和赋值
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public double getHeight() {
            return height;
        }
    
        public void setHeight(double height) {
            this.height = height;
        }
    
        public double getSalary() {
            return salary;
        }
    
        public void setSalary(double salary) {
            this.salary = salary;
        }
    }

    六、JavaBean改造购物车

    1、Goods.java

    package com.tech.testcase;
    
    public class Goods {
        private int id;//编号
        private String name;//名称
        private double price;//价格
        private int buyNumber;//购买数量
    
        public Goods() {
        }
    
        public Goods(int id, String name, double price, int buyNumber) {
            this.id = id;
            this.name = name;
            this.price = price;
            this.buyNumber = buyNumber;
        }
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public double getPrice() {
            return price;
        }
    
        public void setPrice(double price) {
            this.price = price;
        }
    
        public int getBuyNumber() {
            return buyNumber;
        }
    
        public void setBuyNumber(int buyNumber) {
            this.buyNumber = buyNumber;
        }
    }

    2、ShopCarTest.java

    package com.tech.testcase;
    
    import java.util.Scanner;
    
    /*
    目标:面向编程训练,购物车模块模拟——javabean改造购物车案例
     */
    
    public class ShopCarTest {
        public static void main(String[] args) {
            //1、定义商品类,用于后期创建商品对象
            //2、定义购物车对象,使用一个数组对象表示。(严格来说不应该使用数组的,因为不确定长度)
            //现在数组要装商品对象,类本身也是类型
            Goods[] shopCar = new Goods[100];
            //3、搭建操作架构
            while (true) {
                System.out.println("请您选择如下命令进行操作:");
                System.out.println("添加商品到购物车:add");
                System.out.println("查询商品到购物车:query");
                System.out.println("修改商品购买数量:update");
                System.out.println("结算购买商品的金额:pay");
                Scanner sc = new Scanner(System.in);
                String command = sc.next();
                switch (command){
                    case "add":
                        //添加商品到购物车
                        addGoods(shopCar,sc);
                        break;
                    case "query":
                        //查询商品到购物车
                        queryGoods(shopCar);
                        break;
                    case "update":
                        //修改商品购买数量
                        updateGoods(shopCar,sc);
                        break;
                    case "pay":
                        //结算购买商品的金额
                        pay(shopCar);
                        break;
                    default:
                        System.out.println("没有该功能!");
                }
            }
        }
    
        public static void pay(Goods[] shopCar) {
            queryGoods(shopCar);
            //1、定义一个求和变量累加金额
            double money = 0;
            //2、遍历购物车数组中的全部商品对象,累加单价*数量
            for (int i = 0; i < shopCar.length; i++) {
                Goods g =  shopCar[i];
                if(g != null){
                    money+=(g.getPrice()* g.getBuyNumber());
                }else {
                    break;
                }
            }
            System.out.println("订单总金额:"+money);
        }
    
        public static void updateGoods(Goods[] shopCar,Scanner scanner) {
            //让用户输入要修改商品的id,根据id要修改的商品对象
            while (true) {
                System.out.println("请您输入要修改的商品id:");
                int id = scanner.nextInt();
                Goods g = getGoodsById(shopCar,id);
                if(g == null){
                    //没有该商品
                    System.out.println("对不起,没有购买该商品");
                }else {
                    //说明存在该商品对象,可以修改它了
                    System.out.println("请您输入:"+g.getName()+"商品最新购买数量:");
                    int buyNumber = scanner.nextInt();
                    g.setBuyNumber(buyNumber);
                    System.out.println("修改完成 ");
                    queryGoods(shopCar);
                    break;
                }
            }
    
        }
    
        public static Goods getGoodsById(Goods[] shopCar, int id){
            for (int i = 0; i < shopCar.length; i++) {
                Goods g = shopCar[i];
                if(g != null){
                    //判断这个商品对象的id是否是我们要找的
                    if(g.getId()==id){
                        return g;
                    }
                }
                else {
                    return null;//找完了全面存在的商品,都没有找到
                }
    
            }
            return null;//代表找完了100个商品都没有找到id一样的商品
        }
    
        /**
         查询购物车中的商品对象信息,并展示出来
         */
        public static void queryGoods(Goods[] shopCar) {
            System.out.println("========查询购物车信息如下============");
            System.out.println("编号\t\t名称\t\t\t价格\t\t\t购买数量");
            //shopCar = [g1,g2,g3]
            for (int i = 0; i < shopCar.length; i++) {
                Goods g = shopCar[i];
                if(g != null){
                    //展示这个商品对象
                    System.out.println(g.getId()+"\t\t"+g.getName()+"\t\t\t"+g.getPrice()+"\t\t\t"+g.getBuyNumber());
                }else {
                    //遍历结束
                    break;
                }
            }
        }
    
        /**
         完成商品添加到购物车的功能
         */
        //main方法已经new了一个扫描器对象了,在它调用addGoods方法时可以把对象当作参数传进入,此时addGoods方法需要用一个形参scanner接收
        public static void addGoods(Goods[] shopCar,Scanner scanner) {
            //1、录入用户输入的购买商品的信息
            System.out.println("请您输入购买商品的编号(不重复)");
            int id = scanner.nextInt();
            System.out.println("请您输入购买商品的名称:");
            String name = scanner.next();
            System.out.println("请您输入购买商品的数量:");
            int buyNumber = scanner.nextInt();
            System.out.println("请您输入购买商品的价格:");
            double price = scanner.nextDouble();
    
            //2、把这个购买商品的信息封装成一个商品对象
            Goods g = new Goods();
            g.setId(id);
            g.setName(name);
            g.setBuyNumber(buyNumber);
            g.setPrice(price);
    
            //3、把这个商品对象添加到购物车数组中去
            //shopCar = [null,null,null]
            for (int i = 0; i < shopCar.length; i++) {
                if(shopCar[i]==null){
                    //说明此位置没有元素存入,把我们新买的商品添加到此处即可
                    shopCar[i] = g;
                    break;//结束,因为商品已经成功存入了,不需要继续找位置了
                }
            }
            System.out.println("您的商品:"+ g.getName() + "已经添加到购物车");
    
        }
    }
  • 相关阅读:
    为什么和什么是 DevOps?
    使用jmeter 上传文件
    jmeter 获取执行脚本的路径
    随笔(九)
    随笔(八)
    随笔(七)
    随笔(六)
    随笔(五)
    随笔(四)
    随笔(三)
  • 原文地址:https://www.cnblogs.com/Chilam007/p/15616919.html
Copyright © 2011-2022 走看看