万事万物皆对象

系列文章目录

第一章 万事万物皆对象
第二章 java构造器
第三章 java访问权限
第四章 java初始化
第五章 java继承
第六章 java重载与重写
第七章 java接口和抽象类
第八章 java数组
第九章 java内部类
第十章 java时间操作
第十一章 final关键字
第十二章 java字符串
第十三章 java异常
第十四章 java泛型
第十五章 java IO操作
第十六章 java NIO操作
第十七章 java zip压缩
第十八章 java反射
第十九章 java反射之Type接口
第二十章 java8流式操作
第二十一章 java8函数式编程



原文链接 https://zhhll.icu/2020/java基础/面向对象/1.java基础之对象/

面向对象编程的三个特性:封装、继承、多态

万事万物皆对象

所有编程语言都会操作内存中的元素,java通过对象的引用来操作对象
创建一个String引用,代码示例:

String s;

上面的代码只是创建了一个String对象的引用,变量s没有进行初始化,并没有指向任何对象。java中使用new来创建对象,代码示例:

String s = new String("abc");

基本数据类型

boolean、char、byte、short、int、long、float、double这些都是基本数据类型,基本数据类型不需要使用new关键字来创建对象,直接存储值,存储在栈内存内。java直接确定了每种基本类型的内存占用大小。

基本类型大小范围
boolean
char16bits 2字节0~2^16 -1
byte8bits 1字节-27~27-1
short16bits 2字节-215~215-1
int32bits 4字节-231~231-1
long64bits 8字节-263~263-1
float32bits 4字节-231~231-1
double64bits 8字节-263~263-1

包装类

有时候需要将int这样的基本数据类型转换为对象,而每个基本数据类型都有一个与之对应的类,这些类被称为包装类

位运算

位运算符包含有

按位或|a|b,表示两个数据对应位都为0,则结果该位为0,否则为1
按位与&a&b,表示两个数据对应位都为1,则结果该位为1,否则为0
按位非~~a,表示若a的对应位为0,则结果该位为1,否则为0
按位异或^a^b,表示a,b两个数据对应位相同,则结果该位为0,否则为1(如果 a^b的结果为c,那么 c^b的结果就是a,可以使用异或来进行变量值互换操作 )

数据存储

内存分配

  • 寄存器 位于CPU内部,最快的存储区域
  • 栈内存 存在于RAM(随机访问存储器)内存区域内,可通过栈指针获得处理器的直接支持。栈指针下移分配内存,上移释放内存,速度仅次于寄存器。创建程序时,java系统必须准确地知道栈内保存的所有项的生命周期。对象引用存储在栈内存中,但对象保存在堆内存中。占中存储方法帧和局部变量。栈比堆小,也不会在多个线程之间共享,而堆被整个JVM的所有线程共享
  • 堆内存 也存在RAM(随机访问存储器),所有java对象都存在其中。与栈内存不同,编译器不需要知道对象必须在堆内存上停留多长时间。创建一个对象时,只需new关键字实例化对象,执行代码时,会自动在堆中进行内存分配。代价是:分配和清理堆内存要比栈内存需要更多的时间。
  • 常量存储 常量值直接放在程序代码中,因为他们永远不会改变
  • 非RAM存储 数据完全存在于程序之外,在程序未运行以及脱离程序控制后依然存在
    两个示例:
    • 序列化对象:对象被转换为字节流,通常被发送到另一台机器
    • 持久化对象:对象被放置在磁盘上,即使程序终止,数据依然存在。这些存储的方式是将对象转存于另一个介质中,并在需要时恢复成常规的、基于RAM的对象。Java为轻量级持久化提供了支持。

创建类

java程序中的基本单位是类,类的两个基本成员时变量和方法

使用class关键字来描述一种新的对象。在class关键字的后面紧跟类的名称。

class MyClass {

}

上例中,引入了一个新的类型,我们可以通过new关键字来创建一个这种类型的对象,创建对象的过程称为类的实例化

MyClass myClass = new MyClass();

在方法中可以存在两种元素:方法和字段

多态

实现多态的机制是父类或接口定义的引用变量可以指向子类或具体实现类的实例变量,而程序调用的方法是在运行期才动态绑定的

多态主要分为引用多态和方法多态

  • 引用多态:父类引用指向子类对象,也可以指向本类对象

  • 方法多态:创建本类对象时,方法调用为本类方法;创建子类对象时,方法调用为子类重写的方法或者子类继承的方法

多态的必要条件:继承,重写

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
从数据建模的角度来抽象汽车、车轮和奥迪,我们可以使用UML(统一建模语言)来表示。 首先,我们需要定义一个顶层的抽象类或接口“对象”,它可以作为所有对象的基类。然后可以创建一个子类“汽车”,表示一个实际的汽车。汽车可以具有属性,例如品牌、型号、颜色等,可以使用类的属性表示。此外,汽车可以有方法,例如启动、加速、停止等,可以使用类的操作表示。 接下来,我们可以创建另一个子类“车轮”,表示汽车所需的轮子。车轮也可以具有属性,例如材质、尺寸等,和方法,例如旋转、停止等。同时,车轮与汽车之间可能存在关联关系,因为一个汽车通常需要多个轮子,可以使用关联关系表示。 最后,我们可以创建一个具体子类“奥迪”,表示一个奥迪汽车对象。奥迪继承自汽车类,因此具有汽车类的所有属性和方法。同时,奥迪可能还有一些特殊的属性或方法,例如型号细节、特殊功能等,可以在奥迪类中定义。 通过使用UML的类图表示法,我们可以清晰地展示这些对象及其之间的关系。在类图中,可以使用箭头表示关联关系,使用实线表示继承关系。 总结起来,从数据建模的角度,我们可以通过使用UML的类图来抽象汽车、车轮和奥迪。在类图中,汽车、车轮和奥迪可以作为类,具有属性和方法,它们之间可以通过关联关系进行连接。这种抽象方法可以帮助我们更好地理解和管理系统中的对象

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

拾光师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值