Java中的对象到底是什么
对象是现实世界中的一切物体(实体,或能够定义的东西)
Smalltalk是第一个成功的面向对象的语言
在编程世界中,对象通过类来实例化;同一个类型的对象可以接受相同的消息
状态+行为+标识=对象
每个对象在内存中都会有一个唯一的地址。
对象学习内容:组合,继承,多态,封装。
类和对象
类和对象时面向对象中最多讨论的目标
类是一个模板,对象才是类可以使用的实例,先有了类再有对象。
举个例子:
类就相当于是一个汽车的图纸,罗列出汽车的功能和特性。
对象就是一个真正的可以使用驾驶的汽车(实体)。
类一般有两个组成:
- 成员属性(Field):一个人的名字、年龄、等等可以描述不同人的特征叫属性 (有什么)
- 操作方法(Method):这个人可以吃喝拉撒,跳舞、运动。(能做什么)
有了类之后要创造对象,有以下两种格式:
-
声明并且实例化对象
类名称 对象名称 = new 类名称();
-
分步骤进行上述步骤
类名称 对象名称 = null; //声明对象 对象名称 = new 类名称(); //实例化对象
组合
可以把创建好的类作为另一个类的成员变量来使用
new类——————(原有的类1、原有的类2...)
继承
如果多个类的某个部分的功能相同,那么可以抽象出一个类出来,把他们的相同 部分都放到父类里,让他们都继承这个类。
多态(此概念是继承的衍生)
例子:有一个 图形类
三角形类 和 长方形类 继承 图形类
在main中可以在图形下创造三角形和长方形
Shape shape1 = new Tiangle(); //new一个三角形对象 Shape shape2 = new rectangle();//new一个长方形对象
上述例子虽然可以帮助理解,但是我们还需要更专业的说法:多态的概念比较简单,就是同一操作作用于不同的对象,并产生不同的执行结果。
由此可见,多态应该是一种运行时的状态
封装
多态,继承,封装是面向对象的三大特性,我们一般放在一起来说:
对于封装,我们先举个例子
当我们玩手机的时候,通常都是在屏幕进行点击和滑动,对手机实现控制。我们并不需要去了解为什么点击屏幕上的按钮就会有反应,或者为什么手机屏幕可以显示不同的画面。
我们只用知道基本操作,不用进行内部研究,说明手机的内部已经被封装好了。
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。
封装的好处有:
- 隐藏内部细节,方便修改和实现
- 只能通过规定的方法访问数据
对象内存分析
类在Java中属于引用数据类型,引用数据类型使用难点在于内存的管理。
如果要进行内存分析,首先给出两块常用的内存空间
堆内存:对象的具体信息,堆内存通过关键字new来开辟空间。
栈内存:保存的是一快堆内存的地址,通过堆内存找到对象。
所有对象在调用类的属性和方法都必须在完成实例化之后,若 没有 进行实例化,则会出先以下报错:
Exception in thread "main" java.lang.NullPointerException: Cannot assign field "name" because "<local1>" is null at JavaDemo.main(JavaDemo.java:14)
NullPointerException
这个问题是指创建一个堆内存所出现,并且此问题只会出现在引用对象类型
了解更多关于对象内存分析 看这篇:Java之对象内存分析
对象引用分析
类本身就是引用数据类型,引用数据类型会涉及到内存的引用传递:同一块堆内存可以被不同的栈内存所指向,也可以更换指向。
引用传递可以直接在主方法之中定义,也可以通过方法实现引用处理。
利用方法传递引用处理:
public class JavaDemo {
public static void main(String []args){
Student std = new Student();
std.name = "Melo";
std.age = 18;
std.stdNum = 100001;
std.subject = "JAVA";
change(std); //方法的引用 相当于Student std = temp;
std.show();
}
public static void change(Student temp){
temp.age = 99;
}
}
运行结果,年龄age应该为99
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律