java入门基础教程:2023.3.5第七天,java的面向对象编程运用[java教程]

前言

记录时间:2023.3.5

已坚持的第七天

java从入门到精通

学习java时间历程记录打卡

早上6:00到 12:00

下午1:00到6:00

java面向对象编程总结

1678011697-画布 1

完成代码练习

定义类来创建对象使用

1.类

package cn.vqqc.createobject;

public class Car {
    /*
        成员变量
     */
    String name;
    double price;

    /*
        方法
     */
    public void start(){
        System.out.println(name + "启动了");
    }

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

2.定义类

package cn.vqqc.createobject;

public class Student {
    public String name;
    boolean flag;
}

class Animal{

}

class Dog{

}

3.运用定义类案例

package cn.vqqc.createobject;

public class Test1 {
    public static void main(String[] args) {
        //创建汽车对象
        Car c = new Car();
        c.name = "宝马";
        c.price = 38.9;
        System.out.println(c.name);
        System.out.println(c.price);
        c.start();
        c.run();

        System.out.println("-------------------");

        Car c2 = new Car();
        c2.name = "奔驰";
        c2.price = 39.9;
        System.out.println(c2.name);
        System.out.println(c2.price);

        //引用对象地址
        System.out.println(c);
        System.out.println(c2);
    }
}

4.运用定义类案例2

package cn.vqqc.createobject;

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

2.构造器

1.构造器的类

package cn.vqqc.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.构造器案例

package cn.vqqc.constructor;

public class Test {
    public static void main(String[] args) {
//        //通过构造器得到对象
        Car c = new Car();
        c.name = "宝马";
        c.price = 38.9;
        System.out.println(c.name);
        System.out.println(c.price);

        //调用有参数构造器
        Car c2 = new Car("奔驰", 39.8);
        System.out.println(c2.name);
        System.out.println(c2.price);

    }
}

3.this关键字

1.关键字的定义类

package cn.vqqc.thisdemo;

public class Car {
    String name;
    double price;
    /*
        无参数构造器
     */
    public Car(){
        System.out.println("无参数构造器中的this" + this);
    }

    public Car(String name, double price){
        this.name = name;
        this.price = price;
    }

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

    public void run(){
        System.out.println("这是方法中this" + this);
    }
}

2.this关键字案例

package cn.vqqc.thisdemo;

import cn.vqqc.thisdemo.Car;

public class Test {
    public static void main(String[] args) {
        //创建汽车对象
        Car c = new Car();
        c.run();

        System.out.println(c);

        System.out.println("----------------");
        Car c2 = new Car("奔驰", 39.9);
        System.out.println(c2.name);
        System.out.println(c2.price);

        c2.goWith("宝马");



    }
}

2.封装

1.定义类

package cn.vqqc.encapsulation;

public class Student {
    //1.成员变量 使用private
    private int age;

    /*
        2.提供成套的getter和setter方法暴露其取值和赋值
     */

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

    public int getAge(){
        return age;
    }
}

2.封装案例

package cn.vqqc.encapsulation;

public class Text1 {
    public static void main(String[] args) {
        Student s = new Student();
        s.setAge(23);
        System.out.println(s.getAge());
    }
}

3.javaBean

1.定义类

package cn.vqqc.javabean;

public class User {
    //1.成员变量建议使用private私有
    private String name;
    private double height;
    private double salary;

    public User() {
    }

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

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



        /*
        要求提供无参数构造器
     */

    /*
        2.必须为成员变量提供成套的setter和gettter方法
     */

    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;
    }
}

2.javabean的案例

package cn.vqqc.javabean;

public class Test {
    public static void main(String[] args) {
        //目标。记住javabean的书写要求
        //1.无参数构造器创建对象封装一个用户信息
        User u1 = new User();
        u1.setName("try栈");
        u1.setHeight(180.5);
        u1.setSalary(1000.0);
        System.out.println(u1.getName());
        System.out.println(u1.getHeight());
        System.out.println(u1.getSalary());

        //2.有参数构造器创建对象封装一个用户信息
        User u2 = new User("小明",3000,30000);
        System.out.println(u2.getName());
        System.out.println(u2.getHeight());
        System.out.println(u2.getSalary());

    }
}

4.内存机制

1.定义类

package cn.vqqc.memory;

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

    public void study(){
        System.out.println("名称:" + name + ",性别:" + sex + ",爱好:" + hobby + "开始学习了 ");
    }
}

2.内存机制案例

package cn.vqqc.memory;

import cn.vqqc.memory.Student;

public class Test {
    public static void main(String[] args) {
        //创建学生对象
        Student s1 = new Student();
        s1.name = "小明";
        s1.sex = '男';
        s1.hobby = "睡觉,游戏,学习";
        s1.study();

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

        s2.hobby  = "爱提问";
        System.out.println(s2.name);
        System.out.println(s2.sex);
        System.out.println(s2.hobby);
        s2.study();
    }
}

5.面向对象实战案例

