变量定义问题

[复制链接]
查看11 | 回复9 | 2021-1-27 06:16:19 | 显示全部楼层 |阅读模式
publicclassJavaWork{
privateTestertester;
publicvoidsetTester(Testertester){
this.tester=tester;
}
publicvoiddoTest(){
tester.test();
}
}
tester就一个Interface实例,不是已经定义了吗?——privateTestertester;下面这句publicvoidsetTester(Testertester),为什么还要定义它呢?要是不定义就报错,这是为什么?
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:16:19 | 显示全部楼层
privateTestertester;这句是定义了,但是没有实例化


Testertester=newTester();才能直接使用
回复

使用道具 举报

千问 | 2021-1-27 06:16:19 | 显示全部楼层
privateTestertester;是定义私有成员变量,并没有实例化。
publicvoidsetTester(Testertester)的Testertester是方法的型参,通过这个方法来传Tester的实例。
回复

使用道具 举报

千问 | 2021-1-27 06:16:19 | 显示全部楼层
privateTestertester;这句定义的tester没有实例化,他的值是null,null是不能调用任何方法的,所以当你没有调用setTester这个方法实例化它的时候,如果调用了doTest方法是会报nullpointexception的
回复

使用道具 举报

千问 | 2021-1-27 06:16:19 | 显示全部楼层
privateTestertester和publicvoidsetTester(Testertester)里的tester哪怕名字一样默认也是2个变量,前面一个是类定义变量,后面是引用的参数变量,所以参数变量也需要定义,一般为了读程序的人方便把参数变量名和类变量名取相同名字,实际上参数变量名可以取其他名字。
不然的话你怎么理解this.tester=tester;

回复

使用道具 举报

千问 | 2021-1-27 06:16:19 | 显示全部楼层
你没有给tester赋值,程序如果调用Tester类的doTest()方法,会直接报空指针异常的!
回复

使用道具 举报

千问 | 2021-1-27 06:16:19 | 显示全部楼层
楼上已经说的很明显了,你的报错就是还没进行实例化才会出现的问题
回复

使用道具 举报

千问 | 2021-1-27 06:16:19 | 显示全部楼层
我想报错原因应该不是你想的那样的,你是怎么调用的,能把代码粘贴出来吗?目前看代码没有被调用,编译也都通过了,没有楼主说的现象
回复

使用道具 举报

千问 | 2021-1-27 06:16:19 | 显示全部楼层
Testertester叫做声明了一个对象,只做声明,没有实例或者引用,想要调用它的非静态方法必须先实例化
回复

使用道具 举报

千问 | 2021-1-27 06:16:19 | 显示全部楼层
兄弟,按照你的写法,你是只是封装了一个成员变量,你要实例化后,才能用啊。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行