day07-面向对象基础

面向对象编程(基础)

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

1.类、对象

1.1类的概念、设计类获得对象

请添加图片描述
请添加图片描述
请添加图片描述
请添加图片描述

package com.itheima.createobject;

public class Car {
    // 属性(成员变量)
    String name; // 名称
    double price; // 价格

    // 行为(方法)
    public void start(){
        System.out.println(name + " 价格是:" + price +", 启动成功!");
    }

    public void run(){
        System.out.println(name + " 价格是:" + price +", 跑的很快!");
    }
}
package com.itheima.createobject;

/**
   目标:掌握自己设计类,并获得对象。
 */
public class Test {
    public static void main(String[] args) {
        // 如何去获取汽车的对象。
        Car c1 = new Car();
        System.out.println(c1);
        c1.name = "宝马X3";
        c1.price = 37.89;
        System.out.println(c1.name);
        System.out.println(c1.price);
        c1.start();
        c1.run();

        System.out.println("-------------------");
        Car c2 = new Car();
        c2.name = "奔驰GLC";
        c2.price = 39.89;
        System.out.println(c2.name);
        System.out.println(c2.price);
        c2.start();
        c2.run();

    }
}

请添加图片描述

1.2定义类的补充注意事项

请添加图片描述
请添加图片描述

package com.itheima.createobject;

/**
    目标:学习定义类的一些注意事项。
 */
public class Student {
    // 修饰符 数据类型 变量名称 = 初始化值;
    String name;
    double height;
}

//class Animal{
//
//}
//
//class Cat{
//
//}
package com.itheima.createobject;

public class Test2 {
    public static void main(String[] args) {
        Student s1 = new Student();
        System.out.println(s1.name);
        System.out.println(s1.height);

        Student s2 = new Student();
        System.out.println(s2.name);
        System.out.println(s2.height);
    }
}

请添加图片描述

2.Java对象内存图

2.1多个对象的内存图

请添加图片描述

请添加图片描述

2.2两个变量指向同一个对象内存图

请添加图片描述

package com.itheima.memory;

public class Student {
    String name;
    char sex;
    String hobby;

    public void study(){
        System.out.println("姓名:" + name +",性别是:" + sex
                + ",爱好是:" + hobby + "的学生在好好学习,天天向上!");
    }
}
package com.itheima.memory;

public class Test {
    public static void main(String[] args) {
        // 目标:掌握2个变量指向同一个对象的形式
        Student s1 = new Student();
        s1.name = "小明";
        s1.sex = '男';
        s1.hobby = "睡觉、游戏、听课";
        s1.study();

        // 关键:把s1赋值给学生类型的变量s2
        Student s2 =  s1;
        System.out.println(s1);
        System.out.println(s2);

        s2.hobby = "爱提问";

        System.out.println(s2.name);
        System.out.println(s2.sex);
        System.out.println(s1.hobby);
        s2.study();

        s1 = null;
        s2 = null;
        System.out.println(s1.name);
    }
}

请添加图片描述

3.面向对象编程案例

3.1考试系统模拟-设计对象

请添加图片描述

3.2考试系统模拟-功能实现

请添加图片描述

3.3购车系统模拟-设计对象

请添加图片描述

3.4购车系统模拟-功能实现

请添加图片描述

package com.itheima.demo;

public class Article {
    String name;
    double price;
    int buyNumber; // 购买数量
}
package com.itheima.demo;

import java.util.Scanner;

/**
    需求:模拟购物车的功能。
    1、定义一个商品类:Article(属性:名称、价格)
    2、定义一个数组容器存储商品对象的,代表购物车对象。
 */
public class Test {
    public static void main(String[] args) {
        // a、定义一个数组存储商品对象的,代表购物车对象。
        Article[] shopCar = new Article[10];


        // b、让用户选择功能
        while (true) {
            Scanner sc = new Scanner(System.in);
            System.out.println("添加商品:add");
            System.out.println("查看商品:query");
            System.out.println("修改数量:update");
            System.out.println("结算价格:pay");
            System.out.println("请您选择要操作的功能:");
            String command = sc.next();
            switch (command) {
                case "add":
                    // 把商品加入到购物车中去。
                    addArticle(shopCar);
                    break;
                case "query":
                    // 查看购物车中的商品信息
                    queryArticle(shopCar);
                    break;
                case "update":
                    updateArticle(shopCar);
                    break;
                case "pay":
                    calcPayMoney(shopCar);
                    break;
                default:
                    System.out.println("当前命令输入有误!");
            }
        }
    }

