提到classpath,就感觉自己挺蠢的,啥错都让我给鼓捣出来了。为啥?因为不听话啊~
下面是我写的java代码实例TestPoint.java:
class Point {
int x;
int y;
int z;
Point(int _x,int _y, int _z){
this.x = _x;
this.y = _y;
this.z = _z;
}
void setX(int _x){
x = _x;
}
void setY(int _y){
y=_y;
}
void setZ(int _z){
z=_z;
}
//当前点到另一个点的距离平方
int getDistance(Point p){
return (x-p.x)*(x-p.x)+(y-p.y)*(y-p.y)+(z-p.z)*(z-p.z);
}
}
public class TestPoint{
public static void main(String[] args) {
Point p = new Point(1,2,3);
Point p1 = new Point(0,0,0);
System.out.println(p.getDistance(p1));
p.setX(5.0);
System.out.println(p.getDistance(new Point(1.0,1.0,1.0)));
}
}
编译没有错,运行试试:
运行出错了,看着提示说:main函数这里的问题?检查了几遍,没有发现main函数写错了啊?百度一下再看看,都提示说是main结构写错了,有说参数写错了,之前我写过关于main函数的介绍,里面有提到,也有说字母拼错了,等等。
那么是哪里的问题呢?让伙伴也参与进来吧,不过他也是觉得我的代码有问题,给我左改右改,还是没解决出来,问题依旧存在。就这样时间恍恍惚惚出去N个小时了,还是我来吧。真的,我的代码真没有写错,为了防止检查失误,我专门将视频上的代码一字一字的对比,都没有问题。最后甚至将源码拿过来对比,也没有错位。甚至我将源码也编译了,结果错误也是相同的。瞬间,感觉心情好点了,因为下定义的认为源码都是有问题的。那么问题到底在什么地方呢?
有时候确实不得不相信存在灵感这么一回事,那么一瞬间的事,或许就能解决一个大问题呢。说来,幸运的是,我也来了这么一次“灵感”:视频中有提到classpath环境配置获取class文件的时候是从前向后找的。
目录E:\IT\实践\J2SE\TestPoint在目录E:\IT\实践\J2SE后面,而java运行的时候,寻找class时是从前往后查找的,即先要从目录E:\IT\实践\J2SE查找类,找到了就不再向下找,找不到就继续向下一个目录里面找。
那么我就在想会不会是前面有相同的class了呢?返回上一目录,point.class文件狠狠的刺激了我的眼睛。心中更是有些激动了。
果断删除,重新编译和运行:
我滴乖乖,原来真是这里的问题啊,有点欲哭无泪的样子。上午就遇到这个问题,中午鼓捣了一阵子,下午还花费了将近多半个小时,结果就是因为没有牢记一句话:“classpath环境配置的目录都是从前向后查找class文件”。当时视频中只是提到了一句,脑子有印象,但一直没在那个方向考虑。
看来,还是多注意细节啊,要不吃亏啊!所幸,发现的早。就犹如老师说的,错误发生的越早越好,越早越有利!
不过,这也算是学习到了呢!但是这样到底方便呢,还是不方便呢?我也说不好,也不好评价,毕竟这么多年了,都一直这样,肯定有这样的价值,否则官方早就更新了呢。我们都记得:classpath环境配置是从前向后查找我们需要的class文件的,所以尽量不要出现相同的类。