从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月前
|
IDE Java 编译器
java编程最基础学习
Java入门需掌握:环境搭建、基础语法、面向对象、数组集合与异常处理。通过实践编写简单程序,逐步深入学习,打牢编程基础。
233 1
|
2月前
|
存储 Oracle Java
java零基础学习者入门课程
本课程为Java零基础入门教程,涵盖环境搭建、变量、运算符、条件循环、数组及面向对象基础,每讲配示例代码与实践建议,助你循序渐进掌握核心知识,轻松迈入Java编程世界。
317 0
|
3月前
|
Java API 容器
Java基础学习day08-2
本节讲解Java方法引用与常用API,包括静态、实例、特定类型方法及构造器引用的格式与使用场景,并结合代码示例深入解析。同时介绍String和ArrayList的核心方法及其实际应用。
165 1
|
2月前
|
负载均衡 Java API
grpc-java 架构学习指南
本指南系统解析 grpc-java 架构,涵盖分层设计、核心流程与源码结构,结合实战路径与调试技巧,助你从入门到精通,掌握高性能 RPC 开发精髓。
316 8
|
3月前
|
Java
Java基础学习day08-作业
本作业涵盖Java中Lambda表达式的应用,包括Runnable与Comparator接口的简化实现、自定义函数式接口NumberProcessor进行加减乘及最大值操作,以及通过IntProcessor处理整数数组,实现遍历、平方和奇偶判断等功能,强化函数式编程实践。
84 5
|
3月前
|
Java 程序员
Java基础学习day08
本节讲解Java中的代码块(静态与实例)及其作用,深入介绍内部类(成员、静态、局部及匿名)的定义与使用,并引入函数式编程思想,重点阐述Lambda表达式及其在简化匿名内部类中的应用。
156 5
|
3月前
|
Java
Java基础语法与面向对象
重载(Overload)指同一类中方法名相同、参数列表不同,与返回值无关;重写(Override)指子类重新实现父类方法,方法名和参数列表必须相同,返回类型兼容。重载发生在同类,重写发生在继承关系中。
166 1
|
3月前
|
Java
Java基础学习day07-作业
本作业包含六个Java编程案例:1)动物类继承与多态;2)加油卡支付系统;3)员工管理类设计;4)学生信息统计接口;5)USB设备控制;6)家电智能控制。综合运用抽象类、接口、继承、多态等面向对象技术,强化Java基础编程能力。
188 3
|
3月前
|
Java
Java基础学习day06-作业
本内容为Java基础学习作业,涵盖两个案例:一是通过Card类及其子类GoldenCard、SilverCard实现加油卡系统,体现封装与继承;二是通过Shape类及子类Circle、Rectangle演示多态与方法重写,强化面向对象编程理解。
97 1
|
3月前
|
设计模式 存储 Java
Java基础学习day07
本节讲解Java中的final关键字、单例设计模式、枚举类、抽象类与接口。涵盖常量定义、单例写法(饿汉式/懒汉式)、枚举特点及应用场景,以及抽象类与接口的使用与区别,助力掌握核心面向对象编程思想。
151 1