命名空间

当一个 Java 工程中存在大量的类,包括自定义的类,第三方类库的类以及 Java 自带类库的类等,必定会出现类名重复的情况,那么,存在相同类名的类时,编译器如何才能确定调用的是哪个类呢?

C++ 中通过类包含函数来避免与其他类中的函数名冲突,但是 C++ 依然允许全局数据和全局函数的存在,因此还是需要一种办法来解决函数名冲突,C++ 的做法是通过几个关键字引入命名空间的概念。

名字可见性

Java 中使用了一种全新的办法来避免类名的冲突,利用反转域名来代表一个类库(即),保证了类库的独一无二,例如com.view.utilcom.view.bo,在这两个类库中可以存在类名相同的类,但同一个类库中不能同名。

使用其他类库的类

因此,在 Java 代码中,若要使用其他类库的类时,通过关键字import来确切的告诉编译器你需要使用的类。java.lang中的类不需要手动导入。
例如:

import java.util.ArrayList;

若需要使用的类在同一个源文件中,则不管它定义在哪个位置,都可以被编译器定位到。(Java消除了向前引用问题)

实际开发中,可能存在导入了某个类后,又需要使用另一个包中的同名类:

import java.util.ArrayList;

class ExportUtil{
	public void export(String str){
		ArrayList arr = new ArrayList();
		//使用时需要带上包名
		org.test.ArrayList list = new org.test.ArrayList();
	}
}

静态域

class Test{
	static int index = 66;

	public static void print(String args){
		System.out.println(args);
	}
}

上述代码中,类Test中使用关键字static定义了一个静态变量和一个静态方法,静态变量或方法在使用时不依赖于类的对象使用,并且是以类为基准,即该类的所有对象都共用一个静态域

如何使用静态域中的对象或方法:

//直接通过类名使用
System.out.println(Test.index);
Test.print("abc");

//也可以通过对象使用
Test test1 = new Test();
Test test2 = new Test();
test1.index ++;
System.out.println(test2.index);//这里输出67
test1.print("666");

静态方法或者静态变量通常采用类名直接调用。