从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里面存储的东西皆被释放掉

相关文章
|
2月前
|
XML Java 编译器
Java学习十六—掌握注解:让编程更简单
Java 注解(Annotation)是一种特殊的语法结构,可以在代码中嵌入元数据。它们不直接影响代码的运行,但可以通过工具和框架提供额外的信息,帮助在编译、部署或运行时进行处理。
91 43
Java学习十六—掌握注解:让编程更简单
|
23天前
|
Java 大数据 API
14天Java基础学习——第1天:Java入门和环境搭建
本文介绍了Java的基础知识,包括Java的简介、历史和应用领域。详细讲解了如何安装JDK并配置环境变量,以及如何使用IntelliJ IDEA创建和运行Java项目。通过示例代码“HelloWorld.java”,展示了从编写到运行的全过程。适合初学者快速入门Java编程。
|
2月前
|
存储 SQL 小程序
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
这篇文章详细介绍了Java虚拟机(JVM)的运行时数据区域和JVM指令集,包括程序计数器、虚拟机栈、本地方法栈、直接内存、方法区和堆,以及栈帧的组成部分和执行流程。
36 2
JVM知识体系学习五:Java Runtime Data Area and JVM Instruction (java运行时数据区域和java指令(大约200多条,这里就将一些简单的指令和学习))
WK
|
29天前
|
安全 Java 编译器
C++和Java哪个更好用
C++和Java各具优势,选择取决于项目需求、开发者偏好及目标平台特性。C++性能出色,适合游戏、实时系统等;Java平台独立性强,适合跨平台、安全敏感应用。C++提供硬件访问和灵活编程范式,Java有自动内存管理和丰富库支持。两者各有千秋,需根据具体需求选择。
WK
18 1
|
1月前
|
Java 关系型数据库 数据库
面向对象设计原则在Java中的实现与案例分析
【10月更文挑战第25天】本文通过Java语言的具体实现和案例分析,详细介绍了面向对象设计的五大核心原则:单一职责原则、开闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。这些原则帮助开发者构建更加灵活、可维护和可扩展的系统,不仅适用于Java,也适用于其他面向对象编程语言。
21 2
|
2月前
|
IDE Java 程序员
C++ 程序员的 Java 指南
一个 C++ 程序员自己总结的 Java 学习中应该注意的点。
24 5
|
2月前
|
编译器 C语言 C++
配置C++的学习环境
【10月更文挑战第18天】如果想要学习C++语言,那就需要配置必要的环境和相关的软件,才可以帮助自己更好的掌握语法知识。 一、本地环境设置 如果您想要设置 C++ 语言环境,您需要确保电脑上有以下两款可用的软件,文本编辑器和 C++ 编译器。 二、文本编辑器 通过编辑器创建的文件通常称为源文件,源文件包含程序源代码。 C++ 程序的源文件通常使用扩展名 .cpp、.cp 或 .c。 在开始编程之前,请确保您有一个文本编辑器,且有足够的经验来编写一个计算机程序,然后把它保存在一个文件中,编译并执行它。 Visual Studio Code:虽然它是一个通用的文本编辑器,但它有很多插
|
1月前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
2月前
|
小程序 Oracle Java
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
这篇文章是关于JVM基础知识的介绍,包括JVM的跨平台和跨语言特性、Class文件格式的详细解析,以及如何使用javap和jclasslib工具来分析Class文件。
49 0
JVM知识体系学习一:JVM了解基础、java编译后class文件的类结构详解,class分析工具 javap 和 jclasslib 的使用
WK
|
28天前
|
开发框架 移动开发 Java
C++和Java哪个更适合开发移动应用
本文对比了C++和Java在移动应用开发中的优劣,从市场需求、学习难度、开发效率、跨平台性和应用领域等方面进行了详细分析。Java在Android开发中占据优势,而C++则适合对性能要求较高的场景。选择应根据具体需求和个人偏好综合考虑。
WK
47 0