从c++到Java,关于Java面向对象基础的学习(一)

简介: 目录一、设计对象并使用1、学习获取已有对并使用学2、学习如何自己设计对象并使用3、定义类的补充注意事项二、面向对象内存机制 1、多个对象内存图2、两个变量指向同一个对象内存图 3、补充(垃圾回收)

目录

一、设计对象并使用

1、学习获取已有对并使用学

2、学习如何自己设计对象并使用

3、定义类的补充注意事项

二、面向对象内存机制

1、多个对象内存图

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

3、补充(垃圾回收)


一、设计对象并使用

这一节重点是学习获取已有对并使用学习自己设计对象并使用

1、学习获取已有对并使用

之前学习的键盘录入技术就是对已有的对象进行使用

public class Test {
public static void main(String[] args) {
// 1、得到一个随机数对象,用于得到随机数
Random r = new Random();
int data = r.nextInt(10) + 1 ; // 生成 1-10之间的随机数
System.out.println(data);
// 2、创建一个扫描器对象,用于接收用户输入的数据
Scanner sc = new Scanner(System.in);
System.out.println("请您输入您的年龄:");
int age = sc.nextInt();
System.out.println(age);
} }

这里面对Random r = new Random()的调用就是获取已有对象并使用

2、学习如何自己设计对象并使用

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

类相当于设计图:是对象共同特征的描述。

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

如何定义类呢

image.png

如何得到类的对象呢

image.png

如何使用对象呢

image.png

下面用具体案例表示

image.png

这里面Car就是类


3、定义类的补充注意事项

成员变量的完整定义格式是: 修饰符 数据类型 变量名称 = 初始化值; 一般无需指定初始化值,存在默认值。(看下图)

类名首字母建议大写,且有意义,满足“驼峰模式”。

 一个Java文件中可以定义多个class类,且只能一个类是public修饰,而且public修饰的类名必须成为代码文件名。

实际开发中建议还是一个文件定义一个class类。

image.png

二、面向对象内存机制

1、多个对象内存图

对于以下代码

public class Car {
// 成员变量(属性)
    String name;
    double price;
    // 方法(行为)
    public void start(){
    System.out.println(name+"启动了!");
}
public void run(){
    System.out.println("售价为:" + price +"的" + name+"跑的快!");
    } 
}

对象

public class Test {
public static void main(String[] args) {
    Car c1 = new Car();
    c1.name = "奔驰GLC";
    c1.price = 39.78;
    System.out.println(c1.name);
    System.out.println(c1.price);
    c1.start();
    c1.run();
    Car c2 = new Car();
    c2.name = "宝马X3";
    c2.price = 38.98;
    System.out.println(c2.name);
    System.out.println(c2.price);
    c2.start();
    c2.run();
    } 
}

如何去分析其中内存的原理呢·

如下图,先分析方法区,在对象中新建了一个Car c1,由于用了new,这里面的会放在堆中,而Car在类中,其中的String name 和price皆为地址,且均为空,其指向成员方法。

它会把这些地址给Car c1,且c1指向与堆内存


image.png

总结


1.对象放在哪个位置?

  堆内存中

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

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

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

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

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

对于以下代码

public class Student {
    String name;
    char sex;
    String hobby; // 爱好
    public void study(){
    System.out.println(“名称:” + name + “,性别:” + sex
    + “,爱好:" + hobby + "的学生:开始学习了!");
    } 
}

对象

public class Test {
    public static void main(String[] args) {
    Student s1 = new Student();
    s1.name = "小明";
    s1.sex = '男';
    s1.hobby = "游戏、睡觉、听课";
    s1.study();
    // 把学生类型的s1变量赋值给学生类型的s2变量
    Student s2 = s1;
    s2.hobby = "爱提问";
    System.out.println(s2.name);
    System.out.println(s2.sex);
    System.out.println(s1.hobby);
    s2.study();
} }

这里面定义了一个s2,s2存的也是s1存的地址,用了s2.hobby 会把s1.hobby的内容改掉,同样变成爱提问

image.png

3、补充(垃圾回收)

垃圾回收

  注意:当堆内存中的 类对象 或 数组对象 ,没有被任何变量引用(指向)时,就会被判定为内存中的 “垃圾”。

