请教,对象是否能自己把自己设为null?

SilentHunter460 2020-10-13 11:33:41
public class A {
static B b = new B();

public static void main(String[] args) {
//从A这个类里把B类的实例化对象设为null,这个没有问题。
b = null;

//但是,对象b是否可以自己把自己设为null?
b.setNull();
}
}


public class B {
void setNull(){
/*
这句是不行的,我的本意是B类的实例化对象,
调用这个方法,自己把自己设为null。是否可以?
*/
this = null;
}
}
...全文
5673 32 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_291778271 2020-11-21
  • 打赏
  • 举报
回复
不可以,当对象为空 方法也是空的
qkniit 2020-11-19
  • 打赏
  • 举报
回复
public class B { void setNull(B b){ /* 这句是不行的,我的本意是B类的实例化对象, 调用这个方法,自己把自己设为null。是否可以? */ b= null; } }
limit、T 2020-10-30
  • 打赏
  • 举报
回复
我觉得是可以的,你只要想办法让它的指向地址位null就行了。
  • 打赏
  • 举报
回复
如果是元素直接置为null,如果是想把对象置为null,那是不可能的。因为调用实例方法的对象不能为null,否则空指针异常。
qq_39936465 2020-10-16
  • 打赏
  • 举报
回复
引用 27 楼 qq_16774199 的回复:
我主要是不想费事去记住区分敌我的那个变量,被击中了、撞车了、撞墙了、调用画图片方法时都要先判断那个变量,我连子弹类做成父类子类。总代码量多了,但使用对象时不用顾及敌我,天生new出来就区别好敌我了。 我觉好处是减少了一些判断boolean的代码,因为太多if我害怕把思路绕晕。代价是多个类,代码总行数多了几百行。
别人的坦克大战一样会遇到这些问题,建议你看懂别人的程序是怎么解决这些问题的,程序该优化的地方需要优化。自己一个人蒙头编写程序并不是一件好事,多看别人写的程序能少走弯路。
SilentHunter460 2020-10-16
  • 打赏
  • 举报
回复
引用 26 楼 qq_39936465 的回复:
java 有多态 ,用父类建实例, list为父类实例list , java 不仅要学会还要灵活使用。 个人觉得只要建一个坦克类就行了,只要添加一个变量用来区分敌我,因为坦克的大多数变量都一致的没必要建这么多不同的类,学编程要多看看别人的程序,学习别人的编程思想,并学会优化自己的程序。
我主要是不想费事去记住区分敌我的那个变量,被击中了、撞车了、撞墙了、调用画图片方法时都要先判断那个变量,我连子弹类做成父类子类。总代码量多了,但使用对象时不用顾及敌我,天生new出来就区别好敌我了。 我觉好处是减少了一些判断boolean的代码,因为太多if我害怕把思路绕晕。代价是多个类,代码总行数多了几百行。
qq_39936465 2020-10-16
  • 打赏
  • 举报
回复
引用 25 楼 qq_16774199 的回复:
[quote=引用 22 楼 qq_39936465 的回复:] NoNo,这里的list是敌我双方的坦克,难道你还分开画坦克吗?
我做一个坦克抽象父类,一个电脑坦克类,一个玩家坦克类。[/quote] java 有多态 ,用父类建实例, list为父类实例list , java 不仅要学会还要灵活使用。 个人觉得只要建一个坦克类就行了,只要添加一个变量用来区分敌我,因为坦克的大多数变量都一致的没必要建这么多不同的类,学编程要多看看别人的程序,学习别人的编程思想,并学会优化自己的程序。
qq_39936465 2020-10-15
  • 打赏
  • 举报
回复
引用 9 楼 qq_16774199 的回复:
[quote=引用 5 楼 maradona1984 的回复:]个人觉得 this = null; 这行代码可能编译都有问题. 只是你为啥有这种需求...探索世界吗?
原因是这样: 我学习用swing做2D坦克大战,每只坦克是一个实例化对象,如果坦克被击中是不是要让它消失?如何让它消失?我想到了null。我希望每个坦克实例化对像能自己把自己设为null,而不是让其它类的对象来把它设为null。[/quote] 一般是把坦克实例类编入一个list中,通过遍历list来绘制现存坦克,不需要坦克直接从list中remove掉。
SilentHunter460 2020-10-15
  • 打赏
  • 举报
回复
引用 6 楼 meet_zzs 的回复:
这个想法有点问题 肯定是不能this=null;这样写的 首先你在其他类要调用并创建这个类的对象是 直接写成 B b;它的默认值就为null 或者B b=null; 如果你是想要一个方法能把B的一个对象赋值为null的话 public void setObjectNull(B b){ b=null; } 而调用这个方法那边只要把B的实例传进来就好了
请问这个方法是否可以写在B类里?
SilentHunter460 2020-10-15
  • 打赏
  • 举报
回复
引用 5 楼 maradona1984 的回复:
个人觉得 this = null; 这行代码可能编译都有问题. 只是你为啥有这种需求...探索世界吗?
原因是这样: 我学习用swing做2D坦克大战,每只坦克是一个实例化对象,如果坦克被击中是不是要让它消失?如何让它消失?我想到了null。我希望每个坦克实例化对像能自己把自己设为null,而不是让其它类的对象来把它设为null。
oO临时工Oo 2020-10-15
  • 打赏
  • 举报
