黑马程序员技术交流社区
标题:
关于map
[打印本页]
作者:
王宝龙
时间:
2012-9-19 13:33
标题:
关于map
本帖最后由 王宝龙 于 2012-9-19 22:22 编辑
为什么我把定义的HashMap封装在类中(第一种)编译就失败呢?
而如果放在主函数下里面就可以呢?这是哪里有问题?
第一种:
import java.util.*;
class MyMap
{
HashMap<Integer,String> hm = new HashMap<Integer,String>();
hm.put(1,"abcd");
hm.put(2,"abc");
hm.put(3,"def");
hm.put(4,"ghi");
hm.put(5,"jkl");
hm.put(6,"mno");
hm.put(7,"pqrs");
hm.put(8,"tuv");
hm.put(9,"wxyz");
public HashMap<Integer,String> getHm()
{
return hm;
}
}
class Second
{
public static void main(String[] arge)
{
for(int i=1;i<10;i++)
sop(new MyMap.getHm().get(i));
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
复制代码
第二种:
import java.util.*;
class Second
{
public static void main(String[] arge)
{
HashMap<Integer,String> hm = new HashMap<Integer,String>();
hm.put(1,"abcd");
hm.put(2,"abc");
hm.put(3,"def");
hm.put(4,"ghi");
hm.put(5,"jkl");
hm.put(6,"mno");
hm.put(7,"pqrs");
hm.put(8,"tuv");
hm.put(9,"wxyz");
for(int i=1;i<10;i++)
sop(hm.get(i));
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
复制代码
作者:
李泽巍
时间:
2012-9-19 15:35
本帖最后由 李泽巍 于 2012-9-19 15:36 编辑
刚开始那个HashMap<Integer,String> hm = new HashMap<Integer,String>();在定义类的变量的时候就new我记得会报出个空指针异常,我的理解是:如果想要定义变量默认值,就必须给定一个准确的实质的一个值,而new方法返回的是一个null,此时并没有给new出来的这个HashMap赋值。(这是我个人理解,可能并不是很准确)我一般都先置空,如果需要初始化都重写一下构造函数
HashMap.put()是HashMap类的方法,构造一个类的时候在方法外面只能定义成员变量和构造函数,不能写入可以执行的代码,同样可以把那些put()放到构造函数里
在或者你可以把hm设为静态变量,写一个静态方法,把初始化hm的东西放到静态方法里
后面main函数里new MyMap.getHm().get(i)因为没有MyMap的实例无法调用MyMap里的方法,new只能对构造函数起作用,无法直接用new来调用类的方法的。所以请在使用类的方法之前先把类实例化
↓这是写进静态方法里,写进构造函数的就是把那个static静态方法里的东西移动到构造函数里
import java.util.*;
class MyMap
{
static HashMap<Integer,String> hm;
static{
hm = new HashMap<Integer,String>();
hm.put(1,"abcd");
hm.put(2,"abc");
hm.put(3,"def");
hm.put(4,"ghi");
hm.put(5,"jkl");
hm.put(6,"mno");
hm.put(7,"pqrs");
hm.put(8,"tuv");
hm.put(9,"wxyz");
}
public HashMap<Integer,String> getHm()
{
return hm;
}
}
class Second
{
public static void main(String[] arge)
{
MyMap mymap = new MyMap();
for(int i=1;i<10;i++)
sop(mymap.getHm().get(i));
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
复制代码
作者:
高照
时间:
2012-9-19 18:04
import java.util.*;
class MyMap
{
HashMap<Integer,String> hm = new HashMap<Integer,String>();
hm.put(1,"abcd");//语句必须放在函数体内,不能直接放在类里面。编译失败,创建对象时也不会自动执行
hm.put(2,"abc");//语句必须放在函数体内,不能直接放在类里面。编译失败,创建对象时也不会自动执行
hm.put(3,"def");//语句必须放在函数体内,不能直接放在类里面。编译失败,创建对象时也不会自动执行
hm.put(4,"ghi");//语句必须放在函数体内,不能直接放在类里面。编译失败,创建对象时也不会自动执行
hm.put(5,"jkl");//语句必须放在函数体内,不能直接放在类里面。编译失败,创建对象时也不会自动执行
hm.put(6,"mno");//语句必须放在函数体内,不能直接放在类里面。编译失败,创建对象时也不会自动执行
hm.put(7,"pqrs");//语句必须放在函数体内,不能直接放在类里面。编译失败,创建对象时也不会自动执行
hm.put(8,"tuv");//语句必须放在函数体内,不能直接放在类里面。编译失败,创建对象时也不会自动执行
hm.put(9,"wxyz");//语句必须放在函数体内,不能直接放在类里面。编译失败,创建对象时也不会自动执行
public HashMap<Integer,String> getHm()
{
return hm;
}
}
class Second
{
public static void main(String[] arge)
{
for(int i=1;i<10;i++)
sop(new MyMap.getHm().get(i));//这样创建了十个对象
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2