对象得定义与使用(动力节点老杜)

news2024/11/18 13:30:03

对象思想

1.什么是面向过程,什么是面向对象?
在这里插入图片描述
换而言之,==面向对象思想实际就是将整体分成一个个独立的单元,每个单元都有自己得任务和属性,所有单元结合在一起完成一个整体。==如果某个单元出现了问题还可以及时处理,这样的优点就是各单元间互不干扰。
面向过程就好比把事情的处理看作一个整体,一个整体是一个单元,比如串联电路思想。
面向对象三大特征:

  • 封装、
  • 继承、
  • 多态

类与对象

在这里插入图片描述
在这里插入图片描述

变量回顾
变量:

  • 局部变量 只在方法体中有效

  • 成员变量
    分为两类:静态变量和实例变量

    实例变量就是对象的属性

类与对象

一、类

  • 类的定义与使用
  1. 定义类的语法格式:
    [修饰符列表] class 类名{
    *** 类体 = 属性 + 方法;
    *** // 属性(实例变量),描述的是状态
    *** // 方法,描述的是行为动作
    }

  2. 为什么要定义类?
    因为要通过类实例化对象。有了对象,让对象和对象之间协作起来形成系统。

  3. 一个类可以实例化多个java对象。(通过一个类可以造出多个java对象。)

  4. 实例变量是一个对象一份,比如创建3个学生对象,每个学生对象中应该都有name变量。

public class Student {

    // 属性:姓名,年龄,性别,他们都是实例变量

    // 姓名
    String name;

    // 年龄
    int age;

    // 性别
    boolean gender;
}

上述代码是否发现了个问题;
变量没有赋值唉!!!!!!
请注意:
没有赋值不能使用的变量是局部变量
成员变量如果没有手动赋初始值的话,系统会自动给成员变量赋其默认值。
5.成员变量赋默认值

数据类型        默认值
----------------------
byte            0
short           0
int             0
long            0L
float           0.0F
double          0.0
boolean         false
char            \u0000
引用数据类型      null

2.对象
依据定义:类是我们定义的、对 对象 特征总结形成的模板,是个抽象概念。因此我们需要创建实例也就是对象,才能真正的完成工作。
就好比宠物都会吃饭,你说宠物这个标签,标签只是个概念,不会吃饭,会吃饭的是真正的宠物,比如说猫和狗。

对象的定义语法:
new 类名();

但是,对象是存储在堆这个内存空间的,而Java语法规定程序员不能直接对堆内的内容进行访问,所以就诞生了引用,C++中的指针。
引用和对象要区分开。对象在JVM堆当中。引用是保存对象地址的变量。
引用就是存储对象在堆内存中地址的变量,这个变量应该是引用类型的变量。表示如下:

平时为了方便,就把存储对象地址的局部变量叫做对象

Student s1 = new Student();

3.实例变量的访问语法:
对象名.变量名;
相当于对象的变量
示例代码:

package com.powernode.javase.oop01;

public class StudentTest01 {
    public static void main(String[] args) {
        // 局部变量
        int i = 10;
        Student s1 = new Student();
        System.out.println("姓名:" + s1.name); // null
        System.out.println("年龄:" + s1.age); // 0
        System.out.println("性别:" + (s1.gender ? "男" : "女"));

        // 修改对象的属性(修改变量的值,给变量重新赋值)
        s1.name = "张三";
        s1.age = 20;
        s1.gender = true;

        System.out.println("姓名:" + s1.name); // 张三
        System.out.println("年龄:" + s1.age); // 20
        System.out.println("性别:" + (s1.gender ? "男" : "女")); // 男

        // 再创建一个新对象
        Student s2 = new Student();

        // 访问对象的属性
        System.out.println("姓名=" + s2.name); // null
        System.out.println("年龄=" + s2.age); // 0
        System.out.println("性别=" + (s2.gender ? "男" : "女"));

        // 修改对象的属性
        s2.name = "李四";
        s2.age = 20;
        s2.gender = false;

        System.out.println("姓名=" + s2.name); // 李四
        System.out.println("年龄=" + s2.age); // 20
        System.out.println("性别=" + (s2.gender ? "男" : "女")); // 女


    }
}

