HelloWorld中奇怪的错误
背景
小主新入手一款小新pro14(i710代16G轻薄本),总之很香。前两天已经预装了idea2019.3版本,以及JDK11,8。为什么装两个JDK呢,是因为闲着没事干吗,当然不是了,因为对新技术的热情,可以切换着看JDK底层特性。
开始
经过一阵倒腾,建包,开启我的helloWorld
很无语,报了下面这个看不懂的错误。
南辕北辙
由于小主和大多数人一样,是面向百度编程,所以我就把问题贴了出来,打开百度搜索。
果然有不少同学遇到小主相同的问题
排在前面的同学大多都是说java -version 跟javac -version 版本不同,需要把版本调成一致
我们在初学java时候应该采用过如下的命令在黑框命令行执行java程序
#javac java编译命令
javac HelloWorld.java
#java java运行命令
java Helloworld
到小主的电脑跑一下,很遗憾未解决我的问题。
后面连续访问了好几个网页无果:小主突发奇想,会不会是IDE有问题,小主又去下了个eclipse,在eclipse中敲起了HelloWorld,执行未报错。
!!!!难道天要亡我大清(idea),我就不能一直真香下去了吗??不行我要重装一下
下面英文不是提示我check my installation 我要重装一下
A JNI error has occurred, please check your installation and try again
真正解决问题
正当我准备重装的时候,灵机一动,我点到出问题的地方看了一眼,然后打了个断点,开始debug
进入到Classloader.preDefineClass()方法 可以在方法上看到这样一段注释
Classloader类加载器,类加载的后续学习了再总结。
/* Determine protection domain, and check that:
- not define java.* class, 这里是我们关注的地方,不允许以java开头的包名
- signer of this class matches signers for the rest of the classes in
package.
*/
回到我们idea的代码
//天杀的怎么是这个包名啊,不应该是com.hong.learn.lesson1的吗
//一万只草泥马飞过
package java.main.com.hong.learn.lesson1;
public class lesson1 {
public static void main(String[] args) {
System.out.println("Hello World");
}
}
重新修改目录结构,运行正常
叹:终于不用重装了。
总结
1.面向百度编程,有时候确实能带给我们很多便利,因为你遇到的问题别人肯定也遇到过,但它带给我们便利的同时,阻碍了我们对问题的思考,阻碍了自己对技术的追求,也让我们更多的时候遇到问题无从下手。抛开百度,我们需要从问题实际出发,自己去探索,很多时候自己对源码多加深入了解,就能找到问题的答案。
2.学会真正的看穿问题,不能依赖几个关键字搜索,网页信息大多都是游览量高的排在前面,大多数人胡乱搜答案,把很多的错误答案搜索点击量提高,从而一直影响着你快速找到真正的答案。所以首先你得看穿问题究竟是什么,从而也能排除很多错误的答案。