    private static void calcPayMoney(Article[] shopCar) {
        queryArticle(shopCar);
        // 准备一个double类型的变量统计总金额
        double money = 0;
        for (int i = 0; i < shopCar.length; i++) {
            Article a = shopCar[i];
            if(a != null){
                money += (a.price * a.buyNumber);
            }else {
                break;
            }
        }
        System.out.println("本次商品购买的总价为:" + money);
    }

    public static void updateArticle(Article[] shopCar) {
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请您输入要修改数量的商品名称:");
            String name = sc.next();
            Article a = getArticleByName(name , shopCar );
            if(a != null){
                System.out.println("请您输入修改后购买的数量:");
                int buyNumber = sc.nextInt();
                a.buyNumber = buyNumber;
                System.out.println("该商品的购买数量修改了!");
                break;
            }else {
                System.out.println("购物车中没有该商品信息");
            }
        }
    }

    public static Article getArticleByName(String name , Article[] shopCar){
        for (int i = 0; i < shopCar.length; i++) {
            Article a = shopCar[i];
            if(a != null && a.name.equals(name) ){
                return a;
            }
        }
        return null;
    }

    public static void queryArticle(Article[] shopCar) {
        System.out.println("商品名称\t商品价格\t商品的购买数量");
        // 展示购物车的商品信息
        for (int i = 0; i < shopCar.length; i++) {
            Article a = shopCar[i];
            if(a != null){
                System.out.println(a.name +"\t" + a.price + "\t" + a.buyNumber);
            }else {
                return;
            }
        }
    }

    public static void addArticle(Article[] shopCar) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请您输入商品的名称:");
        String name = sc.next();
        System.out.println("请您输入商品的价格:");
        double price = sc.nextDouble();
        System.out.println("请您输入购买商品的数量:");
        int buyNumber = sc.nextInt();

        // 创建一个商品对象,封装这些数据
        Article a = new Article();
        a.name = name;
        a.price = price;
        a.buyNumber = buyNumber;

        // 遍历这个购物车数组对象,看哪个位置是null,如果是null ,把商品对象添加进去
        for (int i = 0; i < shopCar.length; i++) {
            if(shopCar[i] == null){
                shopCar[i] = a; // 把商品对象添加到这个位置了
                break;
            }
        }
        System.out.println("添加成功!");
    }
}

4.构造器

请添加图片描述
请添加图片描述

package com.itheima.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;
    }
}
package com.itheima.constructor;

/**
    目标:明白构造器的作用和分类。(开发的人,理解能力好)
 */
public class ConstructorDemo {
    public static void main(String[] args) {
        Car c = new Car();
//        c.name = "";
//        c.price
        System.out.println(c.name);
        System.out.println(c.price);

        Car c2 = new Car("奔驰GLC", 39.78);
        System.out.println(c2.name);
        System.out.println(c2.price);
    }
}

请添加图片描述
请添加图片描述

5.this关键字

请添加图片描述

package com.itheima.thisdemo;

/**
    目标:说出this关键字的作用,并学会其使用。
 */
public class ThisDemo {
    public static void main(String[] args) {
        Car c = new Car("宝马X3", 37.89);
        System.out.println(c);
        System.out.println(c.name);
        System.out.println(c.price);

        c.goWith("奔驰GLC");
    }
}
package com.itheima.thisdemo;

public class Car {
    String name;
    double price;

    public void goWith(String name){
        System.out.println(this.name +"正在和:" + name +"比赛!");
    }

    /**
      无参数构造器(默认存在的)
     */
    public Car(){
        System.out.println("无参数构造器被触发执行~~~");
    }

    /**
       有参数构造器
     */
    public Car(String name, double price){
        System.out.println("有参数构造器被触发执行~~~");
        System.out.println(this);
        this.name = name;
        this.price = price;
    }
}

请添加图片描述

6.封装

请添加图片描述

请添加图片描述

package com.itheima.encapsulation;

/**
    目标:学会面向对象的三大特征:封装的形式、作用。
 */
