j***a语言赋值用法,j***a的赋值语句
kodinid
11
大家好,今天小编关注到一个比较有意思的话题,就是关于java语言赋值用法的问题,于是小编就整理了2个相关介绍Java语言赋值用法的解答,让一起看看吧。
- Java如何引用变量赋值?
- Java中的多态,为什么子类实例能够赋值给父类引用,反之则不行?
A a = new A();
new A() 对象,baiA a 引用变量du,a = new A()将对象地址给了引用变量。
实例变量也可以叫他全zhi局变量,就是将变量放在类的方法之外的变量。
所以引用对象是用于存储对象地址的,实例变量描述的是变量位置。
这里我们从更深层次来看看J***a如何给引用变量赋值:
在J***a中我们先姑且把数据类型氛围基本数据类型和引用数据类型,那么从下面几个点答主来说说J***a中的引用数据类型的赋值:
基本数据类型
J***a中的基本数据类型就是我们刚刚开始学的时候的八大基本数据类型:int,byte,short,long,double,float,char,boolean。这八大基本数据类型说白了就是J***a中帮我们定义好的,我们常用的一些需要用到程序中做数据计算的类型。这些类型的定义语法结构,基本一样,如下面:

int a=10;
下面我们在来看看定义完当前的基本数据类型的变量,在电脑中的怎么样的。
当我们定义了一个int类型数据的时候,在电脑内存中会开辟一个空间直接存上我们赋的值10进去,那么当我们要用这个变量的时候是直接引用a变量名来使用,并且是直接得到的是开辟空间中的值。
引用数据类型
除了八种基本数据类型以外,我们编写的类,作为数据类型创建的变量,Object类等等。象这种类作为数据类型的都属于引用数据类型。那么引用数据类型创建的语法如下:
Dog d=new Dog();
J***a中的多态,为什么子类实例能够赋值给父类引用,反之则不行?
这个涉及到J***a多态实现的原理。(这里默认你有一点研究)
首先给出定义:
多态指的是父类引用可以指向子类对象,同一个引用在调用同一个方法时表现出不同的行为特征。多态的实现分为两个阶段:编译时和运行时;预备知识:在JVM加载类的同时,会在方法区中为这个类存放很多信息(详见《J***a 虚拟机体系结构 》)。其中就有一个数据结构叫方法表。它以数组的形式记录了当前类及其所有超类的可见方法字节码在内存中的直接地址 。这个方法表中包含所有的 除开私有方法、 final方法 、构造方法和静态方法之外的所有方法,而且数组元素排列特性是:首先是Object方法,再是自己的间接父类的方法表,再是自己直接父类的方法表,最后是自己这个类的方法表。
在编译时,jvm根据引用类型去找自己的类中的方法表中是否含有方法的引用,jvm会先去father类中找是否能匹配到“合适”的方法,如果能则编译通过,如果没有则编译报错。(这也就是为什么学J***a语法时,父类引用只能调用父类存在的方法而不能调用仅在子类中存在的方法)
在编译不报错的情况下,来到运行时,在运行时,jvm保证了该父类引用指向正确的对象
根据对象(father)的声明类型(Father)还不能够确定调用方法f1的位置,必须根据father在堆中实际创建的对象类型Son来确定f1方法所在的位置。这种在程序运行过程中,通过动态创建的对象的方法表来定位方法的方式,我们叫做 动态绑定机制 。这种动态绑定机制就实现了多态。
由上面的实现过程可以知道,j***a的多态只能父类引用指向子类对象。
如果要问为什么不设计让j***a的子类引用指向父类对象,这就涉及到语言设计了,已经不是j***a多态实现这个范畴,J***a之父--詹姆斯·高斯林对这个问题可能最有发言权。
到此,以上就是小编对于j***a语言赋值用法的问题就介绍到这了,希望介绍关于j***a语言赋值用法的2点解答对大家有用。
标签: 方法
引用
类型
版权声明:本文来源于网络,不代表本站立场,如转载内容涉及版权等问题,请联系邮箱:83115484@qq.com,我们会予以删除相关文章,保证您的权利。