为什么第一个要用this()来调而sing那个可以直接调用。
sing()是普通方法,this()调用的无参构造方法,方法的调用格式是不一样的
在.java文件中构造器调用了,显示1usages,但是.class文件里构造器显示no usages是为什么呢
请把问题再描述细致些,来微信提问
这块(划红线的这一行)sing()前面不加this和加this的区别是什么呢
加上this表示调用了当前类里的sing方法
TestThis { (){ System..println()} (ab){ ()a = a.=a.=b} (abc){ (ab).= c} (){ } (){ .sing()System..println()} (String[] args) { TestThis hi = TestThis()hi.eat()} }
为什么这里结果会输出一个“正在初始化一个Hello对象”呢?,main方法里面也没有输出它呀
代码放到代码区
这句话应该是在创建的对象的构造方法中写的,在创建对象的时候会自动调用构造方法。
可以不写这个吗?
不写的话,当你调用这个构造方法的时候,a和b的值就传递不了。调用a,b,c这个有参构造
老师。如何像上面一样在代码旁边注释信息
切换成英文格式的输出发,按/键,或者你把注释写好,使用鼠标把注释选择上使用Ctrl+/就可以快速注释
老师 this staic 继承 override 这几章我总记不住用法和表达式 ,一个视频看几次代码也是敲了好几次了还是这样,怎么办才好?总是好混乱的
四个名词我一一给你讲:
this : 指当前引用,例如一个对象调用一个方法,这个对象就是this,那this呢也可以用于调用构造,this()。
static:静态关键词,一旦被static修饰的属性 和 方法,都会从对象层级升级到类层级,属于类了,static静态关键字经常使用在方法上作为:工具方法,变量上作为共享变量,禁止滥用static关键字。
继承:又称扩展,子类继承了父类,可以使用父类的方法与变量,一定程度上实现了程序的多用性,父类经常是被抽取出啦公共的特性的,子类呢是具有特定独有的属性的。
override:重写,基于继承才可以实现,父类的方法体不满足子类的需求时,子类可以重写父类的方法,打个比如,父亲炒菜不好吃,儿子自己亲自来抄
谢谢老师四句话就说明白了,太厉害了!
客气
老师是不是所有方法都需要在main()里调用才能输出的,我把main方法的对象注释掉IDEA就没有输出值了,这应该怎么理解?还是我需要去复习哪节课呢?
这样理解可以吗?因为TestThis只在方法区,而方法区不能直接输出,是main()方法在堆中创建了对象,栈桢的方法才能调用输出,那就意味着会有其它方法可以在堆中创建对象吧
TestThis方法 与 类名一样 称为 构造方法 ,构造方法随着创建对象的时候执行
老师 下面的这个this.a = a this.a是不是这个构造器里面的int a,右边的a是上面的成员变量a?
这里的this.a不是构造函数里面的,二十TestThis这个类中声明的a,而this.a = a的后面这个a是构造器中参数的a.
那这里的话我应该怎么写然后把name输出啊?
在main方法中加System.out.println(u.name)
老师,我这在构造器里面调用别的构造器为什么出现红色标记?我看了老师调用构造器是一样的,谢谢。
这里不要用点,直接this()就可以了。
老师我可以认为是通过new类来创建一个对象,然后通过构造方法来this.a=a;是否等用于借用类里面的a来变成属于自己的a呢
你的意思是a的值是借用this.a去赋值的,是这个意思吗
是的,是这个意思
首先,值的传递,老师给你标注一下
赋值的时候是吧等号右面的传递给左面的,这个要理解,不理解的话微信可以语音说一下
已经理解了,谢谢老师
不客气哦
这个地方加的数字有何意思
这个是调用你的有参构造,去创建的对象
this为什么不能出现在static方法中?
追问:明明用对象也能调static方法呀
类方法(静态方法)是属于类级别的,为所有对象共有的,在类加载进内存的时候就存在了,此时还没有对象,this就无法指向任何对象,所以是不可以的
那普通方法咋子就可以了。
this不就指代当前对象嘛。我用该对象调static方法,this指代该对象合情合理哇
static是在类加载的时候就已经有了,你的this还没有呢,普通方法是在有了对象,对象调用以后才在有的,更晚。而且静态是属于类的,不属于任何一个对象的。
public class TestThis02 { int a = 1; int b = 2; String c; TestThis02(){ System.out.println(this); System.out.println(a+b); } TestThis02(int c ,int d ){ this(); a=c; b=d; System.out.println(this); System.out.println(a+b); } public static void main(String[] args) { TestThis02 hi = new TestThis02(); hi.a = 3; hi.b = 4; TestThis02 hi2 = new TestThis02(5,6); System.out.println(hi.a+hi.b); } }
运行结果如下图
在我的第二个含参构造器中我已经通过this引用了空的构造器,那这一步的作用是怎么体现的呢?引用无参构造器,打印出来的a+b=3,但是打印出来的this地址为什么是我第二个含参构造器的地址?然后我的含参构造器对a和b进行赋值,这个赋值是给了我的无参构造器构造出来的对象,还是给了我含参构造器构造出来的对象呢?如果是给我含参构造器的对象,那我这一步this()他的作用是什么呢?不是很理解,能不能出一个流程图看看他运行过程中的顺序和指向啊。老师讲的有点模糊,着实听不懂啊
你可以看一下,有什么不懂的再问我