大家好,我是Leo🫣🫣🫣,最近在复习Java基础内容,这个专栏后续也会一直更新下去,Java基础乃是咱们Java的根基,俗话说,基础不牢,地动山摇。今天我们主要简单认识一下面向对象。好了,话不多说让我们开始吧😎😎😎。
我们首先来看一个看案例,想想通过你之前所学的知识如何解决。
小明养了两只狗:一只名字叫小白,今年 3 岁,白色。还有一只叫小花,今年10岁,花色。请编写一个程序,当用户输入小狗的名字时,就显示该狗的名字,年龄,颜色。如果用户输入的小狗名错误,则显示 小明没有这只小狗。
通过我们之前学习的技术来看,我们有两种方式来使用Java代码解决这个问题。
话不多说,直接上代码
public static void main(String[] args) {
// 单独使用变量来解决
// 第一只小狗
String cat1Name = "小白";
int cat1Age = 3;
String cat1Color = "白色";
// 第二只小狗
String cat2Name = "小花";
int cat2Age = 100;
String cat2Color = "花色";
// 使用数组的方式
String[] dog1 = {"小白","3","白色"};
String[] dog2 = {"小花","3","花色"};
}
不知道小伙伴发现问题没有,其实这两者方式虽然都能实现,但确是漏洞百出,接下来我们一点一点分析。
使用功能单独变量来解决: 不利于数据的管理(你把一只狗的信息拆解)
使用数组的方式来解决
上述我们知道了我们这个程序的不足,于是我们引入了我们这节课的重点内容:类与对象。
Java 设计者引入类与对象(OOP) ,根本原因就是现有的技术,不能完美的解决新的新的需求.
在Java编程语言中,类和对象是两个核心概念。它们是面向对象编程(OOP)的基石。下面是对它们的简要描述:
**类 (Class)**:
用于描述一组具有相同属性和方法的对象的特性
。public class Car {
// 成员变量
private String color;
private String model;
// 构造方法
public Car(String color, String model) {
this.color = color;
this.model = model;
}
// 方法
public void accelerate() {
System.out.println("Car is accelerating");
}
}
**对象 (Object)**:
Car toyota = new Car("Red", "Corolla");
Car honda = new Car("Blue", "Civic");
toyota.accelerate(); // 输出: Car is accelerating
总结:类是一个抽象的概念,描述了如何创建对象,而对象则是这个描述的具体实例。在面向对象编程中,我们设计和创建类,然后使用这些类来创建对象,这些对象将在程序中执行实际的任务。
类和对象之间的关系是:类是对象的抽象,而对象是类的具体实例。
在Java中,通过定义类可以创建多个对象。类定义了对象的共同属性和行为,对象则具体化了类的定义,每个对象都有自己的**状态(属性值)和行为(方法调用)**。
基于上个案例,我们可以通过类和对象的方式来解决。 首先我们需要定义一个Dog类,这个类的对象可以存储每只狗的名字、年龄和颜色。然后、可以创建一个DogsKeeper类来存储并管理所有的Dog对象。
package com.Leo.exer.object01;
import java.util.*;
/**
* @author : Leo
* @version 1.0
* @date 2023-10-26 16:09
* @description : Dog 测试类
*/
class Dog {
String name;
int age;
String color;
Dog(String name, int age, String color) {
this.name = name;
this.age = age;
this.color = color;
}
}
class DogsKeeper {
Map<String, Dog> dogsMap;
DogsKeeper() {
dogsMap = new HashMap<>();
}
void addDog(Dog dog) {
dogsMap.put(dog.name, dog);
}
String findDog(String name) {
Dog dog = dogsMap.get(name);
if (dog == null) {
return "小明没有这只小狗";
} else {
return "名字:" + dog.name + ",年龄:" + dog.age + ",颜色:" + dog.color;
}
}
}
public class Main {
public static void main(String[] args) {
Dog dog1 = new Dog("小白", 3, "白色");
Dog dog2 = new Dog("小花", 100, "花色");
DogsKeeper keeper = new DogsKeeper();
keeper.addDog(dog1);
keeper.addDog(dog2);
// 假设用户输入的是"小白"
System.out.println(keeper.findDog("小白"));
// 假设用户输入的是"小花"
System.out.println(keeper.findDog("小花"));
// 假设用户输入的是"小黄"
System.out.println(keeper.findDog("小黄"));
}
}
面向对象简称 OO(Object Oriented),20 世纪 80 年代以后,有了面向对象分析(OOA)、 面向对象设计(OOD)、面向对象程序设计(OOP)等新的系统开发方式模型的研究。
对 Java 语言来说,一切皆是对象。把现实世界中的对象抽象地体现在编程世界中,一个对象代表了某个具体的操作。一个个对象最终组成了完整的程序设计,这些对象可以是独立存在的,也可以是从别的对象继承过来的。对象之间通过相互作用传递信息,实现程序开发。
Java 是面向对象的编程语言,对象就是面向对象程序设计的核心。所谓对象就是真实世界中的实体,对象与实体是一一对应的,也就是说现实世界中每一个实体都是一个对象,它是一种具体的概念。对象有以下特点:
例如,在真实世界的学校里,会有学生和老师等实体,学生有学号、姓名、所在班级等属性(数据),学生还有学习、提问、吃饭和走路等操作。学生只是抽象的描述,这个抽象的描述称为“类”。在学校里活动的是学生个体,即张同学、李同学等,这些具体的个体称为对象,对象也称为实例。
我们可以通过下面这张图清晰的理解我们使用类和对象的方式来如何解决我们刚刚上面的案例。
注意事项:
在Java中,虽然类**(Class)和对象(Object)**是两个概念,但是他们两个之间的关系既密切又有区别。
区别:
联系:
类和对象在Java中的关系可以用以下示例说明:
// 定义Person类
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public void speak() {
System.out.println("My name is " + name + " and I am " + age + " years old.");
}
}
// 创建Person对象并调用方法
public class Main {
public static void main(String[] args) {
// 创建Person对象
Person person1 = new Person("John", 25);
Person person2 = new Person("Alice", 30);
// 调用对象的方法
person1.speak(); // 输出:"My name is John and I am 25 years old."
person2.speak(); // 输出:"My name is Alice and I am 30 years old."
}
}
在上述示例中,Person类定义了属性**(name和age)和方法(speak)。通过创建Person类的实例(person1和person2)**,可以使用对象的方法来输出不同的信息。每个对象都有自己的属性值,但共享同一个类的方法定义。
总结:类是对象的模板,描述了对象的属性和行为;对象是类的实例,具体化了类的定义,拥有自己的状态和行为。类和对象之间通过实例化关联在一起,通过对象可以调用类定义的方法操作对象的状态。
我们通过图文结合的方式更清楚的一个对象在JVM内存的存在形式。
从概念来说 类的属性,成员变量,字段都是一个意思。即成员变量 = 属性 = field(字段)
属性是类的一个组成部分,一般是基本数据类型,也可是引用类型(对象,数组)。比如我们前面定义Dog类的int age 就 是属性
注意事项和细节说明
Cat cat ; //声明对象 cat
cat = new Cat(); //创建
Cat cat = new Cat();
基本语法
对象名.属性名; 案例演示赋值和输出
cat.name ;
cat.age;
cat.color;
类和对象的内存分配机制(重要) 我们看一个思考题 我们定义一个人类(Person)(包括 名字,年龄)。编写Object2.java
我们看看下面一段代码:
Person pl=new Person(); p1.age=10; Person p2 = p1;//把pl赋给了p2,让p2指向p1 System.out.println(p2.age);
请问:p2.age究竟是多少?并画出内存图:
需要注意的是,Java中的内存分配和回收是由Java虚拟机(JVM)负责管理的,开发人员无需显式地进行内存分配和释放操作。JVM会根据程序的需要自动进行内存管理,包括对象的创建、分配和垃圾回收等。这种自动化的内存管理机制大大简化了开发过程,并提供了更高的安全性和可靠性。
我们先看一下下面这串代码,看看他在内存中如何执行的。
Person p = new Person();
p.name = "Leo";
p.age = 20
下面我们看一个代码练习,并分析出他的内存布局图。
我们看看下面一段代码,会输出什么信息:
Person a=new Person();
a.age=10;
a.name="小明":
Person b;
b=a;
System.out.println(b.name)//小明
b.age=200;
b = null;
System.out.println(a.age);//200
System.out.println(b.age;//异常
以上便是本文的全部内容,本人才疏学浅,文章有什么错误的地方,欢迎大佬们批评指正!我是Leo,一个在互联网行业的小白,立志成为更好的自己。
如果你想了解更多关于Leo,可以关注公众号-程序员Leo,后面文章会首先同步至公众号。