Java的面向对象

                                                                                           如果我们说另一种不同的语言,那么我们就会发觉一个有些不同的世界。

 

上一篇(https://blog.csdn.net/qq_36562999/article/details/81256482)中讲到Java是一门面向对象的语言。并尝试着用类比的方法解释了对象和类的关系,现在我们来深入的认识Java对象。

我们都知道Java是基于C++的,但是Java是一种更“纯粹”的面向对象程序设计语言。因为C++是一门混合型的语言,C++是一个面向对象与面向过程的混合型语言。Java是一种纯粹的面向对象的语言,关于这点似乎有人有异议:

       1.static修饰的变量是属于类的,而不属于任何对象

       2.Java中的基本类型也不属于对象

关于第一点,其实从JVM的角度分析,我们在创建一个类的实例对象时,会有一个相应的class对象被创建,这个对象包含我们定义的类的所有静态变量和静态方法。这说明static修饰的变量也属于对象。

关于第二点,Java中对每种基本类型都有对应的包装类型,这里也回答一下我同学面试科大讯飞时碰到的问题:

Java中有了基本类型为什么还要有对应的包装类型?有了包装类还要有基本类型?

有了基本类型为什么要有包装类,因为基本类型之间没有什么实际操作,不能做一些实际的事情,比如有时强制类型转换会出问题,同时,JVM中基本数据类型也是被当做对象处理的(参考自https://blog.csdn.net/yuxin6866/article/details/52812911),只是在JVM中为基本类型创建的对象是很轻量级的,相对于直接创建的对应包装类做了许多优化;正是因为轻量级的缘故,这些类的原始功能很少(如不能调用内部方法,因为类内部已经优化得没有方法了)。但是,因为其轻量级的缘故我们获得了性能上的提升,其速度比包装类要快很多。

下面谈Java中创建对象时对内存的分配:

首先,有五个不同的地方可以存储数据:寄存器、堆栈、堆、常量存储、非RAM存储。

寄存器是最快的存储区,位于处理器内部。由于其内存极其有限,故按需分配,无法直接控制。

堆栈位于RAM中,通过堆栈指针从处理器获得直接支持。一般对象的引用存储在这里,对于基本类型则是存储基本类型的值在这里。创建程序时,Java系统必须知道存储在堆栈内所有项的确切周期。

堆内存也位于RAM,创建Java对象时会自动在这里进行存储分配。

常量值通常直接存放在程序代码内部,因为永远不会变。

如果数据完全存活于程序外,那么可以不受程序控制。比如流对象和持久化对象。在流对象中,对象转换为字节流发送到另一台机器,持久化对象存储在磁盘上。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值