面对对象编程
类和对象
-
类:共同特征的描述
-
对象:真实存在的具体实例
类的设计
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的作用
-
表示本对象或方法的地址
-
可以指定当前对象的成员变量、成员方法。
-
-
封装
-
面向对象的三大特征:封装,继承,多态
-
封装:告诉我们如何正确设计对象的属性和方法
-
封装的原则:对象代表什么,就得封装对应的数据,并提供数据对应的行为。
封装有什么好处
-
让编程变得很简单,有什么事,找对象,调方法就行.
-
不用记对象的那么多方法,有需要时去找就行。