代码如下:
public void createMenuBar(){//创建菜单
JMenuBar menuBar = new JMenuBar();
String[] menuArr = {"文件","工具","帮助"};
String[][] menuItemArr = { {"打开","-","退出"},
{"放大","缩小","-","上一个","下一个"},
{"帮助主题","关于"}
};
for(int i=0;i<menuArr.length;i++){
JMenu menu = new JMenu(menuArr[i]); for(int j=0;j<menuItemArr[i].length;j++){
if(menuItemArr[i][j].equals("-")){
menu.addSeparator();
}
else{
JMenuItem menuItem = new JMenuItem(menuItemArr[i][j]);
menu.add(menuItem);
}
}
menuBar.add(menu);
} this.setJMenuBar(menuBar);
}
这是一个创建菜单栏的方法。用for语句遍历数组创建菜单;
在这个方法中,下面一句话执行了三次; JMenu menu = new JMenu(menuArr[i]);这句话则执行了10次; JMenuItem menuItem = new JMenuItem(menuItemArr[i][j]);
我的疑问是:因为一共有 13 次 new 语句执行了。所以在堆空间会产生 3个 JMenu()对象和10个JMenuItem()对象。但是指向它们的引用貌似只有两个啊,3个JMenu()对象被 menu 引用,10个JMenuItem()被menuItem引用。难道一个引用可以指向多个对象??如果不是这样,那就有2个JMenu()和9个JMenuItem()对象没有引用,java的垃圾回收就会把它们销毁掉。上面的方法成功的创建了它所预想的菜单栏,请高手解释,小弟不胜感激!!
public void createMenuBar(){//创建菜单
JMenuBar menuBar = new JMenuBar();
String[] menuArr = {"文件","工具","帮助"};
String[][] menuItemArr = { {"打开","-","退出"},
{"放大","缩小","-","上一个","下一个"},
{"帮助主题","关于"}
};
for(int i=0;i<menuArr.length;i++){
JMenu menu = new JMenu(menuArr[i]); for(int j=0;j<menuItemArr[i].length;j++){
if(menuItemArr[i][j].equals("-")){
menu.addSeparator();
}
else{
JMenuItem menuItem = new JMenuItem(menuItemArr[i][j]);
menu.add(menuItem);
}
}
menuBar.add(menu);
} this.setJMenuBar(menuBar);
}
这是一个创建菜单栏的方法。用for语句遍历数组创建菜单;
在这个方法中,下面一句话执行了三次; JMenu menu = new JMenu(menuArr[i]);这句话则执行了10次; JMenuItem menuItem = new JMenuItem(menuItemArr[i][j]);
我的疑问是:因为一共有 13 次 new 语句执行了。所以在堆空间会产生 3个 JMenu()对象和10个JMenuItem()对象。但是指向它们的引用貌似只有两个啊,3个JMenu()对象被 menu 引用,10个JMenuItem()被menuItem引用。难道一个引用可以指向多个对象??如果不是这样,那就有2个JMenu()和9个JMenuItem()对象没有引用,java的垃圾回收就会把它们销毁掉。上面的方法成功的创建了它所预想的菜单栏,请高手解释,小弟不胜感激!!
解决方案 »
- 怎么屏蔽实现类,只暴露接口出去
- 怎样在SWT的List控件中添加图像标志?
- 关于 import netscape.javascript.jsobject的问题
- 求助:Sin(正弦函数)的图象怎么画啊
- 请问关于使用jxl读取Excel表内容的问题
- 怎么排序?一个困扰了我很久的问题
- 求助,关于JTable
- 怎样用JAVAHELP做帮助文档小女 子急用在线等待在此先谢谢了。
- 安装了jbuilder后,如何回到j2sdk1.4.0开发环境,现在我的*.java *.class 图标都是jbuilder的
- Apache配置问题!在线等待...
- 想用JAVA做一个问卷调查软件
- protected Class<? extends Enum> enumClass;中的问号是什么意思?
JMenu menu = null;
for(int i=0;i<menuArr.length;i++){
menu+"i" = new JMenu(menuArr[i]);
JMenuItem menuItem = null;
for(int j=0;j<menuItemArr[i].length;j++){
if(menuItemArr[i][j].equals("-")){
(menu+"i").addSeparator();
}
else{
menuItem+"j" = new JMenuItem(menuItemArr[i][j]);
(menu+"i").add(menuItem+"j");
}
}
menuBar.add(menu+"i");
}这样是不是就不止3个引用了?
menu是局部变量 每次循环都会分配一个不同的地址
你仔细想想
menuBar.add(menu+"i");