1.购物车案例

1.定义类

package cn.vqqc.demo;

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

}

2.购物车案例

package cn.vqqc.demo;

import java.util.Scanner;

public class ShopCarTest {
    public static void main(String[] args) {
        //1.定义商品类,用于后期创建商品对象
        //2.定义购物车在对象,使用一个数组对象中表示
        Goods[] shopCar = new Goods[100]; // [null, null.....]
        //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);
            System.out.println("请您输入命令:");
            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) {
        //定义一个求和变量累加金额
        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 sc) {
        //让用户输入要修改的商品id ,根据id 查询出要修改的商品对象
        while (true) {
            System.out.println("请您输入你需要修改的商品id:");
            int id = sc.nextInt();
            Goods g = getGoodById(shopCar, id);
            if(g == null){
                //没有该商品
                System.out.println("对不起没有购买商品!");
            }else {
                //说明存在该商品对象,可以修改它了
                System.out.println("请您输入:" + g.name + "商品最新购买数量:");
                int buyNumber = sc.nextInt();
                g.buyNumber = buyNumber;
                System.out.println("修改完成!");
                queryGoods(shopCar);
                break;
            }
        }

    }

    public static Goods getGoodById(Goods[] shopCar ,int id){
        //shopCar = [g1, g2, null, null, ....]
        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, null, null, ....]
        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;
            }
        }
    }

    /*
        完成商品添加到购物车的功能
     */
    public static void addGoods(Goods[] shopCar , Scanner sc) {
        //1.录入用户输入的购买商品信息
        System.out.println("请您输入购买商品的编号(不重复):");
        int id = sc.nextInt();
        System.out.println("请您输入购买商品的名称:");
        String name = sc.next();
        System.out.println("请您输入购买商品的数量:");
        int buyNumer = sc.nextInt();
        System.out.println("请您输入购买商品的价格:");
        double price = sc.nextDouble();

        //2.把这个购买商品的信息封装开商品对象
        Goods g = new Goods();
        g.id = id;
        g.name = name;
        g.buyNumber = buyNumer;
        g.price = price;

        //3.把这个商品对象添加到购物车数组中去
        // shopCar = [ a, a2, null ....]
        for (int i = 0; i < shopCar.length; i++) {
            if(shopCar[i] == null){
                //说明此位置没有元素存入,把我们新买的商品添加到此处即可
                shopCar[i] = g ;
                break; // 结束,因为商品已经成功存入了,不需要继续找位置
            }
        }
        System.out.println("您的商品:" + g.name + "添加到购物车完成!");
    }
}

1.电影展示案例

1.定义类

package cn.vqqc.demo;

public class Movie {
    //1.成员变量
    private String name;
    private double score;
    private String actor;

    public Movie() {
    }

    //有参数的构造器
    public Movie(String name, double score, String actor) {
        this.name = name;
        this.score = score;
        this.actor = actor;
    }


    //2.getter + setter

    public String getName() {
        return name;
    }

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

    public double getScore() {
        return score;
    }

    public void setScore(double score) {
        this.score = score;
    }

    public String getActor() {
        return actor;
    }

    public void setActor(String actor) {
        this.actor = actor;
    }
}

2.电影展示案例

package cn.vqqc.demo;

public class Test {
    public static void main(String[] args) {
        //完成电影信息的展示
        //1.设计电影类
        //2.创建三个电影对象来封装电影的信息
        //3类型的数组,存储3部电影对象.定义一个电影
        Movie[]  movies = new Movie[3];
        movies[0] = new Movie("《长津湖》" , 9.7 , "吴京");
        movies[1] = new Movie("《我和我的父辈》" , 9.7 , "吴京");
        movies[2] = new Movie("《扑水少年》" , 9.7 , "王川");

        //4.遍历数组中的的每个电影对象,然后获取它的信息展示出来
        for (int i = 0; i < movies.length; i++) {
            Movie m = movies[i];
            System.out.println(m);
            System.out.println("电影名:" + m.getName());
            System.out.println("得分:" + m.getScore());
            System.out.println("主演:" + m.getActor());
        }
    }
}

视频总结

1.面向对象:概述

https://www.bilibili.com/video/BV1Cv411372m/?p=70

2.面向对象:设计对象、注意事项

https://www.bilibili.com/video/BV1Cv411372m/?p=71

3.面向对象:内存机制

https://www.bilibili.com/video/BV1Cv411372m/?p=72

4.面向对象实战:购物车案例[拓展]

https://www.bilibili.com/video/BV1Cv411372m/?p=73

5.面向对象:构造器、this

https://www.bilibili.com/video/BV1Cv411372m/?p=74

6.面向对象:封装

https://www.bilibili.com/video/BV1Cv411372m/?p=75

7.面向对象:Javabean、综合案例

https://www.bilibili.com/video/BV1Cv411372m/?p=76

8总结:面向对象基础部分

https://www.bilibili.com/video/BV1Cv411372m/?p=77

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容