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

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

了解更多关于对象内存分析 看这篇: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

Java中的对象到底是什么的更多相关文章

  1. 浅谈Java中的对象和引用

    浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起 ...

  2. 浅谈Java中的对象和对象引用

    浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起 ...

  3. Java中的String到底占用多大的内存空间?你所了解的可能都是错误的!!

    写在前面 最近小伙伴加群时,我总是问一个问题:Java中的String类占用多大的内存空间?很多小伙伴的回答着实让我哭笑不得,有说不占空间的,有说1个字节的,有说2个字节的,有说3个字节的,有说不知道 ...

  4. Java中的线程到底有哪些安全策略

    摘要:Java中的线程到底有哪些安全策略呢?本文就为你彻底分析下! 本文分享自华为云社区<[高并发]线程安全策略>,作者:冰 河 . 一.不可变对象 不可变对象需要满足的条件 (1)对象创 ...

  5. 【译】Java中的对象序列化

    前言 好久没翻译simple java了,睡前来一篇. 译文链接: http://www.programcreek.com/2014/01/java-serialization/ 什么是对象序列化 在 ...

  6. java中直接打印对象

    java中直接打印对象,会调用对象.toString()方法.如果没有重写toString()方法会输出"类名+@+hasCode"值,hasCode是一个十六进制数 //没有重写 ...

  7. 如何使用java中的对象

    使用java中的对象,分2步: 1.创建一个对象: 2.使用对象的属性和方法. 见下面的示例代码: package com.imooc; //1.定义一个类 public class Telphone ...

  8. Java中String对象的不可变性

    首先看一个程序 package reverse; public class Reverse { public static void main(String[] args) { String c1=n ...

  9. JAVA中JavaBean对象之间拷贝的方法

    JAVA中JavaBean对象之间的拷贝通常是用get/set方法,但如果你有两个属性相同的JavaBean或有大部分属性相同的JavaBean,有个更简便的方法,他们之间的拷贝可以通过copyPro ...

  10. Java中的对象池技术

    java中的对象池技术,是为了方便快捷地创建某些对象而出现的,当需要一个对象时,就可以从池中取一个出来(如果池中没有则创建一个),则在需要重复重复创建相等变量时节省了很多时间.对象池其实也就是一个内存 ...

随机推荐

  1. 2021-7-30 MySql进阶2

    创建临时表只需在table前面加temporary CREATE TEMPORARY TABLE mytable#创建临时表,在断开数据库连接时销毁 ( ID INT NOT NULL, userna ...

  2. oracle 11g手工建库步骤(初学者)

    要建立的数据库ORACLE_SID=test1sys和system的密码为oracle1.建立相应的目录mkdir /u01/app/oracle/oradata/test1mkdir /u01/ap ...

  3. rest-apiV2.0.0升级为simplest-api开源框架生态之simplest-jpa发布

    什么是 simplest simplest 追求存粹简单和极致. 旨在为项目快速开发提供一系列的基础能力,方便用户根据项目需求快速进行功能拓展 不在去关心一些繁琐.重复工作,而是把重点聚焦到业务. 前 ...

  4. C#性能优化-树形结构递归优化

    前言 大家好,我是wacky,最近在工作中遇到一个有趣的问题,同事反馈说WPF中有一个树形结构的集合,在加载时会直接报堆栈溢出,一直没时间(懒得)看,导致很久了也没人解决掉.于是,组长就把这个&quo ...

  5. 关于package-lock.json

    前言 上篇文章我们了解了package.json,一般与它同时出现的还有一个package-lock.json,这两者又有什么关系呢?下面一起来了解吧. 介绍 package-lock.json 它会 ...

  6. WPF中非递归(无后台代码)动态实现TreeView

    在UI界面中,树形视图是比较常用的表示层级结构的方式,WPF中提供了TreeView控件.对于TreeView控件的基本使用已经有很多文章.大都是介绍如何在XAML中使用硬编码的固定信息填充Treev ...

  7. 使用Jenkins部署Git仓库微服务项目

    Jenkins是一个开源的.提供友好操作界面的持续集成(CI)工具.本文使用Jenkins自动构建git仓库中的微服务项目,包括Jenkins的安装,插件的安装:系统环境的配置:docker镜像构建的 ...

  8. 【升职加薪秘籍】我在服务监控方面的实践(7)-业务维度的redis监控

    大家好,我是蓝胖子,关于性能分析的视频和文章我也大大小小出了有一二十篇了,算是已经有了一个系列,之前的代码已经上传到github.com/HobbyBear/performance-analyze,接 ...

  9. plt.rcParams运行时修改全局配置参数

    plt.rcParams简单介绍 plt.rcParams即 "运行时配置参数"("runtime configuration parameters"),是运行 ...

  10. vue列表逐个进入过渡动画

    vue实现列表依次逐渐进入动画 利用vue 中transition-group 实现列表逐个进入动画效果 1.vue3代码, <template> <section class=&q ...