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


    今天是下午没课,从c++正式开始学习java的面向对象基础,看的是黑马程序员的课程,做点笔记记录一下。


    一、设计对象并使用

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

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

     

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

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

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

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

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

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

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

    如何定义类呢

    如何得到类的对象呢

    如何使用对象呢

     下面用具体案例表示

     这里面Car就是类

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

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

     

    二、面向对象内存机制 

    1、多个对象内存图

    对于以下代码

    1. public class Car {
    2. // 成员变量(属性)
    3. String name;
    4. double price;
    5. // 方法(行为)
    6. public void start(){
    7. System.out.println(name+"启动了!");
    8. }
    9. public void run(){
    10. System.out.println("售价为:" + price +"的" + name+"跑的快!");
    11. }
    12. }

    对象 

    1. public class Test {
    2. public static void main(String[] args) {
    3. Car c1 = new Car();
    4. c1.name = "奔驰GLC";
    5. c1.price = 39.78;
    6. System.out.println(c1.name);
    7. System.out.println(c1.price);
    8. c1.start();
    9. c1.run();
    10. Car c2 = new Car();
    11. c2.name = "宝马X3";
    12. c2.price = 38.98;
    13. System.out.println(c2.name);
    14. System.out.println(c2.price);
    15. c2.start();
    16. c2.run();
    17. }
    18. }

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

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

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

    总结

    1.对象放在哪个位置?
       堆内存中
    2. Car c = new Car(); c变量名中存储的是什么?
        存储的是对象在堆内存中的地址。
    3. 成员变量(name、price)的数据放在哪里,存在于哪个位置?
        对象中,存在于堆内存中。

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

    对于以下代码

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

    对象 

    1. public class Test {
    2. public static void main(String[] args) {
    3. Student s1 = new Student();
    4. s1.name = "小明";
    5. s1.sex = '男';
    6. s1.hobby = "游戏、睡觉、听课";
    7. s1.study();
    8. // 把学生类型的s1变量赋值给学生类型的s2变量
    9. Student s2 = s1;
    10. s2.hobby = "爱提问";
    11. System.out.println(s2.name);
    12. System.out.println(s2.sex);
    13. System.out.println(s1.hobby);
    14. s2.study();
    15. } }

     

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

     

     

     3、补充(垃圾回收

    垃圾回收
       注意:当堆内存中的 类对象 数组对象 ,没有被任何变量引用(指向)时,就会被判定为内存中的 “垃圾”。
       Java存在自动垃圾回收器,会定期进行清理
    就比如在上面的代码中填写到 s1= null, s2=null。就会出现 name,hobby,sex里面存储的东西皆被释放掉

    习并这使用

    学习如何自己设计对象并使用
    学习获取已有对象并使用
    学习如何自己设计对象并使用
    学习获取已有对象并使用
    学习如何自己设计对象并使用
    学习获取已有对象并使用
    学习如何自己设计对象并使用
  • 相关阅读:
    内网穿透,轻松实现PostgreSQL数据库公网远程连接!
    如何利用大模型蒸馏出小模型实现降本
    Python算法——树的路径和算法
    vscode 画流程图
    C++面试八股文:static_cast了解一下?
    【面试题】CSS响应式
    运行vue create vue-demo报错:无法加载文件,因为在此系统上禁止运行脚本
    共享店铺系统如何搭建无人共享自习室?
    2. Python 判断语句、循环语句、函数
    c++可变参数模板
  • 原文地址:https://blog.csdn.net/qq_64691289/article/details/126764832