小弟初学Java以前学C++有半年。在java中这样一种写法:myPanel.add(new JButton(new ColorAction("Red",Color.RED))); 请问这个一个匿名的new 不会出问题吧
根据java GC规则是说当一个类不再被任何变量引用时,就被回收.
这种情况下,那些JButton和ColorAction都没有被任何变量引用啊? 会不会被GC回收呢?
还有我在java中发现在类的构造函数申明的对象在退出构造函数后,仍然可以被其它成员函数使用.
根据java GC规则是说当一个类不再被任何变量引用时,就被回收.
这种情况下,那些JButton和ColorAction都没有被任何变量引用啊? 会不会被GC回收呢?
还有我在java中发现在类的构造函数申明的对象在退出构造函数后,仍然可以被其它成员函数使用.
myPanel.add(new JButton(new ColorAction("Red",Color.RED))); 和ColorAction ca = new ColorAction("Red",Color.RED);
JButton btnRed = new JButton(ca);
myPanel.add(btnRed);
myPanel.add(new JButton(new ColorAction("Red",Color.RED)));
这种写法~在MyPanel中存在一个指针引用new Jbutton在new Jbutton中又有一个指针引用new colorAction。
而
ColorAction ca = new ColorAction("Red",Color.RED);
JButton btnRed = new JButton(ca);
myPanel.add(btnRed);
首先创建了一个指针ca 引用了new colorAction
然后
JButton btnRed = new JButton(ca);
创建一个指针btnRed引用了new Jbutton 同时new Jbutton中又拥有一个指针引用new colorAction
即new Jbutton中的指针和ca这个指针引用的是同一个对象,同一段内存。
下面的myPanel.add(btnRed);
同理
你的意思是说,虽然new 没有给名字,不过编译器会给出一个匿名的引用
所以第一种写法仍然是安全的。
不过这个匿名的引用是建立在stack 还是在 heap上呢? 不过我更喜欢第一种写法。不但因为简洁而是
给变量取一个有意义的名字本来就是一件痛苦的事情.