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

对象思想

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); // nullSystem.out.println("年龄:" + s1.age); // 0System.out.println("性别:" + (s1.gender ? "男" : "女"));// 修改对象的属性(修改变量的值,给变量重新赋值)s1.name = "张三";s1.age = 20;s1.gender = true;System.out.println("姓名:" + s1.name); // 张三System.out.println("年龄:" + s1.age); // 20System.out.println("性别:" + (s1.gender ? "男" : "女")); // 男// 再创建一个新对象Student s2 = new Student();// 访问对象的属性System.out.println("姓名=" + s2.name); // nullSystem.out.println("年龄=" + s2.age); // 0System.out.println("性别=" + (s2.gender ? "男" : "女"));// 修改对象的属性s2.name = "李四";s2.age = 20;s2.gender = false;System.out.println("姓名=" + s2.name); // 李四System.out.println("年龄=" + s2.age); // 20System.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);//当引用为nulldog = 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.mzph.cn/news/723992.shtml

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

相关文章

比肩Gen-2,全新开源文生视频模型

著名开源平台Stability.ai在官网宣布,推出全新文生视频的扩散模型Stable Video Diffusion,已开源了该项目并公布了论文。 据悉,用户通过文本或图像就能生成高精准,14帧和25帧的短视频。目前,Stable Video Diffusion处…

回溯算法02-组合总合III(Java)

2.组合总合III 题目描述 找出所有相加之和为 n 的 k 个数的组合,且满足下列条件: 只使用数字1到9每个数字 最多使用一次 返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次,组合可以以任何顺序返回。 示例 1: 输入: k 3,…

[Linux]如何理解kernel、shell、bash

文章目录 概念总览kernelshell&bash 概念总览 内核(kernel) ,外壳(shell) ,bash kernel kernel是指操作系统中的核心部分,用户一般是不能直接使用kernel的。它主要负责管理硬件资源和提供系统服务,如内存管理、进程管理、文件…

Pytest测试技巧之Fixture:模块化管理测试数据!

在 Pytest 测试中,有效管理测试数据是提高测试质量和可维护性的关键。本文将深入探讨 Pytest 中的 Fixture,特别是如何利用 Fixture 实现测试数据的模块化管理,以提高测试用例的清晰度和可复用性。 什么是Fixture? 在 Pytest 中…

【考研数学】武忠祥各阶段用书搭配+学习包

25考研数学全流程规划!别等到二战了才知道这样学 本人属于基础很差相当于是零基础的考研党,经过一年备考成功上岸 中间花费了很多时间在考研数学备考信息检索上,写下这篇希望能帮助基础不好的学弟学妹们多节约一些时间复习! 25…

【PowerMockito:编写单元测试过程中原方法没有注入的属性在跑单元测试时出现空指针】

出错场景 下面这一步报空指针,但是因为没有注入,在测试类中无法使用Mock 解决 在执行方法前,加入以下代码 MemberModifier.field(ResourceServiceImpl.class,"zero").set(resourceService,"0");

网页打开慢,这锅该谁背?

一、背景 工作中扯皮说不可避免且非常常见的事情. 开发与产品、开发和测试、前端和后端都会产生扯皮现象。今天要聊的一个问题就是前后端之间的扯皮问题。 网页打开太慢或者点击了某个按钮发现数据很久才显示出来,这个锅谁背? 做开发不能无凭据地胡乱甩锅, 我们…

电子电气架构——汽车以太网诊断路由汇总

电子电气架构——汽车以太网诊断路由汇总 我是穿拖鞋的汉子,魔都中坚持长期主义的工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 人们会在生活中不断攻击你。他们的主要武器是向你灌输对自己的怀疑:你的价值、你的能力、你的潜力。他们往往会将…

python 蓝桥杯填空题

文章目录 字母数判断列名(进制问题)特殊日期大乘积星期几 字母数 由于是填空题,那么寻找的话,就直接让每一个位置都是A,通过计算看看是不是结果大于2022即可 判断列名(进制问题) 这道题目,我们可…

