关于this关键字的问题

关于this关键字的问题

老师,虽然编程练习我能做出来,但是对该关键字的概念好模糊;有几点麻烦老师解答一下

  1. 为啥在同类中的主方法体无法直接用this.XX=xx;来进行设定值以及this.XX来进行调用方法。

  2. 在编程练习中虽然new了两个不同的内存地址,但是使用的对象都是该类,为啥在无参构造方法中用this.name直接赋值,然后在有参构造方法中用this.name=name;在测试类中给该属性值赋值,为啥输出的值是不同的(PS:无参返回体中已经用了this.name进行赋值),this关键字不是指定了属性的全局关键字吗?那不应该都输出无尾猴吗.

  3. 关于public class test和class Test,这两个当中为啥前者已经设定了访问修饰符,后者还创建个不能访问的类,编写那么多不能访问的类的作用是什么,编写方法不是更好吗?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
好帮手慕小班 2020-08-23 14:50:18

同学你好,1、根据同学代码所描述的代码内容,这些类是内部类,关于内部类的内容在后面多态的章节有具体的讲解。https://class.imooc.com/course/106

http://img1.sycdn.imooc.com//climg/5f420d26093298e105390543.jpg

    2、关于new了两个不同地址的对象这个问题还是有点没懂。

这里同学可以这样理解一下:一个实体类:汽车类,每一个汽车都应该有它的颜色,大小,发动机,速度等基本的参数。现在生产汽车有两个构造方法,一个是通过默认的参数(无参)构造方法直接生产,另一种是通过私人定制,直接传入对应颜色、大小、发动机型号等参数,通过传入参数(有参)的构造方法来生产。

    所以每次new就是通过调用构造方法来创建一辆新的汽车,

,但是每一个汽车都应该有它的颜色,大小,速度这些基本的参数,我们可以根据传入参数来给这些属性赋值,有参构造就是让调用者能够根据参数为类的属性赋值。无参构造就是直接创建无参构造方法(也可以说是默认属性值)的对象。

在Java里可以new很多辆汽车。每次new就是创建一辆新的汽车。实例化带参数的构造方法时对象的创建会跳过无参方法。

如果我的回答解决了你的疑惑,请采纳!祝学习愉快!

好帮手慕小班 2020-08-23 11:09:43

同学你好,1、为啥在同类中的主方法体无法直接用this.XX=xx;来进行设定值以及this.XX来进行调用方法。

    因为主方法(main方法)是static修饰的静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象。所以在静态方法中并不能直接使用this。

关于static静态属性,同学可以在后面封装的课程中学习。https://class.imooc.com/course/100

http://img1.sycdn.imooc.com//climg/5f41d87009a743d605100154.jpg

    2、在编程练习中new了两个对象,就是创建了两个对象,指向不同的内存地址。

http://img1.sycdn.imooc.com//climg/5f41da6f09e6dede13320568.jpg

比如,一个实体类:汽车,但是每一个汽车都应该有它的颜色,大小,速度这些基本的参数,我们可以根据传入参数来给这些属性赋值,有参构造就是让调用者能够根据参数为类的属性赋值。无参构造就是直接创建无参构造方法(也可以说是默认属性值)的对象。

在Java里可以new很多辆汽车。每次new就是创建一辆新的汽车。

    3、还创建个不能访问的类,这里还麻烦同学具体描述一下-->不能访问的类。建议同学能将使用代码描述一下。

继续加油~祝学习愉快!

  • 提问者 慕哥8310336 #1
    public class Test { String name; class test{ String name; } class nis{ String name; } public void run(){ System.out.println("跑"); } public static void main(String[] args){ } } 我看有些程序会这么进行写,作用是什么。 是为了给不同的类不让外部包进行直接访问吗?
    2020-08-23 11:20:15
  • 提问者 慕哥8310336 #2
    另外老师,关于new了两个不同地址的对象这个问题还是有点没懂,程序的运行流程不是从上到下吗。实例化了带参的对象的时候,他上面还有一个不带参的构造内部有了赋值的方法,为啥是不同的。 是因为实例化带参数的构造方法时程序会跳过无参方法是吗?
    2020-08-23 11:23:43
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师