面向对象入门2与类的识别预习

目录

1.类方法-static方法

1.1什么样的方法应该用static修饰?

1.2不用static修饰的方法往往具有什么特性

1.3Student的getName应该用static修饰吗?

2.类的设计

2.1购物车案例中,使用了什么方法将问题描述中的类、方法、属性找出来?

2.2方法与属性到底属于哪个类,要怎么判定呢?

3.使用包管理类-包装制

3.1一个项目中有很多类。怎样才能避免你项目中的类与别人编写的类同名呢?项目中类各种各样要怎么管理这些代码呢?举例说明

4.Java编程规范


1.类方法-static方法

static关键字用于修饰类的方法或变量,表示它们属于类本身,而不是类的某个特定实例。

1.1什么样的方法应该用static修饰?

(1)工具方法,不需要创建类的实例即可调用。如Math类

(2)修饰常量。一个方法的主要目的是返回一个常量,利用static有助于明确表明该方法不会修改任何实例状态

public class Constants {
    public static final double PI = 3.14159;

    public static double getPi() {
        return PI;
    }
}

(3)初始化类级别的资源(AI)

当需要在类加载时初始化一些类级别的资源时,可以使用static方法,这在某些情况下可能是必要的,比如需要提前加载一些配置信息或初始化一些全局变量。

1.2不用static修饰的方法往往具有什么特性

如果一个方法需要访问或修改实例变量,或者其行为依赖于对象的状态,那么这个方法就不应该被声明为 static

(1)方法要通过创建对象并调用来实现具体功能

   class Person {
        private String name;
        private int age;

        public Person(String name, int age) {
            this.name = name;
            this.age = age;
        }

        public void introduceYourself() {
            System.out.println("Hello, my name is " + name + " and I am " + age + " years old.");
        }
    }

    public class demo01 {
        public static void main(String[] args) {
            Person person = new Person("gmy", 19);
            person.introduceYourself(); // 不使用 static
        }
    }

(2)方法修改实例变量

(3)行为随对象变化而变化

public class Vehicle {
    private String color;

    public Vehicle(String color) {
        this.color = color;
    }

    public String getColor() {
        return color;
    }
}

public class Main {
    public static void main(String[] args) {
        Vehicle car = new Vehicle("Red");
        Vehicle bike = new Vehicle("Blue");

        System.out.println(car.getColor()); // 不使用 static
        System.out.println(bike.getColor()); // 不使用 static
    }
}

1.3Student的getName应该用static修饰吗?

不能。getName在调用的时候需要创建对象,名字随着对象的变化而变化。

    class Person {
        private String name;
        private int age;

        public Person(String name, int age) {
            this.name = name;
            this.age = age;

        }
        public String getName(){
            return name;
        }

    }
    public class demo01 {
        public static void main(String[] args) {
            Person person = new Person("gmy", 19);
            Person person1 =new Person("hst",19);
            System.out.println(person.getName());
            System.out.println(person1.getName());
        }
    }

2.类的设计

2.1购物车案例中,使用了什么方法将问题描述中的类、方法、属性找出来?

(1)分析需求

(2)提取类

购物车(ShoppingCar)和商品(Product)

(3)提取属性

ShoppingCar类:

  • entry:存储购物车中商品的列表

Product类:

  • name:商品名称
  • price:商品价格
  • count:商品数量

(4)提取方法

ShoppingCar类:

  • 添加商品
  • 移除商品
  • 获得商品列表
  • 计算商品总价

ShoppingCar类

package shopping;

import java.util.ArrayList;
import java.util.List;

public class ShoppingCar {
    private List<Product> entry;
    public ShoppingCar(){
        this.entry=new ArrayList<>();
    }
    public void addProduct(Product product){
        entry.add(product);
    }
    public void removeProduct(Product product){
        entry.remove(product);
    }
    public List<Product> getEntry(){
        return entry;
    }
    public double calculateTotalPrice() {
        double total = 0;
        for (Product product : entry) {
            total += product.getPrice() * product.getCount();
        }
        return total;
    }

}

Product类

package shopping;

public class Product {
    private String name;
    private double price;
    private int count;
    public Product(String name,double price,int count){
        this.name = name;
        this.price = price;
        this.count = count;
    }
    public String getName(){
        return name;
    }
    public double getPrice(){
        return price;
    }
    public int getCount(){
        return count;
    }
}

测试代码(AI)

package shopping;

import java.util.List;

import java.util.List;

public class ShoppingCarTest {

    public static void main(String[] args) {
        // 创建产品
        Product apple = new Product("Apple", 1.5, 5);
        Product banana = new Product("Banana", 0.5, 10);
        Product orange = new Product("Orange", 0.75, 3);

        // 创建购物车
        ShoppingCar cart = new ShoppingCar();

        // 添加产品到购物车
        cart.addProduct(apple);
        cart.addProduct(banana);
        cart.addProduct(orange);

        // 输出购物车中的产品列表
        System.out.println("Products in the shopping cart:");
        List<Product> productList = cart.getEntry();
        for (Product product : productList) {
            System.out.println("Name: " + product.getName() + ", Price: " + product.getPrice() + ", Count: " + product.getCount());
        }

        // 计算购物车总价
        double totalPrice = cart.calculateTotalPrice();
        System.out.println("Total price of the shopping cart: $" + totalPrice);

        // 从购物车中移除一个产品
        cart.removeProduct(apple);

        // 再次输出购物车中的产品列表
        System.out.println("After removing Apple:");
        productList = cart.getEntry();
        for (Product product : productList) {
            System.out.println("Name: " + product.getName() + ", Price: " + product.getPrice() + ", Count: " + product.getCount());
        }

        // 再次计算购物车总价
        totalPrice = cart.calculateTotalPrice();
        System.out.println("New total price of the shopping cart: $" + totalPrice);
    }
}

运行结果:

2.2方法与属性到底属于哪个类,要怎么判定呢?

根据职权和功能判定,ShoppingCar 类的主要职责是管理购物车中的商品,因此与购物车管理相关的操作(如添加商品、删除商品、计算总价等)应该属于 ShoppingCar 类。

3.使用包管理类-包装制

3.1一个项目中有很多类。怎样才能避免你项目中的类与别人编写的类同名呢?项目中类各种各样要怎么管理这些代码呢?举例说明

使用包管理类,有点像使用目录组织管理文件。包装制可以将一组相关的类,接口组织起来,提供访问控制,命名空间管理功能。

例如购物车案例:

4.Java编程规范

(1)变量命名:变量名应使用完整的英文单词,禁止使用缩写,以增加代码的可读性

(2)类命名:类名使用大写字母开头的完整英文单词或词组,禁止使用缩写,类名应当能准确反映类的职责

(3)方法名:方法名应采用动词或动宾短语,且首字母小写,其余单词首字母大写

(4)常量:常量名全部大写,单词间用下划线分

(5)包名:

  • 全部采用小写
  • 包含创建者,项目,模块等信息
  • 如果是公司的话,采用公司的反向域名
  • 例子:jmu.edu——>edu.jmu.netresearch.util

(6)代码格式:代码块应当缩进 4 个空格,禁止使用 Tab 字符;每行代码长度不超过 120 个字符;方法参数之间用逗号分隔;大括号的使用要一致,推荐 K&R 样式。

(7)OOP规约:类应当尽可能使用组合而非继承的方式进行扩展;类的职责单一,避免过大过胖;遵循 SOLID 原则(单一职责原则、开放封闭原则、里氏替换原则、接口隔离原则、依赖倒置原则)。(AI)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值