命名空间
当一个 Java 工程中存在大量的类,包括自定义的类,第三方类库的类以及 Java 自带类库的类等,必定会出现类名重复的情况,那么,存在相同类名的类时,编译器如何才能确定调用的是哪个类呢?
C++ 中通过类包含函数来避免与其他类中的函数名冲突,但是 C++ 依然允许全局数据和全局函数的存在,因此还是需要一种办法来解决函数名冲突,C++ 的做法是通过几个关键字引入命名空间的概念。
名字可见性
Java 中使用了一种全新的办法来避免类名的冲突,利用反转域名来代表一个类库(即包
),保证了类库的独一无二,例如com.view.util
与com.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");
静态方法或者静态变量通常采用类名直接调用。