今天出现了一个营弱智的问题,数组的初始化,构造函数是否有返回值。接下来我说下本人的错误与解决办法,希望大家引以为戒!
public class PlayBack implements BasicTimer.BasicTimerCallback {
private MapView mMapView = EChartLib.getInstance().getMapView();
private VesselLayer vessellayer = mMapView.getVesselLayer();
float lat = (float) 38.8;
float lon = (float) 118.145;
static final String TAG = "TAG";
private BasicTimer basicTimer = new BasicTimer(this);
private VesselTrack vesselTrack = new VesselTrack();
private Map<Integer, VesselTrack> map = new HashMap<Integer, VesselTrack>();
public PlayBack() {
Arraysort();
map.put(321, vesselTrack);
vessellayer.prepareHistoryTracks(map);
vessellayer.setHistoryTrackVisible(true);
}
void Arraysort() {
vesselTrack.pts = new VesselTrackPoint[50];
for (int i = 0; i < 50; i++) {
vesselTrack.pts[i] = new VesselTrackPoint();
vesselTrack.pts[i].longitude = lon;
vesselTrack.pts[i].latitude = lat;
vesselTrack.pts[i].t = i;
if (lat < 38.9) {
lat += 0.001;
lon += 0.001;
} else {
lat += 0.002;
lon += 0.0005;
}
}
}
这个是我的初始代码!想必很多大牛或者老手都一下子看出来了问题所在!
下面我详细说一下:
问题1:
public void PlayBack() {}
这是我的构造函数;没有返回值!而我们众所周知,构造函数是不加void。
构造方法是一种特殊的方法,具有以下特点。
(1)构造方法的方法名必须与类名相同。
(2)构造方法没有返回类型,也不能定义为void,在方法名前面不声明方法类型。
(3)构造方法的主要作用是完成对象的初始化工作,它能够把定义对象时的参数传给对象的域。
(4)构造方法不能由编程人员调用,而要系统调用。
(5)一个类可以定义多个构造方法,如果在定义类时没有定义构造方法,则编译系统会自动插入一个无参数的默认构 造器,这个构造器不执行任何代码。
(6)构造方法可以重载,以参数的个数,类型,或排列顺序区分
问题二:
vesselTrack.pts = new VesselTrackPoint[50];
for (int i = 0; i < 50; i++) {
vesselTrack.pts[i].longitude = lon;
vesselTrack.pts[i].latitude = lat;
vesselTrack.pts[i].t = i;
if (lat < 38.9) {
lat += 0.001;
lon += 0.001;
} else {
lat += 0.002;
lon += 0.0005;
}
这个是我的数组实例化并赋值;大家也看到了,我的pts是new了一个【50】。不好意思这个new在java中只是为数组开辟空间,其对象仍为null,所以我们还是要加一句vesswlTrack.pts【i】=new VesselTrackPoint();
这样数组的每隔对象才会实例化;特别是C+的朋友们写java的市属更得注意!!!!