视频号带货究竟怎么做?老阳分享的项目怎么样?

在当今社会,随着互联网的快速发展,社交媒体已经成为人们日常生活中不可或缺的一部分。在这个背景下,视频号带货作为一种新兴的电商模式,逐渐崭露头角。许多人都想通过加入视频号带货行业来实现自己的财富自由。其中,老…

SPSS Statistics for Mac/Win:让数据说话,为决策赋能

在数字化时代,数据已成为决策的关键。为了从海量数据中提取有价值的信息,专业的统计分析软件不可或缺。IBM SPSS Statistics就是这样一款强大的工具,无论是Windows还是Mac用户,都能通过它轻松实现数据分析和决策支持。 一、SPSS …

从0到1入门C++编程——09 STL、string容器、vector容器、deque容器

文章目录 一、标准模板库STL二、容器算法迭代器应用1、遍历容器中整型数据2、遍历容器中自定义数据类型3、容器中嵌套容器 三、string容器1、构造函数2、赋值操作3、字符串拼接4、查找和替换5、字符串比较6、字符访问与存取7、插入和删除8、子串 四、vector容器1、构造函数2、赋…

游戏力:竞技游戏设计实战教程

💂 个人网站:【 海拥】【神级代码资源网站】【办公神器】🤟 基于Web端打造的:👉轻量化工具创作平台💅 想寻找共同学习交流的小伙伴,请点击【全栈技术交流群】 游戏力:竞技游戏设计实战教程 引言…

GBU3010-ASEMI火牛适配器专用整流桥GBU3010

编辑:ll GBU3010-ASEMI火牛适配器专用整流桥GBU3010 型号:GBU3010 品牌:ASEMI 封装:GBU-4 最大重复峰值反向电压:1000V 最大正向平均整流电流(Vdss):30A 功率(Pd):大功率 芯片个数&…

前端运算符比较与计算中的类型转换,运算规则

题目: 下面表达式的值分别都是什么(类型转换) 0 0 0 2 true 2 false false false false 0 false undefined false null null undefined\t\r\n 0JS中的原始类型有哪些 原始值类型就是 存储的都是值,没有函数可以调用的。…

【C++】二叉树进阶面试题(下)

目录 6. 根据一棵树的前序遍历与中序遍历构造二叉树 题目 分析 代码 7. 根据一棵树的中序遍历与后序遍历构造二叉树 题目 分析 代码 8. 二叉树的前序遍历,非递归迭代实现 题目 分析 代码 9. 二叉树中序遍历 ,非递归迭代实现 题目 分析 …

RLNNA-DBSCAN聚类

RLNNA-DBSCAN聚类 RLNNA算法(基于强化学习的神经网络优化算法)是一种性能较佳的优化算法。DBSCAN聚类算法(密度聚类算法)是一种基于密度的聚类算法,其主要思想是通过寻找样本点周围的密度可达关系来聚类数据。 使用RL…

自动化专家来谈谈Selenium中的时间等待

在 Selenium 中,时间等待指在测试用例中等待某个操作完成或某个事件发生的时间。Selenium 中提供了多种方式来进行时间等待,包括使用 ExpectedConditions 中的 presence_of_element_located 和 visibility_of_element_located 方法等待元素可见或不可见&…

小白如何选择阿里云服务器配置?小白不怕

阿里云服务器配置怎么选择?CPU内存、公网带宽和系统盘怎么选择?个人开发者或中小企业选择轻量应用服务器、ECS经济型e实例,企业用户选择ECS通用算力型u1云服务器、ECS计算型c7、通用型g7云服务器,阿里云服务器网aliyunfuwuqi.com整…

事件流、事件捕获、事件冒泡、事件委托

一、事件流 事件流指的是事件完整执行过程中的流动路径,分为捕获阶段、冒泡阶段。如上图 二、事件捕获 当一个元素的事件被触发时,会从DOM的根元素开始,依次调用同名事件(从外到里,从父到子)。 DOM.addEve…