Java import语句小迷惑
来源:互联网 发布:qq三国50js小红鬼 编辑:程序博客网 时间:2024/04/29 07:17
Java中使用import语句有两种语法:
1)import+空格+类全限定名+;
2)import+空格+类的全限定名+.+*+;
---使用方法2)时,引入一个包中的所有类,但所有类不包含类的子包中的类
此外,Java程序中有包(package)common,包common中包含有类Bus.java,Car.java,RaceCar.java和包special,而包special中有类Race.java类。
对于如下源代码:
package useimport;
import commom.*;
import commom.special.*;
public class UseImport3{}
在类UseImport3中,我们使用了两个import语句将两个包中的所有类都引入了进来。包括common.RaceCar,common.Car,common.Bus和common.special.RaceCar.我们发现,有两个RaceCar类被引入了进来,但是没有关系,Java允许两个使用import的第2中语法的import语句引入类名重复的类。
但是Java不允许两个使用第一种语法的import语句同时引入两个名字相同的类,也就是说下面的代码是错误的。
package useimport;
import common.special.RaceCar;
import common.RaceCar;
public class UseImport4{}
但Java允许一个使用第一种语法的import语句和一个使用第2种语法的import语句引入类名相同的类,也就是说下面的代码是正确的。
package userimport;
import common.*;
import common.special.RaceCar;
public class UseImport5{}
好的,下面假设我们要在类UseImport3和UseImport5类中使用类common.special.RaceCar,应该怎么办?
在类UseImport3中,因为两个import语句都包含有名字为RaceCar的类,所以,如果直接在类中使用类名RaceCar,Java编译器则会找到两个匹配的全限定类名common.special.RaceCar和common.RaceCar(注意,import语句的前后顺序是没有关系的)。这时候Eclipse的Problems视图就会给出一个错误:The type RaceCar is ambiguous.错误的意思就是无法确定RaceCar的全限定名到底是哪一个。
所以需要在UseImport4中,当第一种import语句引入的类与第二种import语句引入的类都是同一个类的时候,Java编译器会优先处理使用第一种import语句的(因为第一种import语法比较专一)。也就是说,在类UseImport5中,虽然import common.*;和import common.special.RaceCar;都同时引入了名为RaceCar的类,但是Java编译器会认为RaceCar类就是common.special.RaceCar类,而如果需要使用common.RaceCar类,则必须得在类UseImport5的主体中使用其全限定名,修改后的UseImport5中同时使用了common.RaceCar类和common.special.RaceCar类。
package useimport;
import common.*;
import common.special.RaceCar;
public class UseImport5{
RaceCar refToCommonDotSpecialDotRaceCar;
common.RaceCar refToCommonDotRaceCar;}
通过上面的分析可知:RaceCar refToCommonDotSpecialDotRaceCar是类common.special.RaceCar的引用,refToCommonDotRaceCar是类common.RaceCar的引用。
回到类UseImport3,因为使用第一种语法引入的类的优先级高于第二种语法,所以也可以给UseImport3添加一个使用第一种语法的import语句,来告诉编译器类主体中的RaceCar代表的是类common.special.RaceCar,看UseImport6类的代码。
package useimport;
import common.*;
import common.special.RaceCar;
import common.special.RaceCar;
public class UseImport{
RaceCar refToCommonDotSpecialDotRaceCar;}
小结一下吧:
Java编译器不允许在同一个源文件中存在两个或多个使用第一种语法的import语句引入类名相同的类。
如果第一种语法的import语句引入的类和第二种语句引入的类有冲突(类UseImport5),Java编译器会采用第一种import语法结构引入的类。
- Java import语句小迷惑
- Java中的import语句
- Java之import语句
- Java中import语句的学习
- Java之package和import语句
- import语句
- 关于JAVA import 的一个小问题
- 条SQL语句的迷惑。
- java小语句片段
- JAVA让我迷惑
- Java初学的迷惑
- 学习java的迷惑
- java接口和类(一)import语句
- JAVA学习之包与import语句(三)
- Java面向对象4——package和import语句
- Java基础小记之package和import语句
- 迷惑
- 迷惑
- ChartWizard 添加任意类型图表
- 计算输入日期的下一天的nextDate()
- Eclipse界面
- User_recyclebin中同名表的清除与恢复
- 嗯
- Java import语句小迷惑
- Java中的命名习惯
- ortp库使用入门(转)
- Unicode与字符集
- 基于Arm(OMAP3530)平台的Linux上编译QT4.6.2
- Java 包小结
- Eclipse快捷键
- 基于Arm(OMAP3530)平台的Linux上编译QT4.6.2
- 在VC的MFC的对话框中建立ClassWizard时,提示Parsing error: Expected "=".Input Line:……