java转型 内存_java 对象转型内存分析
对象转型:
一个基类的引用类型变量可以指向其子类的对象(要求传个动物,传给狗是可以的,狗是动物)
一个基类的引用不可以访问其子类对象的新增成员(狗会游泳不代表所有的动物都会游泳,把狗当作动物来看时不可访问狗游泳方法)
子类对象可以当作基类的对象来使用称向上转型,反之称为向下转型。
class Animal{
public String name;
Animal(String name){
this.name=name;
}
}
class Cat extends Animal{
public String eyesColor;
Cat(String n,String c){
super(n);eyesColor=c;
}
}
class Dog extends Animal{
public String furColor;
Dog(String n,String c){
super(n);furColor=c;
}
}main函数:
public static void main(String args[]){
Animal a=new Animal("name");
Cat c = new Cat("catname","blue");
Dog d = new Dog("dogname","black");
System.out.println(d instance of Animal); //true 狗是动物
System.out.println(a instanceof Dog); //False 动物是狗,显然逻辑错误,狗是动物,不能代表动物
a=new Dog("bigyellow","yellow"); //内存分析见下图1
System.out.println(a.name); //bigyellow
System.out.println(a.furname); //a是动物,new一个狗出来是把狗当作动物看,不可访问狗的特殊成员变量,上文第二条
System.out.println(a instanceof Dog); //true new出来的实际是Dog
//非要用a访问dog的成员变量,必须强制转换
Dog d1=(Dog)a; //内存分析见下图2
System.out.println(d1.furColor); //yellow
}
图1:狗当作普通animal,a只能看见animal共有的东西,看不见狗毛色属性
图2:强制转换,定义一个d1=a,在内存中分配一块区间d1指向与a指向的相同的对象,d1是Dog类型的,所以可以看见dog的所有属性
java转型 内存_java 对象转型内存分析相关推荐
- java怎么限制一个对象的内存_java对象的内存布局及创建过程
一.对象的内存布局 对象的内存结构又可以被分为:对象头,实例数据,对象填充 对象头:对象头结构在32位JVM与64位JVM中的实现细节是不同的 32bit: 64bit: 实例数据:对象真正存储的有效 ...
- java对象内存模型_Java对象的内存模型
众所周知,函数调用在内存中是通过压栈,退栈实现的,而Java的方法调用则是在JVM栈中通过栈帧实现的,且所有的Java对象都只在堆上分配内存.那么一个Java对象在堆内存里到底长啥样呢?实际上,当一个 ...
- java对象的内存分配_java对象在内存的分配问题
今天看到一个不错的PPT:Build Memory-efficient Java Applications,开篇便提出了一个问题,在Hotspot JVM中,32位机器下,Integer对象的大小是i ...
- java对象的内存结构_Java对象在内存中的结构分析
问题:在Hotspot JVM中,32位机器下,Integer对象的大小是int的几倍? HotSpot虚拟机中,对象在内存中的布局分为三块区域:对象头.实例数据和对齐填充,其中对象头又分为:Mark ...
- java基础学习总结——对象转型
一.对象转型介绍 对象转型分为两种:一种叫向上转型(父类对象的引用或者叫基类对象的引用指向子类对象,这就是向上转型),另一种叫向下转型.转型的意思是:如把float类型转成int类型,把double类 ...
- java基础学习之对象转型
对象转型(casting): 1)一个基类的引用类型变量可以指向其子类的对象 2)一个基类的引用不可以访问其子类对象新增加的成员(属性和方法) 3)可以使用引用变量instanceof类名,来判断该引 ...
- 动态加载laydate 失效_Java对象的内存布局+反射的原理+动态代理+ 并发和锁+文末彩蛋...
# 一行代码是怎么运行的 首先,java代码会被编译成字节码,字节码就是java虚拟机定义的一种编码格式,需要java虚拟机才能够解析,java虚拟机需要将字节码转换成机器码才能在cpu上执行. 我们 ...
- 占内存少的java开发工具_Java所占内存中神奇的64MB
一 前言 在生产环境,Java应用程序设置了最大JVM内存后,经常发现实际使用的内存,可能超过设置的JVM最大内存数jmap -heap pid 通过这个命令可以方便查看java的内存分配情况.一般情 ...
- java nio 堆外内存_Java堆外内存之突破JVM枷锁
对于有Java开发经验的朋友都知道,Java中不需要手动的申请和释放内存,JVM会自动进行垃圾回收:而使用的内存是由JVM控制的. 那么,什么时机会进行垃圾回收,如何避免过度频繁的垃圾回收?如果JVM ...
最新文章
- 基于redis的cas集群配置(转)
- php+实现群发微信模板消息_php实现发送微信模板消息的方法,php信模板消息_PHP教程...
- LeetCode Number of Digit One(计算1的个数)
- PowerShell CLI 获取VM信息
- 【Spring Boot 分享】开源项目【8个】
- 图解全排列问题_一道笔试题(122345求有条件全排列)的两种做法
- inux读取ISO文件或是光驱的方法--挂载
- MySQL Group Replication-MGR集群简介
- 【mongoDB】测试使用gridfs,配置一个分片服务器集群
- Quartz(任务调度)- job串行避免死锁
- mysql isnull
- 使用 Composer 为 ThinkPHP(3.2.3)框架添加和管理组件
- Debug JDK源码没变量值怎么办?
- Java Timer
- java 启动resin,Resin 启动时报错!解决方法
- vue valley_12个无剧透的Stardew Valley秘诀和技巧,助您入门
- 黑客组织Anonymous(匿名者)
- RT-Thread Studio 项目实战教程 | 快速打造一个桌面mini网络时钟
- 动手做一个小机器人——语音控制篇
- MacOS 下 TeXstudio 深色背景主题设置