public class Test {
    public static void main(String[] args) {
        Student s = new Student();
        // s.age = -23;
        s.setAge(-23);
        System.out.println(s.getAge());
    }
}
package com.itheima.encapsulation;

public class Student {
    // private私有的成员变量,只能在本类访问。
   private int age;

   public int getAge(){
       return age;
   }

   public void setAge(int age){
        if(age >= 0 && age <= 200){
            this.age = age;
        }else {
            System.out.println("年龄数据有问题,应该不是人的年龄!");
        }
   }
}

请添加图片描述

7.标准 JavaBean 开始

请添加图片描述

package com.itheima.javabean;

public class Test {
    public static void main(String[] args) {
        User user = new User();
        user.setName("二狗");
        user.setHeight(163);
        user.setSalary(50000);
        user.setAddress("中国");
        user.setPhone("13141314520");
//        String name = user.getName();
//        System.out.println(name);
        System.out.println(user.getName());
        System.out.println(user.getHeight());
        System.out.println(user.getSalary());
        System.out.println(user.getAddress());
        System.out.println(user.getPhone());

        System.out.println("--------------------");
        User user1 = new User(176, "黑马吴彦祖", 30000, "黑马", "110");
        System.out.println(user1.getName());
        System.out.println(user1.getHeight());
        System.out.println(user1.getSalary());
        System.out.println(user1.getAddress());
        System.out.println(user1.getPhone());
    }
}
package com.itheima.javabean;

public class User {
    private double height;
    private String name;
    private double salary;
    private String address;
    private String phone;

    public User() {
    }

    public User(double height, String name, double salary, String address, String phone) {
        this.height = height;
        this.name = name;
        this.salary = salary;
        this.address = address;
        this.phone = phone;
    }

    public double getHeight() {
        return height;
    }

    public void setHeight(double height) {
        this.height = height;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }
}

8.使用标准JavaBean改造面向对象案例

请添加图片描述

package com.itheima.demo;

public class Article {
    private int id; //编号
    private String name;//名称
    private double price;//价格
    private int buyNumber; // 购买数量

    public Article(){

    }


    public Article(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;
    }
}
package com.itheima.demo;

import java.util.Scanner;

/**
    需求:模拟购物车的功能。
    1、定义一个商品类:Article(属性:名称、价格)
    2、定义一个数组容器存储商品对象的,代表购物车对象。
 */
public class Test {
    public static void main(String[] args) {
        // a、定义一个数组存储商品对象的,代表购物车对象。
        Article[] shopCar = new Article[10];


        // b、让用户选择功能
        while (true) {
            System.out.println("请算账如下命令进行操作:");
            Scanner sc = new Scanner(System.in);
            System.out.println("添加商品:add");
            System.out.println("查看商品:query");
            System.out.println("修改数量:update");
            System.out.println("结算价格:pay");
            System.out.println("请您选择要操作的功能:");
            String command = sc.next();
            switch (command) {
                case "add":
                    // 把商品加入到购物车中去。
                    addArticle(shopCar ,sc);
                    break;
                case "query":
                    // 查看购物车中的商品信息
                    queryArticle(shopCar);
                    break;
                case "update":
                    //修改商品的购买数量
                    updateArticle(shopCar ,sc) ;
                    break;
                case "pay":
                    //结算金额
                    calcPayMoney(shopCar);
                    break;
                default:
                    System.out.println("当前命令输入有误!");
            }
        }
    }

    private static void calcPayMoney(Article[] shopCar) {
        queryArticle(shopCar);
        // 准备一个double类型的变量统计总金额
        double money = 0;
        //2.遍历购物车数组中的全部商品对象, 累加单价* 数量
        for (int i = 0; i < shopCar.length; i++) {
            Article a = shopCar[i];
            if(a != null){
                money += (a.getPrice() * a.getBuyNumber());
            }else {
                break;
            }
        }
        System.out.println("本次商品购买的总价为:" + money);
    }

