ArrayList的分步new对象 private ArrayList aa=null; spgl() { aa=new ArrayList();// }我想问一下,它这个地方为什么不直接ArrayList aa=new ArrayList 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 还有它为什么是用private修饰? Sp sp=(Sp)aa.get(i);这个它为什么要强制转换为Sp类?public void spxx(String bh) { int i; for(i=0;i<aa.size();i++) { Sp sp=(Sp)aa.get(i); if(sp.getBianhao().equals(bh)) { System.out.println("该食品的信息为:"); System.out.println("食品编号:"+bh); System.out.println("食品名称:"+sp.getMingcheng()); System.out.println("食品价格:"+sp.getJiage()+"元"); break; } } if(i=aa.size()) System.out.println("对不起,无此食品!"); } 先声明,不初始化,这样不用分配内存空间,用到的时候再初始化private修饰,设置访问权限,防止其他类访问Sp sp=(Sp)aa.get(i); 不强制转换,不知道aa.get(i)是什么东东 就一个食品管理的类,底下是完整代码class Spgl{ private ArrayList aa=null; Spgl() { aa=new ArrayList(); } public void addsp(Sp sp) { aa.add(sp); System.out.println("添加食品成功!"); } public void spxx(String bh) { int i; for(i=0;i<aa.size();i++) { Sp sp=(Sp)aa.get(i); if(sp.getBianhao().equals(bh)) { System.out.println("该食品信息为:"); System.out.println("食品编号:"+bh); System.out.println("食品名称:"+sp.mingcheng); System.out.println("食品价格:"+sp.jiage+"元"); break; } } if(i==aa.size()) System.out.println("对不起,无此食品!"); } public void spjg(String bh,float jg) { int i; for(i=0;i<aa.size();i++) { Sp sp=(Sp)aa.get(i); if(sp.getBianhao().equals(bh)) { sp.setJiage(jg); System.out.println("修改食品价格成功!"); break; } } if(i==aa.size()) System.out.println("对不起,无此食品!"); } public void delsp(String bh) { int i; if(aa.size()==0) System.out.println("对不起,仓库中已没有任何食品!"); for(i=0;i<aa.size();i++) { Sp sp=(Sp)aa.get(i); if(sp.getBianhao().equals(bh)) { aa.remove(i); System.out.println("删除食品成功"); break; } } if(i==aa.size()) System.out.println("对不起,无此食品!"); }} ArrayList<>() <>里面给类型,被定义为只能存放对应类型的数据,你没给类型,但是你自己知道存的是什么类型的 出来要转换 不转换你用不了该类型的方法 你这个是集合框架的数组集合ArrayList,你问的是,为什么先不new对象,而是后面在选择new对象?这个问题你需要了解ArrayList的算法即可知道为什么了,可以参照我的文章http://blog.csdn.net/Java_Dmz/article/details/78076872 Sp sp=(Sp)aa.get(i);这一行(Sp)有什么作用 这个是强制转换,就是说如果不添加(Sp),系统就不知道 ArrayList aa这个集合里保存的是什么对象,可能是Integer,可能是String,可能是Sp的对象所以就不能Sp sp=(Sp)aa.get(i);这样用Sp的对象接收,因为aa.get(i)获取的是不确定的,系统不知道它是个什么东西,你添加了强制转换,就相当于告诉系统,这里面保存的就是Sp的对象,所以才能用Sp sp接收不想强制转换就ArrayList<Sp> aa = null;这样定义,声明List里面只能保存Sp 求助计时器的时间显示问题 有关线程方面的问题 java的什么破泛型 [求助]取一个整数i从右端开始的4~7位的表达式怎么写? SWT中GridData的问题 SOS! 那里有免费下载教JAVA的课堂录音 大神给看看 请教一个图形绘制的问题. 如何限制进程个数? Java小白,不知道这个程序怎么改,运行时提示的错误是数组越界,但这个string args【】不知道怎么定义长度 哪位知道哪里错了
public void spxx(String bh)
{
int i;
for(i=0;i<aa.size();i++)
{
Sp sp=(Sp)aa.get(i);
if(sp.getBianhao().equals(bh))
{
System.out.println("该食品的信息为:");
System.out.println("食品编号:"+bh);
System.out.println("食品名称:"+sp.getMingcheng());
System.out.println("食品价格:"+sp.getJiage()+"元");
break;
}
}
if(i=aa.size())
System.out.println("对不起,无此食品!");
}
private修饰,设置访问权限,防止其他类访问
Sp sp=(Sp)aa.get(i); 不强制转换,不知道aa.get(i)是什么东东
class Spgl
{
private ArrayList aa=null;
Spgl()
{
aa=new ArrayList();
}
public void addsp(Sp sp)
{
aa.add(sp);
System.out.println("添加食品成功!");
}
public void spxx(String bh)
{
int i;
for(i=0;i<aa.size();i++)
{
Sp sp=(Sp)aa.get(i);
if(sp.getBianhao().equals(bh))
{
System.out.println("该食品信息为:");
System.out.println("食品编号:"+bh);
System.out.println("食品名称:"+sp.mingcheng);
System.out.println("食品价格:"+sp.jiage+"元");
break;
}
}
if(i==aa.size())
System.out.println("对不起,无此食品!");
}
public void spjg(String bh,float jg)
{
int i;
for(i=0;i<aa.size();i++)
{
Sp sp=(Sp)aa.get(i);
if(sp.getBianhao().equals(bh))
{
sp.setJiage(jg);
System.out.println("修改食品价格成功!");
break;
}
}
if(i==aa.size())
System.out.println("对不起,无此食品!");
}
public void delsp(String bh)
{
int i;
if(aa.size()==0)
System.out.println("对不起,仓库中已没有任何食品!");
for(i=0;i<aa.size();i++)
{
Sp sp=(Sp)aa.get(i);
if(sp.getBianhao().equals(bh))
{
aa.remove(i);
System.out.println("删除食品成功");
break;
}
}
if(i==aa.size())
System.out.println("对不起,无此食品!");
}
}
这一行(Sp)有什么作用
这个是强制转换,就是说如果不添加(Sp),系统就不知道 ArrayList aa这个集合里保存的是什么对象,可能是Integer,可能是String,可能是Sp的对象
所以就不能Sp sp=(Sp)aa.get(i);这样用Sp的对象接收,因为aa.get(i)获取的是不确定的,系统不知道它是个什么东西,你添加了强制转换,就相当于
告诉系统,这里面保存的就是Sp的对象,所以才能用Sp sp接收
不想强制转换就ArrayList<Sp> aa = null;这样定义,声明List里面只能保存Sp