JAVA:不同包(package)的类之间如何调⽤
(import)
版权声明:本⽂为博主原创⽂章,未经博主允许不得转载。 blog.csdn/jingzi123456789/article/details/69536524
【1】问题描述
Java由于应⽤了package的机制,将不同的类存放在不同 的类名空间中,如果不同包之间互相调⽤其中的类时,该怎么办呢,是直接调⽤还是有什么其他⽅法呢?
【2】属于不同包的类之间的调⽤⽅法
程序1:Test.java
程序2:TestPackage.java
程序1和2都放在同⼀⽬录下:
执⾏
package ample;
public class Test
{
public void print ()
{
System.out .println("Hello World!");
}}
package org.it315;
public class TestPackage
{
public static void main (String[] args)
{
new Test().print();
}
}
出错的原因是:在类TestPackage中直接调⽤类Test,编译器会认为这两个类应在同⼀个包中,即Test完整名称为org.it315.Test。因此,在没有使⽤import语句时,可以将“程序2”按照下⾯修改。
修改“程序1”
执⾏
【3】import 在上⾯的修改过程中是,要调⽤的类直接将⼀个类的全名给写出来,即加上包名前缀:ample。
新的问题来了,如果在程序中,要调⽤很多不再同⼀个包中的类,按照上述的做法就必须在类名前加上包名前缀。这时,为了简化书写操作,就可以使⽤import语句来简化此问题。通过使⽤import语句来导⼊指定的类的所属包即可。import语句的做法就是在每个.java⽂件的第⼀条package语句的后⾯添加要调⽤的类的包名。
语法格式为:import PackageName.*;
import PackageName.ClassaName;对“程序2”进⾏修改:package org.it315;
public class TestPackage
{
public static void main (String[] args)
{
new ample.Test().print();
}
}
执⾏
通过重新编译可以发现,正是import语句的使⽤,我们在使⽤某个包⾥的类时,就不再需要写上⼀长串的包名了(如:ample)。
“标记1”和“标记2”所代表的语句的区别是:”标记1“的import语句导⼊了整个包中的类,此时程序凡是遇到的
ample包中的类,都不再写包名(ample)了。”标记2“的import语句只是导⼊了该包中的Test类,对该包中的其他类不起作⽤,在程序遇到Test类时,就不再写包名了。然⽽,对于包中其他的类的调⽤,就必须写上完整的包名。
【4】import使⽤注意事项
如果两个包中有相同的类名,程序在调⽤这两个指定的类时,就必须写上完整的包名。如,java.util、java.sql包中都有Date类,程序⼜同时导⼊了这两个包中的所有类,如:
这时程序要调⽤Date类时就需要这个指定的类的地⽅写上完整的包名,如:java.sql.Date();或者增加⼀个特定的import语句来解决这个问题:import java.sql.Date;只能使⽤星号(*)导⼊⼀个包,⽽不能使⽤import.java.*或import java.*.*导⼊以java为前缀的所有包。⽗包与⼦包:如org.it.315.* 和 org.it
import语句应该位于源⽂件的顶部(但是位于package语句的后⾯),位于类定义之前。修该“程序2“
package org.it315;
import ample.*;//标记1
//import ample.Test;//标记2
public class TestPackage
{
public static void main (String[] args)
{
new Test().print();
}}
import java.util.*;import java.sql.*
package org.it315;
import org.it315.*;
public class TestPackage
{
public static void main (String[] args)
{
new Test().print();
}
}
执⾏
可以发现,编译不成功。由于只是import了类Test的⽗包,Test本⾝所在的包并没有导⼊进去。
再次修改”程序2”
执⾏,编译成功,运⾏成功。
【5】静态导⼊
import语句不仅可以导⼊⼀个特定的类或整个包。还可以导⼊静态⽅法和静态变量。静态导⼊是JDK1.5版本新增加的⼀个特性,尽管通常被称为“静态导⼊”,但注意语法上不是 static import ,⽽是 import static 。
当在⼀个类中需要使⽤外部包中的静态成员变量或成员⽅法时,可以使⽤以下⽅式导⼊外部静态成员:
(1)import static 包名.类名.静态成员变量名;
(2)import static 包名.类名.静态成员⽅法名; (3)import static 包名.类名.*;//使⽤通配符“*”导⼊某个类的所有的静态成员。
⽤实例来说明静态导⼊的⽤法: (1)按照上述的import导⼊⼀个类package org.it315;
import ample.*;
public class TestPackage
{
public static void main (String[] args)
{
new Test().print();
}
}
package ample;
public class TestStaticImport
{
public static final int age = 100;
public static final String name = "Brian";
public static void printAge()
{
System.out.println("AGE = " + age);
}
public static void printName()
{
System.out.println("NAME = " + name);
}
}
package blog.csdn;
import ample.TestStaticImport;
public class TestPackage
{
public static void main(String[] args)
{
int AGE = TestStaticImport.age;
String NAME = TestStaticImport.name;
//new TestStaticImport().printName();
//new TestStaticImport().printAge();
TestStaticImport.printName();
TestStaticImport.printAge();
System.out.println(AGE);
System.out.println(NAME);
}
}
(2)使⽤import static 导⼊静态成员函数和变量package ample;
public class TestStaticImport
{
public static final int age = 100;
import语句public static final String name = "Brian";
public static void printAge()
{
System.out.println("AGE = " + age);
}
public static void printName()
{
System.out.println("NAME = " + name);
}
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论