    public static void updateArticle(Article[] shopCar , Scanner sc) {

        // 让用户输入要修改商品的id 根据id查询出要修改的商品对象

        while (true) {
            System.out.println("请您输入要修改数量的商品id:");
            int id = sc.nextInt();
            Article a =  getArticleById(shopCar , id);
            if(a == null){
                //没有该商品
                System.out.println("对不起,购物车中没有该商品");
            }else {
                // 说明存在该商品对象,可以修改它了
                System.out.println("请输入:" + a.getName() + "商品最新购买数量:");
                int buyNumber = sc.nextInt();
                a.setBuyNumber( buyNumber);
                System.out.println("修改完成!");
                queryArticle(shopCar);
                break;
            }
        }
    }
    public  static  Article getArticleById(Article[] shopCar , int id){
        for (int i = 0; i <shopCar.length ; i++) {
            Article a = shopCar[i];
            if (a != null) {
                if(a.getId() == id){
                    return a;
                }

            }else {
                return null;//找完了全面的商品,都没有找到
            }

        }
        //代表找完100个商品都没找到id一样的商品
        return  null;

    }

    /**
     查询购物车从商品对象信息,并展示出来
     */
    public static void queryArticle(Article[] shopCar) {
        System.out.println("================查询购物车信息如下=============");
        System.out.println("编号\t\t名称\t\t\t价格\t\t\t购买数量");
        // 展示购物车的商品信息
        for (int i = 0; i < shopCar.length; i++) {
            Article a = shopCar[i];
            if(a != null){
                System.out.println(a.getId() +"\t\t"+a.getName() +"\t\t\t" + a.getPrice() + "\t\t\t" + a.getBuyNumber());
            }else {
                break;//遍历结束
            }
        }
    }
    /**
     完成商品添加到购物车的功能
     */

    public static void addArticle(Article[] shopCar , Scanner sc) {
        //1.录入用户输入的购买商品的信息
        //Scanner sc = new Scanner(System.in);
        System.out.println("请您输入商品的编号(不重复):");
        int id =sc.nextInt();
        System.out.println("请您输入购买商品的名称:");
        String name = sc.next();
        System.out.println("请您输入购买商品的数量:");
        int buyNumber = sc.nextInt();
        System.out.println("请您输入商品的价格:");
        double price = sc.nextDouble();


        // 创建一个商品对象,封装这些数据
        Article a = new Article();
        a.setId(id);
        a.setName(name);
        a.setBuyNumber(buyNumber);
        a.setPrice(price);


        // 遍历这个购物车数组对象,看哪个位置是null,如果是null ,把商品对象添加进去
        for (int i = 0; i < shopCar.length; i++) {
            if(shopCar[i] == null){
                shopCar[i] = a; // 把商品对象添加到这个位置了
                break;
            }
        }
        System.out.println("你的商品:" + a.getName()+"添加到购物车完成!");
    }
}

9.补充知识:成员变量、局部变量区别

请添加图片描述

package com.itheima.javabean;

public class User {
    //1.成员变量需要私有化  private 修饰
    private double height;
    private String name;
    private double salary;
    private String address;
    private String phone;
    // 3.无参数构造器是默认的
    public User() {
    }

    public User(double height, String name, double salary, String address, String phone) {
        this.height = height;
        this.name = name;
        this.salary = salary;
        this.address = address;
        this.phone = phone;
    }
    // 2.需要提供setter getter 方法
    public double getHeight() {
        return height;
    }

    public void setHeight(double height) {
        this.height = height;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getSalary() {
        return salary;
    }

    public void setSalary(double salary) {
        this.salary = salary;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }
}
package com.itheima.javabean;

public class Test {
    public static void main(String[] args) {
        //1.创建对象封装数据:无参数构造器
        User user = new User();
        user.setName("二狗");
        user.setHeight(163);
        user.setSalary(50000);
        user.setAddress("中国");
        user.setPhone("13141314520");
//        String name = user.getName();
//        System.out.println(name);
        System.out.println(user.getName());
        System.out.println(user.getHeight());
        System.out.println(user.getSalary());
        System.out.println(user.getAddress());
        System.out.println(user.getPhone());
        // 2.创建对象封装数据:有参构造器
        System.out.println("--------------------");
        User user1 = new User(176, "黑马吴彦祖", 30000, "黑马", "110");
        System.out.println(user1.getName());
        System.out.println(user1.getHeight());
        System.out.println(user1.getSalary());
        System.out.println(user1.getAddress());
        System.out.println(user1.getPhone());
    }
}

请添加图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值