• java基础之对象


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

    操作对象

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

    String s;
    • 1

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

    String s = new String("abc");
    • 1

    基本数据类型

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

    基本类型大小范围
    boolean
    char16bits 2字节0~2^16^ -1
    byte8bits 1字节-2^7^ ~2^7^-1
    short16bits 2字节-2^15^ ~2^15^-1
    int32bits 4字节-2^31^ ~2^31^-1
    long64bits 8字节-2^63^ ~2^63^-1
    float32bits 4字节-2^31^ ~2^31^-1
    double64bits 8字节-2^63^ ~2^63^-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 {

    }
    • 1

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

    MyClass myClass = new MyClass();
    • 1

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

    多态

    实现多态的机制是父类引用指向子类对象,而程序调用的方法是在运行期才动态绑定的,是属于运行期的行为,而不是编译期的行为

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

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

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

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

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

    本文由 mdnice 多平台发布

  • 相关阅读:
    【EXCEL拦路虎】解决一些常遇到的excel问题
    一卷到底,大明哥带你横扫 Netty
    python之 @staticmethod 和 @classmethod
    【译】.NET 7 中的性能改进(一)
    TRex学习之旅六
    java计算机毕业设计web家庭财务管理系统MyBatis+系统+LW文档+源码+调试部署
    Linux自动化任务管理以及常见定时命令示例
    Python 中的模糊字符串匹配
    使用Softing为西门子工业边缘开发的edgePlug软件简化了设备与应用程序的连接
    使用 OpenTelemetry 构建 .NET 应用可观测性(4):ASP.NET Core 应用中集成 OTel
  • 原文地址:https://blog.csdn.net/Lxn2zh/article/details/133512792