上述代码的内存图表示如下:

在这里插入图片描述
4.实例方法的定义与访问

定义:

public 返回值类型 方法名(形式参数列表){
**方法体
}

行为又叫实例方法,不再用static修饰符的原因:static修饰符,代表由类名进行调用,但是对于定义对象的抽象类来说,不能用此语法,因为他是个抽象的概念,不是实例。

实例方法的调用:

对象名.方法名();

5.不可以用类名来调用实例对象和实例方法
1.类是一个抽象的概念,不是一个具体的事物。
2.对象的信息存储在堆内存中,而堆内存不能被程序员直接访问,必须借助存储对象地址的变量来访问,类名不可以。

6.当引用为null时候:
示例代码如下:

package com.powernode.javase.oop03;
/**
 * 宠物类
 */
public class Pet {
    // 属性:状态
    // 名字
    String name; // 实例变量
    // 出生日期
    String birth;
    // 性别
    char sex;
    // 方法:行为动作
    // 吃
    public void eat(){ // 实例方法
        System.out.println("宠物在吃东西");
    }
    // 跑
    public void run(){
        System.out.println("宠物在跑步");
    }
}

package com.powernode.javase.oop03;
public class PetTest02 {
    public static void main(String[] args) {
        // 创建宠物对象
        Pet dog = new Pet();
        // 给属性赋值
        dog.name = "小黑";
        dog.birth = "2012-10-11";
        dog.sex = '雄';
        // 读取属性的值
        System.out.println("狗狗的名字:" + dog.name);
        System.out.println("狗狗的生日:" + dog.birth);
        System.out.println("狗狗的性别:" + dog.sex);
        //当引用为null
        dog = null;

        // ==注意:引用一旦为null,表示引用不再指向对象了。但是通过引用访问name属性,**编译可以通过。**==
        // 运行时会出现异常:**空指针异常**。NullPointerException。这是一个非常著名的异常。
        // 为什么会出现空指针异常?因为运行的时候会找真正的对象,如果对象不存在了,就会出现这个异常。
        //System.out.println("狗狗的名字:" + dog.name);
        // 会出现空指针异常。
        dog.eat();
        // 会出现空指针异常。
        //dog.run();
    }
}

原理如下图所示:
在这里插入图片描述

赋值与参数传递的底层逻辑

int i = 10;
int j = i;//j = 10;

赋值的原理:这不代表i和j在局部变量表中共用一个存储10的存储空间。
步骤:
1.先执行赋值符号左边,读取i的值,并将其赋值一份存储在操作数列表中。
2.开辟一个内存空间,空间名字叫j,并放在局部变量列表中。
3.将操作数列表中的10存储在内存空间j中;

参数传递其实就是将实参的值赋值给方法形参变量的过程。
传递的参数类型分两类:基本数据类型 引用数据类型

判断以下程序的输出结果是多少:


package com.powernode.javase.oop04;

public class User {
    int age;
}

package com.powernode.javase.oop04;

/**
 * 面试题:判断该程序的输出结果
 */
public class ArgsTest01 {
    public static void main(String[] args) {
        int i = 10;
        // 调用add方法的时候,将i传进去,实际上是怎么传的?将i变量中保存值10复制了一份,传给了add方法。
        add(i);
        System.out.println("main--->" + i); // 10
    }
    public static void add(int i){ // 方法的形参是局部变量。
        i++;
        System.out.println("add--->" + i); // 11
    }
}

解析如下图:传的只是值,而这两个变量虽然名字一样,但是所属的方法不一样。
在这里插入图片描述


package com.powernode.javase.oop04;

public class User {
    int age;
}


