package和import

1、package

    package类似c++中的命名空间namespace,它用来解决名字冲突问题,"package + 包名"用来将源文件中类放到同一个包下,一个源文件只能包含一条package语句。

    如下所示的HelloWorld类加入到了lee类中,使用javac命令编译源文件的时候会自动在目标目录下生成lee目录,里面包含了HelloWorld的字节码文件。类加入包后,使用java命令来执行它的时候需要加上包名,如java lee.HelloWorld,而且当前目录应该是lee目录所在的文件夹,而不是字节码文件HelloWorld.class所在的文件夹lee。

    需要注意的一点是:即使在当前目录下也应该使用javac -d .来指定使用当前目录来生成lee包,否则不会自动生成lee包目录。

//HelloWorld.java
package lee;

public class HelloWorld
{
	public static void main(String[] args)
	{
		System.out.println("Hello World");
	}
}

    其它的public类中想要使用HelloWorld类的话需要加上包名,如果源文件与lee包不在同一目录的话,编译的时候使用-classpath指定lee包所在目录或者设置CLASSPATH环境变量:

//Test.java
package woo;

public class Test
{
	public static void main(String args[])
	{
		lee.HelloWorld hw = new lee.HelloWorld();
		System.out.println("Test");
	}
}

2、import

    可以使用“import 包名.类名”来导入包lee中的HelloWorld类,或者使用“import 包名.*”导入包中所有的类,这样引用HelloWorld类的地方就不用再加包名了。显然如果两个包中含有相同的名字的话就不能使用import同时导入这两个包中的类了,否则会引起混乱:

//Test.java
package woo;
import lee.HelloWorld;

public class Test
{
	public static void main(String args[])
	{
		HelloWorld hw = new HelloWorld();
		System.out.println("Test");
	}
}

  3、子包

    可以定义一个子包,如下所示的lee.sub:

//Apple.java
package lee.sub;
public class Apple{}
//Test.java
package woo;
import lee.sub.Apple;

public class Test
{
	public static void main(String args[])
	{
		Apple a = new Apple();
		System.out.println("Test");
	}
}

4、import static

    import static 用来导入类中静态成员。

    java的核心类都放在java包及其子包下,如java.lang、java.util、java.net、java.io等。

    java.lang包下的类(System、String、Math、Thread等)可以直接使用,无需加上包名(java.lang.System)或者用import导入(import java.lang.System),系统会自动导入。

    java扩展的许多类都放在javax包及其子包下。

//Test.java
package woo;
import static java.lang.System.*;
import static java.lang.Math.*;

public class Test
{
	public static void main(String args[])
	{
		String str = "test";
		out.println(str);
		out.println(sqrt(256));
	}
}


    

猜你喜欢

转载自blog.csdn.net/milanleon/article/details/80321904