anonymous的Java学习笔记(8)——Java面向对象之package、import和import static详解

[toc]

packageimportimport static

Java引入了包(package)机制,提供了类的多层命名空间,用于解决类的命名冲突、类文件管理等问题。

Java允许将一组功能相关的类放在同一个package下,从而组成逻辑上的类库单元。

如果希望把一个类放在指定的包结构下,应该在Java源程序的第一个非注释行放置如下格式的代码:

package packageName;

一旦在Java源文件中使用了这个package语句,就意味着该源文件里定义的所有类都属于这个包。位于包中的每个类完整类名都应该是包名和类名的组合,如果其他人需要使用该包下的类,也应该使用包名加类名的组合

构成Java包机制的两大要素

  • 源文件里使用package语句指定包名。
  • class文件必须放在对应的路径下。

Java包机制

包名命名规则

  • Java语法只要求包名是有效的标识符即可,但从可读性规范角度来看,包名应该全部是小写字母,而且应该由一个或多个有意义的单词连缀而成。
  • Oracle建议使用公司Internet域名倒写来作为包名 ,例如公司的Internet域名是crazyit.org,则该公司项目的所有类都建议放在org.crazyit包及其子包下。
  • package语句必须作为源文件的第一条非注释性语句,一个源文件只能指定一个包,即只能包含一条package语句,该源文件中可以定义多个类,则这些类将全部位于该包下。

import关键字

import语句可以简化编程,可以导入指定包下某个类或全部类。

  • 同一个包下的类可以自由访问。无需使用import关键字导入该类(包名+类名组合)
  • 不同包下的类互相调用时需要使用import关键字
    • import可以向某个Java文件中导入指定包层次下某个类或全部类。
    • import语句应该在package语句(如果有的话)之后,类定义之前。
    • 一个Java源文件只能包含一个package语句,但可以包含多个import语句。多个import语句用于导入多个包层次下的类。
  • import语句导入语法
    • 导入单个类(一般类名与源文件名(也就是xxx.java)都是一致的)
      import com.abc.part_three.Loop99MultiplicationTable;
      
    • import导入指定包下的全部类
      //*只代表part_three包下的所有类,不代表包(比如part_three包下的子包)
      import com.abc.part_three.*;
      
  • 一旦在Java源文件中使用import语句来导入指定类,在该源文件中使用这些类时就可以省略包前缀,不再需要使用类全名。
  • 极少数极端情况下不能使用import语句,只能在源代码中使用类全名。

Java默认为所有源文件导入java.lang包下的所有类,因此前面在Java中使用StringSystem类时都无须使用import语句来导入这些类。但对于前面介绍数组时提到的Arrays类位于java.util包下,则必须使用import语句来导入该类。

import static静态导入

JDK1.5后增加了一种静态导入(使用import static语句)的语法,它用于导入指定类的某个静态成员变量、方法或全部的静态成员变量、方法。
*

  • 导入指定类的单个静态成员变量/方法语法
    //PI是java.lang.Math类的静态成员变量(类变量使用static修饰),表示π常量。
    import static java.lang.Math.PI;
    
  • 导入指定类的全部静态成员变量/方法语法
    //导入java.lang.System类的全部静态成员变量和方法
    import java.lang.System.*;
    

代码示例

package com.abc.part_four;

//PI是java.lang.Math类的静态成员变量(类变量使用static修饰),表示π常量。
import static java.lang.Math.PI;

import static java.lang.Math.sqrt;
import static java.lang.System.*;


/**
 * @author mi
 */
public class Person2Test {

    public static void main(String[] args) {
        /**
         * out是java.lang.System类的静态成员变量,代表标准输出。
         * PI是java.lang.Math类的静态成员变量,代表π常量
         */
        //输出:3.141592653589793
        out.println(PI);
        //直接调用Math类的sqrt静态方法
        //输出:16.0
        out.println(sqrt(256));
    }

}

一句话总结importimport static的作用

  • Java源文件中使用import可以在写代码时省略写包名;使用import static可以在写代码时省略写类名。
  • import语句和import static语句都是用于减少程序中代码编写量的。

Java中常用的包

Java的核心类都放在Java包以及其子包下,Java扩展的许多类都放在Javax包以及其子包下。

  1. java.lang: 这个包下包含了Java语言的核心类,如StringMathSystemThread类等,使用这个包下的类无须使用import语句导入,系统会自动导入这个包下的所有类。
  2. java.util: 这个包下包含了Java的大量工具类/接口集合框架类/接口,例如ArraysListSet等。
  3. java.net: 这个包下包含了一些Java网络编程相关的类/接口。
  4. java.io: 这个包下包含了一些Java输入/输出编程相关的类/接口。
  5. java.text: 这个包下包含了一些Java格式化相关的类。
  6. java.sql: 这个包下包含了Java进行JDBC数据库编程的相关类/接口。
  7. java.awt: 这个包下包含了抽象窗口工具集(Abstract Window Toolkits)的相关类/接口,这些类主要用于构建图形用户界面(GUI)程序
  8. java.swing: 这个包下包含了Swing图形用户界面编程的相关类/接口,这些类可用于构建平台无关的GUI程序。