记录一次编译报错:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
at l.Main.main(Main.java:5)
一直以为是main函数出了问题,找了很多次都不对;结果发现
,包名不对,真想锤自己!
我的java文件是放在l下面,而我却写了一个不存在的东西,自然是不对的,而编译报错却把我误导了。说到底,是对package的概念不够清晰。下面有一些包的概念
- 当我们没有使用package语句时,我们的类都被放到了一个默认缺省包,这也是为什么我们运行Java程序时,在运行目录下面不能有同名的.class文件。
- 包,可以理解成文件夹,因为它是一种树形结构的路径,当我们用package把包声明到某个package下面时,我们也要把它的.class放到以该package为名字的目录下,否则将找不到类。
- 有包的类和无包的类互相访问有以下规则:(1)无包的类可以访问有包的类, 直接导入即可;(2)有包的类无法访问无包的类, 直接访问是找同一个包中的, 由于不同包需要导入, 而无包的类无法导入;(3)在定义类的时候, 为了让别人都能使用到,所以一定要定义一个包。
- Java的包表面上看(从路径上看)是有等级的,但实际上并没有,比如java.awt,java.awt.color是两个地位相同的包。java.awt.color并不属于java.awt。
- package的作用就是 c++ 的 namespace的作用,防止名字相同的类产生冲突。Java编译器在编译时,直接根据package指定的信息直接将生成的class 文件生成到对应目录下。例如package aaa.bbb.ccc
编译器就将该 .java 文件下的各个类生成到 /aaa/bbb/ccc/
这个目录下。Java中的一个package(包)就是一个类库单元,包内包含有一组类,它们在单一的名称空间之下被组织在了一起。这个名称空间就是包名。
所以说学编程手动打码真的很重要!