Java基础 package和import

Java基础 package和import

java语言当中的包机制: 包又称为package,java引入package这种语法机制主要是为了方便程序的管理,不同功能的类被分门别类放到不同的软件包中,易维护 定义package: 在java源程序的第一行上编写package语句 package只能编写一个语句,语法结构:package 包名; 包名的命名规范:
  1. 公司名称倒序 + 项目名 + 模块名 + 功能名
  2. 采用这种方式重名的几率较低,例如com.e1yu.project.user.service
  3. 包名全部小写,包名也是标识符,必须遵守标识符的命名规则
  4. 一个包名对应一个目录
package com.e1yu.javase.day01;  //4个目录,目录之间用点隔开
public class Test 
{
    public static void main(String[] args) 
    {
        System.out.println("Hello World!");
    }
}

如果继续通过javac Test.java编译,然后使用java Test运行程序,会报错java.lang.NoClassDefFoundError。使用了package机制之后,类名不再是原来的,所以运行就会报错

这时候需要做的是,创建com文件夹,在com文件夹下创建e1yu文件夹,在e1yu文件夹下创建javase文件夹,在javase文件夹下创建day01文件夹,将class文件放在day01文件夹:

Test.java
com
-e1yu
--javase
---day01
----Test.class
然后再Test.java目录下执行java com.e1yu.javase.day01.Test,就可以,如果我们不想创建那么多文件夹可以再编译的时候自动生成:
javac -d 编译之后存放路径 java源文件路径
javac -d . *.java
将当前路径.java编译之后存放到当前路径下

运行:
JVM类加载器classloader默认从当前路径加载
创建一个Test1文件:
package com.e1yu.javase.day01;  
public class Test1
{
    public static void main(String[] args) 
    {
        // 完整类名是:
       com.e1yu.javase.day01.Test t = new com.e1yu.javase.day01.Test();
       System.out.println(t);

       // Test和Test1在同一个软件包中,可以省略包名
       Test tt = new Test();
       System.out.println(tt);
    }
}

编译和运行:
javac -d . *.java

java com.e1yu.javase.day01.Test1
现在创建一个Test2:
package com.eyujun;  
import com.e1yu.javase.day01.Test;
import com.e1yu.javase.day01.*;
public class Test2
{
    public static void main(String[] args) 
    {
        // 创建Test对象
        com.e1yu.javase.day01.Test t = new com.e1yu.javase.day01.Test();
        System.out.println(t);
        
        // 简单写法
        Test tt = new Test();
        System.out.println(tt);

    }
}
编译运行:
javac -d . *.java

java com.eyujun.Test2

import语句用来完成导入其它类,同一个包下的类不需要导入,不在同一个包下的需要手动导入。语法格式:import 类名;/import 包名.*;,import语句编写在package语句之下,class语句之上

总结: 不在java.lang包下,并且不在同一个包下,需要使用import导入
public class Test01 {
    public static void main(String[] args) {
        // Test01 类和Scanner类不再同一个包下
        // java.util就是Scanner类的包名
        java.util.Scanner s = new java.util.Scanner(System.in);
        String str = s.next();
        System.out.println("您输入的字符串是:" + str);
    }
}
现在可以使用import导入:
import java.util.Scanner;
// import java.util.*;
public class Test01 {
    public static void main(String[] args) {
        // Test01 类和Scanner类不再同一个包下
        // java.util就是Scanner类的包名
        Scanner s = new Scanner(System.in);
        String str = s.next();
        System.out.println("您输入的字符串是:" + str);
    }
}
分享到 :

发表评论

登录... 后才能评论