回复
引用 4 楼 qq_16774199 的回复:
[quote=引用 3 楼 oO临时工Oo的回复:]this是只读的,第二段代码第7行编译就会报错
那么我的目的是不是java做不到?[/quote] 想不想年青10岁。 那是不可能的
qq_39936465 2020-10-15
  • 打赏
  • 举报
回复
引用 楼主 qq_16774199 的回复:
public class A {
      static B b = new B();

      public static void main(String[] args) {
            //从A这个类里把B类的实例化对象设为null,这个没有问题。
            b = null;

            //但是,对象b是否可以自己把自己设为null?
            b.setNull();
      }
}
public class B {
      void setNull(){
            /*
            这句是不行的,我的本意是B类的实例化对象,
            调用这个方法,自己把自己设为null。是否可以?
             */
            this = null;
      }
}
this是java 的关键字应该是final类型,所以你无法给this赋值。 this=null根本无法编译
SilentHunter460 2020-10-15
  • 打赏
  • 举报
回复
引用 22 楼 qq_39936465 的回复:
NoNo,这里的list是敌我双方的坦克,难道你还分开画坦克吗?
我做一个坦克抽象父类,一个电脑坦克类,一个玩家坦克类。
meet_aas 2020-10-15
  • 打赏
  • 举报
回复
这个想法有点问题 肯定是不能this=null;这样写的 首先你在其他类要调用并创建这个类的对象是 直接写成 B b;它的默认值就为null 或者B b=null; 如果你是想要一个方法能把B的一个对象赋值为null的话 public void setObjectNull(B b){ b=null; } 而调用这个方法那边只要把B的实例传进来就好了
maradona1984 2020-10-15
  • 打赏
  • 举报
回复
个人觉得 this = null; 这行代码可能编译都有问题. 只是你为啥有这种需求...探索世界吗?
maradona1984 2020-10-15
  • 打赏
  • 举报
回复
引用 21 楼 qq_16774199 的回复:
[quote=引用 14 楼 maradona1984 的回复:] 你这设计思路有点问题,坦克这个对象肯定是其他对象来持有,是不是设置为null那也肯定是持有这个对象的对象来决定
是的,我的设计里,因为是Swing,所以有一个继承了Frame类的实例化对象(简单的说就是窗口),它持有一切,我当然可以从它这里决定任何东西。 但导致的结果是这个主类要写一堆代码,我觉得这些代码应该写到各个对象的类里面去,比如子弹你自己判断有没有撞到东西,坦克你自己判定有没有被击中,坦克你被击中了也应该自己把自己设为null。[/quote] 不在一个类里写太多代码,这个意识很正确,可能你不知道怎么做到吧,其实你把主体逻辑拆分成不同的类就能达到同样的效果,而不是硬钻一个语法上就不允许的方式来解决问题,比如窗口这个对象很容易把他做成全局的,坦克类里加一个destory方法,他可以拿到窗口对象,并将自己移除即可
qq_39936465 2020-10-15
  • 打赏
  • 举报
回复
编程要学会灵活运行,我觉得直接弃用B类和你把B类设为null都是一个效果,不要转牛角尖,要学会转换思路。
qq_39936465 2020-10-15
  • 打赏
  • 举报
回复
引用 19 楼 qq_16774199 的回复:
[quote=引用 11 楼 qq_39936465 的回复:] 一般是把坦克实例类编入一个list中,通过遍历list来绘制现存坦克,不需要坦克直接从list中remove掉。
是的没错,电脑坦克有多很多所有用list。 但是玩家坦克只有一辆,用list小题大作的感觉。[/quote] NoNo,这里的list是敌我双方的坦克,难道你还分开画坦克吗?
SilentHunter460 2020-10-15
  • 打赏
  • 举报
回复
引用 14 楼 maradona1984 的回复:
你这设计思路有点问题,坦克这个对象肯定是其他对象来持有,是不是设置为null那也肯定是持有这个对象的对象来决定
是的,我的设计里,因为是Swing,所以有一个继承了Frame类的实例化对象(简单的说就是窗口),它持有一切,我当然可以从它这里决定任何东西。 但导致的结果是这个主类要写一堆代码,我觉得这些代码应该写到各个对象的类里面去,比如子弹你自己判断有没有撞到东西,坦克你自己判定有没有被击中,坦克你被击中了也应该自己把自己设为null。
SilentHunter460 2020-10-15
  • 打赏
  • 举报
回复
引用 10 楼 qq_16774199 的回复:
对于坦克对象,显示不显示应该有个属性来控制,而不是设置this为null 比如 tanke.setAlive(false); //死了,程序中判断alive属性,如果是true才显示坦克,否则就显示坦克
是的可以用setAlive,但是那样还得去判断boolean值,还得注意确保碰撞检测的代码失败,还得确认发射炮弹代码也停止工作。 如果设置为null就可以一了百了。
加载更多回复(12)

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