java 编程规范参数个数 为什么说java里面只有值传递?

[更新]
·
·
分类:互联网
1891 阅读

java 编程规范参数个数

为什么说java里面只有值传递?

为什么说java里面只有值传递?

许多初学者都有这个疑问,java是值传递还是引用传递?
先介绍疑问的出处,两派的观点。
小A说:java是值传递
小A说你看上面的代码,调用jia方法之前a是1,调用方法之后还是1,值没有改变。
小B说:java是引用传递
小B说你看上面的代码,调用chang方法之前数组为{1},调用方法之后是{2},改变了值。
答案:java是值传递小B的观点是有失偏颇的,单纯的根据值的变化判断是不是引用传递是错误。
我们可以来看一下下面的代码:
若java是引用传递,那么数组a和b在交换之后,内容应该互相交换,但是结果仍然不变。
为什么不会变呢?
因为java方法的参数传递是引用拷贝传递。在调用swap方法,x变量拷贝了a的引用指向1,y变量拷贝了b的引用指向2(如图)。
2. 在调用int[] t xx yy t方法,x指向2,y指向1,ab指向没变(如图)。
3. 当方法结束后,参数xy变量失效,参数变量a和b没有改变,没有受到影响。
总结什么时候会改变,什么时候不会改变呢?
一个方法不能修改一个基本数据类型的参数(即数值型或布尔型)。
一个方法可以改变一个对象参数的状态。一个方法不能让对象参数引用一个新的对象。

什么是多态?java中如何实现多态?

多态分为编译时多态和运行时多态。
1.编译时多态,其实就是方法重载,相同函数名,但签名不相同。值得注意的是签名不包括方法返回值,换句话说,两个方法,函数名和入参都相同,但返回值不同,编译器回报错的。
2.运行时多态,其实就和继承和接口实现相关了,子类可以覆盖父类的非final,非static,非private方法或者实现接口方法。运行时,动态绑定实例到父类或接口的引用,那jvm是怎么知道调用哪个子类的实例的对应方法的呢?这就是你问的问题了——Java中对象在jvm内部都有描述元数据,对象头,对象头中存储了当前实例的类型信息,调用时jvm就根据这个type能精确找到具体是点用哪个子类的方法了。