• 非零基础自学Java (老师:韩顺平) 第7章 面向对象编程(基础部分) 7.1 类与对象


    非零基础自学Java (老师:韩顺平)

    ✈【【零基础 快速学Java】韩顺平 零基础30天学会Java】

    第7章 面向对象编程(基础部分)

    7.1 类与对象
    7.1.1 一个养猫问题

    张老太养了两只猫猫:一只名字叫小白,今年 3 岁,白色。还有一只叫小花,今年 100 岁,花色。请编写一个程序,当用户输入小猫的名字时,就显示该猫的名字,年龄,颜色。如果用户输入的小猫名错误,则显示 张老太没有这只猫猫

    7.1.2 使用现有技术解决
    • 单独的定义变量解决
    • 使用数组解决
    7.1.3 现有技术解决的缺点分析
    • 不利于数据管理
    • 效率低
    • java 设计者 引入 类与对象(OOP) ,根本原因就是现有的技术,不能完美的解决新的新的需求.

    定义一个猫类 Cat

    /**
     * ClassName: Cat
     * date: 2022/9/2 14:37
     *
     * @author DingJiaxiong
     */
    
    class Cat {
        String name;
        int age;
        String color;
        double weight;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    实例化

    /**
     * ClassName: Object01
     * date: 2022/9/2 14:34
     *
     * @author DingJiaxiong
     */
    
    public class Object01 {
        public static void main(String[] args) {
            Cat cat1 = new Cat();
            cat1.name = "小白";
            cat1.age = 3;
            cat1.color = "白色";
            cat1.weight = 10;
    
            Cat cat2 = new Cat();
            cat2.name = "小花";
            cat2.age = 100;
            cat2.color = "花色";
            cat2.weight = 20;
    
            //访问对象属性
            System.out.println("第 1 只猫信息" + cat1.name + " " + cat1.age + " " + cat1.color + " " + cat1.weight);
            System.out.println("第 2 只猫信息" + cat2.name + " " + cat2.age + " " + cat2.color + " " + cat2.weight);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    运行结果

    在这里插入图片描述

    7.1.4 一个程序就是一个世界

    一个程序就是一个世界,有很多事物(对象[属性, 行为]

    在这里插入图片描述

    7.1.5 类与对象的关系示意图

    在这里插入图片描述

    在这里插入图片描述

    7.1.6 类和对象的区别和联系
    • 类是抽象的,概念的,代表一类事物,比如人类,猫类…, 即它是数据类型.
    • 对象是具体的,实际的,代表一个具体事物, 即 是实例.
    • 类是对象的模板,对象是类的一个个体,对应一个实例
    7.1.7 对象在内存中的存在形式

    在这里插入图片描述

    7.1.8 属性/成员变量/字段

    【基本介绍】

    从概念或叫法上看: 成员变量 = 属性 = field(字段) (即 成员变量是用来表示属性的,韩老师授课中,统一叫 属性)

    举个栗子

    /**
     * ClassName: Object02
     * date: 2022/9/2 14:44
     *
     * @author DingJiaxiong
     */
    
    public class Object02 {
        public static void main(String[] args) {
            
        }
    }
    
    class Car{
        String name; //属性、成员变量、字段field
        double price;
        String color;
        String[] master;  //属性可以是基本数据类型,也可以是引用类型(对象、数组)
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 属性是类的一个组成部分,一般是基本数据类型,也可是引用类型(对象,数组)

    【注意事项和细节说明】

    • 属性的定义语法同变量,示例:访问修饰符 属性类型 属性名

      • 访问修饰符:控制属性的访问范围

        有四种:public, proctected, 默认, private ,后面韩老师会详细介绍

    • 属性的定义类型可以为任意类型,包含基本类型或引用类型

    • 属性如果不赋值,有默认值,规则和数组一致。

      int 0,short 0, byte 0, long 0, float 0.0,double 0.0,char \u0000,boolean false,String null

    举个栗子

    /**
     * ClassName: PropertiesDetail
     * date: 2022/9/2 14:48
     *
     * @author DingJiaxiong
     */
    
    public class PropertiesDetail {
        public static void main(String[] args) {
            Person p1 = new Person();
            System.out.println("当前这个人的信息");
            System.out.println("age = " + p1.age + " name = " + p1.name + " sal = "+ p1.sal + " isPass = " + p1.isPass);
        }
    }
    
    class Person{
        int age;
        String name;
        double sal;
        boolean isPass;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    运行结果

    在这里插入图片描述

    7.1.9 如何创建对象
    • 先声明再创建

      Cat cat ; //声明对象 cat
      cat = new Cat(); //创建
      
      • 1
      • 2
    • 直接创建

      Cat cat = new Cat();
      
      • 1
    7.1.10 如何访问属性

    【基本语法】

    对象名.属性名
    
    • 1

    【类和对象的内存分配机制】

    /**
     * ClassName: Object03
     * date: 2022/9/2 14:53
     *
     * @author DingJiaxiong
     */
    public class Object03 {
        public static void main(String[] args) {
            person person1 = new person();
            person1.age = 10;
            person1.name = "小明";
            
            person person2 = person1;
            System.out.println(person2.age);
        }
    }
    
    
    class person{
        int age;
        String name;
        double sal;
        boolean isPass;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    运行结果

    在这里插入图片描述

    在这里插入图片描述

    7.1.11 类和对象的内存分配机制

    【Java 内存的结构分析】

    • 栈:一般存放基本数据类型(局部变量)
    • 堆:存放对象(Cat cat , 数组等)
    • 方法区:常量池(常量,比如字符串)、类加载信息

    【Java 创建对象的流程简单分析】

    Person p = new Person();
    p.name = “jack”;
    p.age = 10
    
    • 1
    • 2
    • 3
    1. 先加载 Person 类信息(属性和方法信息, 只会加载一次)
    2. 在堆中分配空间, 进行默认初始化【按照默认规则】
    3. 把地址赋给 p , p 就指向对象
    4. 进行指定初始化, 比如 p.name =”jack” p.age = 10

    举个栗子

    /**
     * ClassName: Object03
     * date: 2022/9/2 14:53
     *
     * @author DingJiaxiong
     */
    public class Object03 {
        public static void main(String[] args) {
            person person1 = new person();
            person1.age = 10;
            person1.name = "小明";
    
    //        person person2 = person1;
    //        System.out.println(person2.age);
            person b ;
            b = person1;
    
            System.out.println(b.name); //小明
            b.age = 200;
            b = null;
    
            System.out.println(person1.age); //200
            System.out.println(b.age); //报异常
        }
    }
    
    
    class person{
        int age;
        String name;
        double sal;
        boolean isPass;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    mac apktool安装
    ECS框架浅析
    成都欢乐谷奇幻夜活动直播顺利开播,创意云激发文旅市场新活力
    敏捷是怎么提高工作效率的
    js构造函数和原型链
    YOLOv5算法改进--通过yaml文件添加注意力机制【附代码】
    SyntaxError: Non-UTF-8 code starting with ‘\xb3‘ in file解决方案
    打断点调试代码的思路(找bug的思路)二分法
    13.02 命名空间简介与基本输入/输出精解
    GoLang之详解Go中的Channel源码
  • 原文地址:https://blog.csdn.net/weixin_44226181/article/details/126845451