​前言:

面向对象介绍

并不是一个技术,而是一种编程指导思想。 把现实世界的具体事物全部看成一个一个的对象来解决问题。

为什么要用面向对象编程

生活中我们解决问题就是按照对象化的方式进行的。如果程序也能够按照生活的中的方式来解

决问题,那么程序就更符合人类的思维习惯,代码看起来会更易理解、更简单。

面向对象编程的指导思想、优点小结:

  • 在程序中也把现实世界的具体事物全部看成一个一个的对象来解决问题。
  • 按照面向对象编程来设计程序:程序代码符合人类思维习惯,更易理解、更简单。

目录

​​一、设计对象并使用​​

​​1.定义类,创建对象并使用​​

​​2.定义类的补充注意事项​​

​​二、对象内存图​​

​​1.多个对象的内存图​​

​​2.两个变量指向同一个对象内存图​​

​​3.垃圾回收​​

​​三、面向对象编程案例​​

​​购车系统模拟​​


一、设计对象并使用

1.定义类,创建对象并使用

在Java中,必须先设计类,才能获得对象。

类(设计图):是对象共同特征的描述; 对象:是真实存在的具体实例。

【JAVA基础】面向对象基础(上)_成员变量

【JAVA基础】面向对象基础(上)_成员变量_02

如何定义类

public class 类名 {

1、成员变量(代表属性,一般是名词)

2、成员方法(代表行为,一般是动词)
3、构造器 (后面学习)
4、代码块 (后面学习)
5、内部类 (后面学习)}

public class Car { }
String name;
double price;
// 属性 (成员变量)
// 行为(方法)
public void start(){
}
public void run(){
}

如何得到类的对象

类名 对象名 = new 类名();

Car c = new Car();

如何使用对象

  • 访问属性: 对象名.成员变量
  • 访问行为: 对象名.方法名(…)


2.定义类的补充注意事项

  • 成员变量的完整定义格式是:修饰符 数据类型 变量名称 = 初始化值; 一般无需指定初始化值,存在默认值。
  • 类名首字母建议大写,且有意义,满足“驼峰模式”
  •  一个Java文件中可以定义多个class类,且只能一个类是public修饰,而且public修饰的类名必须成为代码文件名。 实际开发中建议还是一个文件定义一个class类

对象的成员变量的默认值规则

数据类型

明细

默认值

基本类型

byte、short、char、int、long

0

float、double

0.0

boolean

false

引用类型

类、接口、数组、String

null

二、对象内存图

1.多个对象的内存图

【JAVA基础】面向对象基础(上)_java_03

1.对象放在哪个位置?

堆内存中

2. Car c = new Car(); c变量名中存储的是什么?

存储的是对象在堆内存中的地址。

3. 成员变量(name、price)的数据放在哪里,存在于哪个位置?

对象中,存在于堆内存中。

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

【JAVA基础】面向对象基础(上)_开发语言_04

public class base {
public static void main(String[] args) {

Student s1 = new Student();
s1.name = "小明";
s1.sex = '男';
s1.hobby = "游戏、睡觉、听课";
s1.study();
System.out.println("-------------------");
// 把学生类型的s1变量赋值给学生类型的s2变量
Student s2 = s1;
s2.hobby = "爱提问";
System.out.println(s2.name);
System.out.println(s2.sex);
System.out.println(s1.hobby);
s2.study();
System.out.println("-------------------");
s1.study();
}

}

由此可见:

s2.hobby = "爱提问"; 改变了堆内存的值,导致:

s1.study();和第一次输出的不一样


【JAVA基础】面向对象基础(上)_System_05

3.垃圾回收

  • 注意:当堆内存中的类对象数组对象,没有被任何变量引用(指向)时,就会被判定为内存中的“垃圾”。
  • Java存在自动垃圾回收器,会定期进行清理。

三、面向对象编程案例

购车系统模拟

需求
模拟购物车模块的功能,需要实现添加商品到购物车中去,同时需要提供修改商品的购买数量,结算商品价格功能(请使用面向对象编程来解决)

分析

  • 购物车中的每个商品都是一个对象,需要定义一个商品类。
  • 购物车本身也是一个对象:可以使用数组对象代表它。
  • 完成界面架构,让用户选择操作的功能。

商品类

public class Goods {
int id;
String name;
double price;
int buyNumber;
}
import java.util.Scanner;

public class base {
public static void main(String[] args) {
Goods[] goods=new Goods[100];
Scanner scanner = new Scanner(System.in);


while (true) {
System.out.println("请输入你的操作:add(添加商品) query(查询购物车) update(修改购物车) pay(支付)");
System.out.println("-----------------------------------");
String command = scanner.next();

switch (command){
case "add":
//添加
add(goods,scanner);
break;
case "query":
//查询
query(goods,scanner);
break;
case "update":
//修改
update(goods,scanner);
break;
case "pay":
//支付
pay(goods,scanner);
break;
default:
System.out.println("你输入的命令有误");
break;


}
}


}

private static void pay(Goods[] goods, Scanner scanner) {
double money=0;

for (int i = 0; i < goods.length; i++) {
Goods g = goods[i];
if (g!=null){
money+=(g.price*g.buyNumber);
}
else break;


}
System.out.println("购物车商品价格为:"+money);

}

private static void update(Goods[] goods, Scanner scanner) {
System.out.println("请输入要修改的商品编号");
int id = scanner.nextInt();
Goods date = getupdate(goods, id);
if (date==null){
System.out.println("没有找到改商品");
}else {
System.out.println(date.name+"修改后的数量:");
date.buyNumber=scanner.nextInt();
System.out.println("修改成功");
query(goods,scanner);
}


}


private static Goods getupdate(Goods[] goods,int id){
for (int i = 0; i < goods.length; i++) {
Goods g=goods[i];
if (g!=null){
if (g.id==id){
return g;
}
}
return null;

}
return null;

}



private static void query(Goods[] goods, Scanner scanner) {
System.out.println("-----------------------------------");
System.out.println("编号\t\t名称\t\t价格\t\t数量");
for (int i = 0; i < goods.length; i++) {
Goods g=goods[i];
if (g!=null){
System.out.print(g.id+"\t\t");
System.out.print(g.name+"\t\t");
System.out.print(g.price+"\t\t");
System.out.println(g.buyNumber+"\t\t");
}else {
break;
}


}

}

private static void add(Goods[] goods, Scanner scanner) {
Goods g = new Goods();
System.out.println("侵害输入商品的编号");
g.id=scanner.nextInt();
System.out.println("请输入商品的名称");
g.name=scanner.next();
System.out.println("请输入商品的价格");
g.price=scanner.nextDouble();
System.out.println("请输入商品的数量");
g.buyNumber=scanner.nextInt();


for (int i = 0; i < goods.length; i++) {
if (goods[i]==null){
goods[i]=g;
System.out.println(g.name + "添加成功");
break;
}

}


}

}