j***a语言赋值用法,j***a的赋值语句

kodinid 11 0

大家好,今天小编关注到一个比较意思的话题,就是关于java语言赋值用法的问题,于是小编就整理了2个相关介绍Java语言赋值用法的解答,让一起看看吧。

  1. Java如何引用变量赋值?
  2. Java中的多态,为什么子类实例能够赋值给父类引用,反之则不行?

J***a如何引用变量赋值?

A a = new A();

new A() 对象,baiA a 引用变量du,a = new A()将对象地址给了引用变量。

java语言赋值用法,java的赋值语句-第1张图片-安济编程网
图片来源网络,侵删)

实例变量也可以叫他全zhi局变量,就是将变量放在类的方法之外的变量。

所以引用对象是用于存储对象地址的,实例变量描述的是变量位置

这里我们从更深层次来看看J***a如何给引用变量赋值:

java语言赋值用法,java的赋值语句-第2张图片-安济编程网
(图片来源网络,侵删)

在J***a中我们先姑且把数据类型氛围基本数据类型和引用数据类型,那么从下面几个点答主来说说J***a中的引用数据类型的赋值:

基本数据类型

J***a中的基本数据类型就是我们刚刚开始学的时候的八大基本数据类型:int,byte,short,longdoublefloatchar,boolean。这八大基本数据类型说白了就是J***a中帮我们定义好的,我们常用的一些需要用到程序中做数据计算的类型。这些类型的定义语法结构,基本一样,如下面:

java语言赋值用法,java的赋值语句-第3张图片-安济编程网
(图片来源网络,侵删)

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点解答对大家有用。

标签: 方法 引用 类型

上一个人工智能深度学习python,人工智能python零基础入门

下一个java语言基础用法,java语言的基础语法