package com.powernode.javase.oop04;

/**
 * 面试题:分析以下程序输出结果
 */
public class ArgsTest02 {
    public static void main(String[] args) {
        User u = new User();
        u.age = 10;
        // u是怎么传递过去的。实际上和i原理相同:都是将变量中保存的值传递过去。
        // 只不过这里的u变量中保存的值比较特殊,是一个对象的内存地址。
        add(u);
        System.out.println("main-->" + u.age); // 11
    }
    public static void add(User u) { // u是一个引用。
        u.age++;
        System.out.println("add-->" + u.age); // 11
    }
}

而这个输出的结果是11,因为参数传递的是值,可是两个变量操作的都是同一个对象,因此会发生该变,解析如下图:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1492306.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

博客等级怎么查看?博客等级怎么快速上升?博客等级升级要求是什么?如何增加博客等级上升的积分?等级权益有什么?

博客等级怎么查看?博客等级怎么快速上升?博客等级升级要求是什么?如何增加博客等级上升的积分?等级权益有什么? 一、博客等级怎么查看?二、博客等级怎么快速上升?2.1 博客等级升级要求是什么&am…

矩阵错题本

《1800》 1 逗号中间全是0啊 2 代入转置即可证明 3 只是凭借感觉 4 线性代数真的是细节狂魔 经过若干次初等变换,秩相等 5 P1的逆为啥是P1 6 越排后的矩阵变换越排前 对角线矩阵的逆矩阵,除了对角线元素,全换号 7 根据题设给出来的矩阵求…

[Angular 基础] - routing 路由(下)

[Angular 基础] - routing 路由(下) 之前部分 Angular 笔记: [Angular 基础] - 自定义指令,深入学习 directive [Angular 基础] - service 服务 [Angular 基础] - routing 路由(上) 使用 route 书接上回,继续折腾 routing 按照最初的 wi…

计算机设计大赛 深度学习的动物识别

文章目录 0 前言1 背景2 算法原理2.1 动物识别方法概况2.2 常用的网络模型2.2.1 B-CNN2.2.2 SSD 3 SSD动物目标检测流程4 实现效果5 部分相关代码5.1 数据预处理5.2 构建卷积神经网络5.3 tensorflow计算图可视化5.4 网络模型训练5.5 对猫狗图像进行2分类 6 最后 0 前言 &#…

阿里云打响“算力平价”第一枪

大数据产业创新服务媒体 ——聚焦数据 改变商业 2月29日,阿里云宣布了史上最大力度的一次降价,平均降价幅度超过20%,最高降幅达55%。通过此次降价,阿里云的核心云计算产品价格都击穿了全网最低价。 这次降价,涉及100多…

