1.如何理解java方法参数传递的对象引用是按值调用而不是引用调用?
2.为什么不能用 import java.*导入多个包?是规定还是什么理由?
3.
关于划红线句子中的两个问题,1).super不是指向父类对象吗?为什么说不是一个对象的引用?
2).super不是还有可以访问父类域的用途吗?

解决方案 »

  1.   

    this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针,而super相当于是指向当前对象的父类,可以用super.xxx来引用父类的成员。
      

  2.   

    super 是一个关键字,不可以赋值给其他人,但是同类型类初始化后是可以相互赋值的,书后面不是解释的很清楚么!
      

  3.   

    你可以吧this 赋值给其他属性,比如  a=this,但是 没有 a=super的说法。再者B 继承A,你new了一个B的实例,你都没有实例化父类,怎么会有父类的引用呢?
      

  4.   

    按值传递:函数方法的参数即形参是实际参数的一个拷贝。
    引用传递:指在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。
    https://blog.csdn.net/zzp_403184692/article/details/8184751
      

  5.   

    问题1:Java中只有按值传递,没有C++中的引用传递。java中的按值传递也和C++中的按值传递理解上有区别,不要弄混了。
    你需要弄清楚java中变量是什么,首先java中有几个基本类型,比如int型,double型,,,这些数据类型的变量就是它本身,那个变量的名称可以理解为就代表了那个内存中的数据,所以函数调用会拷贝一份,因此在函数中改变不了这个变量的值。但对于java中的对象,就不同了。比如:Date date = new Date(); 这里的date是一个变量,但是它就是这个对象吗?并不是,它只是一个标签(类似python),或者称一个指针(类似C),大家也成它是这个对象的引用(但这里的意思并不是说是C++中的引用),实际上它储存了那个真正对象内存的地址,date就是一个地址,所以函数调用时虽然是按值传递,但是拷贝的是地址,所以函数中的date也还是指向了那个对象,所以就可以改变那个对象了,但是它因为是按值传递,所以还是不能改变date的值,也就是这个地址它改变不了。不知道说的理解不理解?问题2:这个就是一规定,好处就是让你少些点代码,减轻工作量,看起来更简洁。问题3:super是一个关键字,书中已经说的很清楚了。用途就是上面的两个方法,没有什么需要多说的,因为为什么要这个关键字这本书中已经说得很清楚了。祝学习进步!
      

  6.   

    第二点。是java这样规定的
      

  7.   

    第一点:JAVA就是这样的,都是值传递,没有引用。与C++是不同的。之所以会让你产生困惑是当函数的参数是除8种非基本类型时的情况。这时可以理解为传递的是指向类在内存中的地址。结果与C++中的指针类似。
    第二点:这是规定。
      

  8.   

    问题二,这个看你使用的是什么编辑器,如果是idea的话可以,eclipse不可以
      

  9.   

    为什么不能用 import java.*导入多个包?是规定还是什么理由?随着java 的发展 有同名不同包的类出现,你如果写java.*会造成程序编译时不知道该调用那个类,起码要加类包名以示区别,所以java 规定要加包名,可以包名后加'*'号。