  Java存在自动垃圾回收器,会定期进行清理

就比如在上面的代码中填写到 s1= null, s2=null。就会出现 name,hobby,sex里面存储的东西皆被释放掉

相关文章
|
27天前
|
Java 调度 开发者
Java线程池ExecutorService学习和使用
通过学习和使用Java中的 `ExecutorService`,可以显著提升并发编程的效率和代码的可维护性。合理配置线程池参数,结合实际应用场景,可以实现高效、可靠的并发处理。希望本文提供的示例和思路能够帮助开发者深入理解并应用 `ExecutorService`,实现更高效的并发程序。
34 10
|
30天前
|
Java 数据库连接 数据库
【潜意识Java】深度分析黑马项目《苍穹外卖》在Java学习中的重要性
《苍穹外卖》项目对Java学习至关重要。它涵盖了用户管理、商品查询、订单处理等模块,涉及Spring Boot、MyBatis、Redis等技术栈。
86 4
|
30天前
|
前端开发 Java 数据库连接
【潜意识Java】深度解读JavaWeb开发在Java学习中的重要性
深度解读JavaWeb开发在Java学习中的重要性
30 4
|
30天前
|
存储 移动开发 算法
【潜意识Java】Java基础教程:从零开始的学习之旅
本文介绍了 Java 编程语言的基础知识,涵盖从简介、程序结构到面向对象编程的核心概念。首先,Java 是一种高级、跨平台的面向对象语言,支持“一次编写,到处运行”。接着,文章详细讲解了 Java 程序的基本结构,包括包声明、导入语句、类声明和 main 方法。随后,深入探讨了基础语法,如数据类型、变量、控制结构、方法和数组。此外,还介绍了面向对象编程的关键概念,例如类与对象、继承和多态。最后,针对常见的编程错误提供了调试技巧,并总结了学习 Java 的重要性和方法。适合初学者逐步掌握 Java 编程。
52 1
|
1月前
|
C++ 芯片
【C++面向对象——类与对象】Computer类(头歌实践教学平台习题)【合集】
声明一个简单的Computer类,含有数据成员芯片(cpu)、内存(ram)、光驱(cdrom)等等,以及两个公有成员函数run、stop。只能在类的内部访问。这是一种数据隐藏的机制,用于保护类的数据不被外部随意修改。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。成员可以在派生类(继承该类的子类)中访问。成员,在类的外部不能直接访问。可以在类的外部直接访问。为了完成本关任务,你需要掌握。
70 19
|
1月前
|
存储 编译器 数据安全/隐私保护
【C++面向对象——类与对象】CPU类(头歌实践教学平台习题)【合集】
声明一个CPU类,包含等级(rank)、频率(frequency)、电压(voltage)等属性,以及两个公有成员函数run、stop。根据提示,在右侧编辑器补充代码,平台会对你编写的代码进行测试。​ 相关知识 类的声明和使用。 类的声明和对象的声明。 构造函数和析构函数的执行。 一、类的声明和使用 1.类的声明基础 在C++中,类是创建对象的蓝图。类的声明定义了类的成员,包括数据成员(变量)和成员函数(方法)。一个简单的类声明示例如下: classMyClass{ public: int
52 13
|
1月前
|
编译器 数据安全/隐私保护 C++
【C++面向对象——继承与派生】派生类的应用(头歌实践教学平台习题)【合集】
本实验旨在学习类的继承关系、不同继承方式下的访问控制及利用虚基类解决二义性问题。主要内容包括: 1. **类的继承关系基础概念**:介绍继承的定义及声明派生类的语法。 2. **不同继承方式下对基类成员的访问控制**:详细说明`public`、`private`和`protected`继承方式对基类成员的访问权限影响。 3. **利用虚基类解决二义性问题**:解释多继承中可能出现的二义性及其解决方案——虚基类。 实验任务要求从`people`类派生出`student`、`teacher`、`graduate`和`TA`类,添加特定属性并测试这些类的功能。最终通过创建教师和助教实例,验证代码
54 5
|
1月前
|
存储 C++
【C++面向对象——输入输出流】处理二进制文件(头歌实践教学平台习题)【合集】
本任务要求使用C++读取二进制文件并在每行前添加行号后输出到控制台。主要内容包括: 1. **任务描述**:用二进制方式打开指定文件,为每一行添加行号并输出。 2. **相关知识**: - 流类库中常用的类及其成员函数(如`iostream`、`fstream`等)。 - 标准输入输出及格式控制(如`cin`、`cout`和`iomanip`中的格式化函数)。 - 文件的应用方法(文本文件和二进制文件的读写操作)。 3. **编程要求**:编写程序,通过命令行参数传递文件名,使用`getline`读取数据并用`cout`输出带行号的内容。 4. **实验步骤**:参考实验指
39 5
|
1月前
|
存储 算法 搜索推荐
【C++面向对象——群体类和群体数据的组织】实现含排序功能的数组类(头歌实践教学平台习题)【合集】
1. **相关排序和查找算法的原理**:介绍直接插入排序、直接选择排序、冒泡排序和顺序查找的基本原理及其实现代码。 2. **C++ 类与成员函数的定义**:讲解如何定义`Array`类,包括类的声明和实现,以及成员函数的定义与调用。 3. **数组作为类的成员变量的处理**:探讨内存管理和正确访问数组元素的方法,确保在类中正确使用动态分配的数组。 4. **函数参数传递与返回值处理**:解释排序和查找函数的参数传递方式及返回值处理,确保函数功能正确实现。 通过掌握这些知识,可以顺利地将排序和查找算法封装到`Array`类中,并进行测试验证。编程要求是在右侧编辑器补充代码以实现三种排序算法
42 5
|
1月前
|
Serverless 编译器 C++
【C++面向对象——类的多态性与虚函数】计算图像面积(头歌实践教学平台习题)【合集】
本任务要求设计一个矩形类、圆形类和图形基类,计算并输出相应图形面积。相关知识点包括纯虚函数和抽象类的使用。 **目录:** - 任务描述 - 相关知识 - 纯虚函数 - 特点 - 使用场景 - 作用 - 注意事项 - 相关概念对比 - 抽象类的使用 - 定义与概念 - 使用场景 - 编程要求 - 测试说明 - 通关代码 - 测试结果 **任务概述:** 1. **图形基类(Shape)**:包含纯虚函数 `void PrintArea()`。 2. **矩形类(Rectangle)**:继承 Shape 类,重写 `Print
48 4