HTML静态网页成品作业(HTML+CSS)——我的家乡北京网页设计制作(7个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示1、首页2、子页13、子页24、子页35、子页46、子页57、子页6 三、代码目录四、网站代码HTML部分代码CSS部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS&#xff0…

web学习笔记(二十五)BOM

目录 1.BOM概述 1.1什么是BOM 1.2BOM的构成 2.windom常用属性汇总 3.window常用方法汇总 4.window对象常见事件汇总 5.this总结: 1.BOM概述 1.1什么是BOM BOM(Browser Object Model)就是浏览器对象模型(整个浏览器),他的核心对象是window,BOM缺…

探索 PostgreSQL 的高级数据类型 - 第 1 部分

数组和枚举 PostgreSQL 因其可扩展性和多功能性而备受欢迎,除了传统的整数和字符串之外,它还提供了多种数据类型。其中,包括数组和枚举,其为开发者提供了高级的数据建模能力。本文中,我们将深入研究这些复杂的数据类型…

CSS常用五类选择器,附面试题

学习路线 第一阶段:网页制作 HTML:常用标签,锚点,列表标签,表单标签,表格标签,标签分类,标签语义化,注释,字符实体 CSS:CSS介绍,全局…

mac报错:zsh: command not found: npm

1、问题概述? 在mac系统中使用npm命令的时候,mac os报错提示: zsh: command not found: npm 一般出现发这种情况的原因时没有安装npm,而npm这命令时集成在nodejs中的,所以安装nodejs就可以了。 2、解决办法 本质就是需要安装…

论文笔记:Code Llama: Open Foundation Models for Code

导语 Code Llama是开源模型Llama 2在代码领域的一个专有模型,作者通过在代码数据集上进行进一步训练得到了了适用于该领域的专有模型,并在测试基准中超过了同等参数规模的其他公开模型。 链接:https://arxiv.org/abs/2308.12950机构&#x…

HarmonyOS创建项目和应用—设置数据处理位置

项目和应用介绍 关于项目 项目是资源、应用的组织实体。资源包括服务器、数据库、存储,以及您的应用、终端用户的数据等。在您使用部分服务时,您是数据的控制者,数据将按照您设置的数据处理位置来存储在指定区域。 通常,您不需…

【C++】继续学习 string类 吧

开始使用 string类 吧 1 继续学习1.1 扩容机制1.2 string类对象的访问及遍历操作1.3 string类对象的修改操作1.4 其他一些成员函数 2 实践解决问题:Thanks♪(・ω・)ノ谢谢阅读!!!下一篇文章见&…

计算机网络(4)----局域网与广域网

目录 1.局域网 (1)局域网拓扑结构 (2)局域网的传输介质 (3)局域网介质访问控制方法 (4)局域网的分类 (5)IEEE 802标准 (6)MAC子层与LLC子层 (7)常用的局域网技术---以太网 (8)以太网传输介质与拓扑结构的发展 (9)常用的以太网---10BASE-T以太网 (10)适配器与MAC地址…

数据库 与 数据仓库

OLTP 与 OLAP OLTP(On Line Transaction Processing,联机事务处理) 系统主要针对具体业务在数据库联机下的日常操作,适合对少数记录进行查询、修改,例如财务管理系统、ERP系统、交易管理系统等。该类系统侧重于基本的、日常的事务处理&#…

Batch Normalization和Layer Normalization和Group normalization

文章目录 前言一、Group normalization二、批量规范化(Batch Normalization)三、层规范化(Layer Normalization) 前言 批量规范化和层规范化在神经网络中的每个批次或每个层上进行规范化,而GroupNorm将特征分成多个组,并在每个组内…

【AGI】大模型 深度学习入门学习路径

【AGI】大模型 深度学习入门学习路径 1. 深度学习入门学习路径可以从以下几个方面入手:2. 深度学习中的基本概念和算法有哪些?3. Python在深度学习中的应用和库有哪些?4. PyTorch的基本计算结构和应用教程推荐?5. 如何通过实战项目加深对深度学习模型训练的理解?6. 参考资…

Linux运维:在线/离线安装Telnet客户端和Telnet服务

Linux运维:在线/离线安装Telnet客户端和Telnet服务 前言1.1 在线安装Telnet1.2 离线安装Telnet1.3 Telnet服务有关的命令 💖The Begin💖点点关注,收藏不迷路💖 前言 Telnet是一种用于远程登录到其他计算机的协议&…

springboot+jsp汽车配件管理系统idea maven 项目lw

springbootweb汽车配件销售业绩管理系统服务于汽车配件公司业务,实现了客户管理,主要负责对客户相关数据的增删改查方面、渠道管理,主要对渠道信息也就是设备的供应商渠道信息进行管理、项目管理,主要是一些项目信息的记录与整理、销售数据管…

深入探索Docker数据卷:实现容器持久化存储的完美方案(下)

🐇明明跟你说过:个人主页 🏅个人专栏:《Docker入门到精通》 《k8s入门到实战》🏅 🔖行路有良友,便是天堂🔖 目录 四、Docker数据卷的高级管理 1、数据卷的生命周期管理 2、数据…