首页 > 编程语言 >Java中的对象到底是什么

Java中的对象到底是什么

时间:2023-10-03 17:56:26浏览次数:74  
标签:std Java 到底 对象 多态 内存 new 引用

对象是现实世界中的一切物体(实体,或能够定义的东西)

Smalltalk是第一个成功的面向对象的语言
在编程世界中,对象通过类来实例化;同一个类型的对象可以接受相同的消息

状态+行为+标识=对象

每个对象在内存中都会有一个唯一的地址。
对象学习内容:组合,继承,多态,封装。

类和对象

类和对象时面向对象中最多讨论的目标
类是一个模板,对象才是类可以使用的实例,先有了类再有对象。

举个例子:
类就相当于是一个汽车的图纸,罗列出汽车的功能和特性。
对象就是一个真正的可以使用驾驶的汽车(实体)。

类一般有两个组成:

  1. 成员属性(Field):一个人的名字、年龄、等等可以描述不同人的特征叫属性 (有什么)
  2. 操作方法(Method):这个人可以吃喝拉撒,跳舞、运动。(能做什么)

有了类之后要创造对象,有以下两种格式:

  1. 声明并且实例化对象 类名称 对象名称 = new 类名称();

  2. 分步骤进行上述步骤

    类名称 对象名称 = 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这个问题是指创建一个堆内存所出现,并且此问题只会出现在引用对象类型

对象引用分析

类本身就是引用数据类型,引用数据类型会涉及到内存的引用传递:同一块堆内存可以被不同的栈内存所指向,也可以更换指向。
引用传递可以直接在主方法之中定义,也可以通过方法实现引用处理。

利用方法传递引用处理:

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

标签:std,Java,到底,对象,多态,内存,new,引用
From: https://www.cnblogs.com/meloo/p/17741392.html

相关文章

  • 如何理解Java 中只有值传递,没有引用传递
    引用此文来自无法消失的对象-值传递和引用传递开始直接上代码classPerson{Stringname;intmoney;}classClient{publicstaticvoidmain(String[]args){//CreateapersonnamedBobandhehasnomoney.Personperson=new......
  • odoo中用javascript调用model中定义好的方法
    odoo中如果前端界面要调用后台model中写好的方法,很简单。使用do_action即可,比如要调用改res.users的默认语言后执行的方法odoo.define('switch_language.SwitchLanguageMenu',function(require){"usestrict";varModel=require('web.Model');varsession......
  • mybatis出现错误 java lang NumberFormatException:For input string:A1
    使用mybatis,当使用map传参并且在iftest判断时使用map中所传的参数时,可能会产生如题的报错,具体报错信息见下图:分析这个错误,自己调试也找过度娘,“坚信”自己代码并没问题,但是问题始终无法解决。最后在一个帖子看到说iftest判断时,传入的参数跟匹配的值类型必须一致,于是调整了自己代......
  • JavaScript(一)
    javascript的组成:ECMAScript和WebAPIs(DOM、BOM) 注释:ctrl+/单行注释shift+alt+a块注释 js的输入输出语法:输出document.weite("hello")//可以带标签,在body内输出alert('alert')//弹窗警告console.log("hello")//控制台输出​输入letname=prompt("你叫:")​//aler()和pro......
  • java---多线程[(重点)上]
    15.1概念以前写的程序都是单线程,main方法程序称为主线程,主线程的结束所有的子线程都会跟着结束。多线程就代表着一个程序可以去做多件事情。线程:一个程序去做多件事情,每件事情由一个线程去完成。进程:一个进程由多个线程组成,一个进程至少有一个线程。一个进程就是一个应用程序多线......
  • java——mysql随笔——运维——日志
    黑马:https://www.bilibili.com/video/BV1Kr4y1i7ru?p=154&vd_source=79bbd5b76bfd74c2ef1501653cee29d6 csdn:https://blog.csdn.net/weixin_44904239/article/details/130379510 ================================================================================......
  • java 通过行为参数化传递代码,来解决不断增长的需求
    1,通过定义不同的谓词接口来区分不同的苹果的重量,如果后续有更多的需求,只需要添加更多的谓词即可packageorg.example;importjava.util.ArrayList;importjava.util.List;enumColor{RED,GREEN,YELLOW}classApple{privateIntegerweight;private......
  • Java的HashMap用法
    一、HashMap了解HashMap是Java中常用的集合类之一,它实现了Map接口并继承自AbstractMap类。HashMap使用哈希表来存储键值对,通过将键映射为哈希码来进行高效的插入、查找和删除操作。以下是HashMap的常见用法和特点:键值对:HashMap允许存储任意类型的键和值。可以通过键来查......
  • python小技巧: 对象字段文档注释, 一行分拆多行
    对象字段文档注释python类和函数的文档注释比较常用,只需要在类和函数下面增加'''即可,就可以在引用的地方查看注释内容了.但是对于类的字段,怎么增加注释呢?只需要像下面即可:classTradeRecordData: #H.Read'''一次完整的交易记录.包括买入及卖出''' #H.Readd......
  • java断点下载文件(整合多线程)
    技术介绍:断点下载指的是在文件下载过程中,如果下载中断或失败,比如下载到一半的时候停电了、断网了、不小心退出下载界面了等等,下一次进入下载页面可以从中断或失败的位置继续下载,而无需重新开始下载整个文件。 (注意:本文通过本地文件的拷贝来模拟文件传输的断点过程) 核心想法......