JAVA 面向对象编程与封装 day04

面对对象编程

类和对象

  • 类:共同特征的描述

  • 对象:真实存在的具体实例

类的设计

public class 类名(){
    成员变量
    成员方法
}

对象的创建

类名 对象名 = new 类名()

拿到对象后怎么访问对象的信息

  • 对象.成员变量

  • 对象。成员方法()

注意事项

  • 类名建议首字母大写满足驼峰命名法

  • 一个文件中可以有很多个class类,但只能有一个public类,且publi class的类名必须是文件名。

  • 成员变量存在初始值即默认值。

对象在内存中的运行机制

  • 对象放在那里:堆内存中

  • Car c= new Car();变量c中存储的是地址。

  • 成员变量存放在那里:堆内存中

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

类似于数组

垃圾回收机制

  • 注意: 当堆内存中的对象,没有被任何变量引用时,就会被判定为内存中的垃圾。

购物车模块模拟

package oOP;
import java.util.Scanner;
public class shopCarTest {
    public static void main(String[] args) {
        //1.定义商品类Goods
        //2.定义购物车对象,使用一个数组表示
        Goods[] shopCar = new Goods[100];//表示购物车中能存放一个商品
        Scanner sc = new Scanner(System.in);
        //3.搭建操作框架
        while (true) {
            System.out.println("请输入以下操作:");
            System.out.println("add:添加商品到购物车。");
            System.out.println("query:查询购物车商品");
            System.out.println("update:修改购物车商品");
            System.out.println("pay:结算购买商品");
            String comment = sc.next();
            switch(comment){
                case "add":
                    GoodsAdd(shopCar,sc);
                    break;
                case "query":
                    GoodsQuery(shopCar,sc);
                    break;
                case "update":
                    GoodsUpdate(shopCar,sc);
                    break;
                case  "pay":
                    GoodsPay(shopCar,sc);
                    break;
            }
        }
    }
    public static Goods getGoodsId(Goods[] shopCar,int id){
        for (int i = 0; i < shopCar.length; i++) {
            if (shopCar[i]!=null){
                Goods g = shopCar[i];
                if (g.id == id){
                    return g;
                }
            }else {
                System.out.println("没有此商品");
                return null;
            }
        }
        System.out.println("没有此商品");
        return null;
    }
    public static void GoodsPay(Goods[] shopCar, Scanner sc) {
        double sum = 0;
        for (int i = 0; i < shopCar.length; i++) {
            Goods g = shopCar[i];
            if (g!=null){
                sum+=(g.buyNumber*g.price);
            }else {
                System.out.println("订单总金额为"+sum);
                break;
            }
        }
    }
​
    public static void GoodsUpdate(Goods[] shopCar, Scanner sc) {
        System.out.println("请输入要查寻的id");
        int id = sc.nextInt();
        Goods g = getGoodsId(shopCar,id);
        if (g != null) {
            System.out.print("将商品名称修改为:");
            g.name = sc.next();
            System.out.print("将价格修改为:");
            g.price = sc.nextDouble();
            System.out.print("将数量修改为:");
            g.id = sc.nextInt();
            System.out.println("商品信息修改结果");
            System.out.println("编号\t名称\t\t单价\t数量");
            System.out.println(g.id+"\t"+g.name+"\t"+g.price+"\t"+g.buyNumber);
        }
    }
    public static void GoodsQuery(Goods[] shopCar, Scanner sc) {
        System.out.println("==========商品明细===========");
        System.out.println("编号\t名称\t\t单价\t数量");
        for (int i = 0; i < shopCar.length; i++) {
            if (shopCar[i]==null){
                break;
            }else {
                Goods g = shopCar[i];
                System.out.println(g.id+"\t"+g.name+"\t"+g.price+"\t"+g.buyNumber);
            }
            System.out.println("====================");
        }
    }
​
    public static void GoodsAdd(Goods[] shopCar, Scanner sc) {
        System.out.println("请输入商品编号");
        int id= sc.nextInt();
        System.out.println("请输入商品名称");
        String name= sc.next();
        System.out.println("请输入商品购买价格");
        double price= sc.nextDouble();
        System.out.println("请输入商品购买数量");
        int number= sc.nextInt();
        for (int i = 0; i < shopCar.length; i++) {
            if (shopCar[i]==null){
                Goods g =new Goods();
                g.id = id;
                g.name = name;
                g.price = price;
                g.buyNumber = number;
                shopCar[i]=g;
                break;
            }
        }
        
    }
}

构造器

  • 构造器的作用:定义在类中,可以初始化一个类对象,并返回对象地址。

  • 构造器的格式

    • 修饰符 类名(形参列表){}

  • 无参数构造器(默认存在的):初始化对象时,成员变量均采用默认值

  • 有参数的构造器:在初始化对象时,同时可以接收参数对象进行赋值。

注意事项

  • 任何类被创建出来就自带无参数构造器

  • 有参数构造器被创建,默认的无参数构造器就不会被创建,需要手动创建。

this关键字

  • this可以出现在构造器与方法中

  • this的作用

    • 表示本对象或方法的地址

    • 可以指定当前对象的成员变量、成员方法。

封装

  • 面向对象的三大特征:封装,继承,多态

  • 封装:告诉我们如何正确设计对象的属性和方法

  • 封装的原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为。

封装有什么好处

  • 让编程变得很简单,有什么事,找对象,调方法就行.

  • 不用记对象的那么多方法,有需要时去找就行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大数据白白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值