包机制详解

一、

终极结论:

1、package和import
1.1、package
第一: package 出现在java源文件第一行 。
第二:带有包名怎么编译? javac -d . xxx.java
第三:怎么运行?
java完整类名|
1.2、 import
import什么时候不需要?
java. lang不需要
同包下不帶要。
其它一律都需要。
怎么用?
import完整类名;
import包名.*;

1、为什么要使用package?
        package是java中包机制。包机制的作用是为了方便程序的管理。
        不同功能的类分别存放在不同的包下。(按照功能划分的,不同的
        软件包具有不同的功能。)

        2、package怎么用?
        package是一个关键字,后面加包名。例如:
        package com.bjpowernode.javase.chapter17;
        注意: package语句只允许出现在java源代码的第一行

        3、包名有没有命名规范?有
        一般都采用公司域名倒序的方式(因为公司域名具有全球唯一性)
        包名命名规范:
        公司域名倒序+项目名+模块名+功能名

        4、对于带有package的java程序怎么编译?怎么运行?
        采用之前的编译和运行不行了。
        类名不再是: HelloWorld了 。
        类名是: com.bjpowernode.javase.chapter17.HelloWorld
        编译:
        javac -d . HelloWorld.java
        解释一下:
        javac负责编译的命令
        -d 带包编译
        . 代表编译之后生成的东西放到当前目录下(点代表当前目录)
        HelloWorld.java 代表被编译的java文件名。
        运行:
        java com.bjpowernode.javase.chapter17.HelloWorld

对于带有package的java程序的编译和运行在原始EditPlus工具里面已经和原始的javac HelloWorld.java 有所不同了:

在此目录下编写带有package程序代码:

package com.bjpowernode.javase.chapter16;
public class HelloWorld
{
	public static void main(String[] args){
		System.out.println("hello world");
	}
}

能够用原来的编译方法进行编译:

 但是运行的时候就出来了错误:

 那么应该怎么编译和运行呢?

包路径如下所示: 

 

HelloWorld完整类名:
 com.bjpowernode.javase.chapter17.HelloWorld

 

 二、

在idea工具里面打包的方法如下:

 输入包名即可:

三、两个程序在同一个包当中的时候,可以不用import导包机制进行调用

 类中的代码如下所示:

package com.bjpowernode.javase.chapter16; // 和HelloWorld同一个包

public class Test01
{
	public static void main(String[] args){
		// 创建HelloWorld对象
		// HelloWorld完整类名:com.bjpowernode.javase.chapter16.HelloWorld
		com.bjpowernode.javase.chapter16.HelloWorld hw =new com.bjpowernode.javase.chapter16.HelloWorld();
		System.out.println(hw);
		// 思考:包名可以省略吗?
		// 可以 因为HelloWorld和Test01在同一个package下
		HelloWorld hw1 =new HelloWorld();
		System.out.println(hw1);
	}
} 

 

运行结果如下: 

 四、关于import机制的使用

5、import什么时候使用?
        A类中使用B类。
        A和B类都在同一个包下。不需要import.
        A和B类不在同一个包下。需要使用import.

        import怎么用?
        import语句只能出现在package语句之下,class声明语句之上。
        import语句还可以采用星号的方式

 当Test02类和HelloWorld类不在同一个包下的时候不能进行相互调用:

package com; // 当不在同一个包下的时候
// import com.bjpowernode.javase.chapter16.HelloWorld; // 导HelloWorld
import com.bjpowernode.javase.chapter16.*; // *代表所有 即可以把这个包名下的所有类

public class Test02
{
	public static void main(String[] args){
		/*
		// 报错: 找不到符号
		// 不在同一个包下不能省略包名
		HelloWorld hw =new HelloWorld();
		System.out.println(hw);
		*/
		
		/*
		// 去 com.bjpowernode.javase.chapter16包里面找到HelloWorld才能进行调用
		// 显然这样写的话代码太过于冗余
		// 因此我们可以把HelloWorld所在的包import导入进来直接进行HelloWorld调用

		com.bjpowernode.javase.chapter16.HelloWorld hw1 =new com.bjpowernode.javase.chapter16.HelloWorld();
		System.out.println(hw1);//com.bjpowernode.javase.chapter16.HelloWorld@15db9742
		com.bjpowernode.javase.chapter16.HelloWorld hw2 =new com.bjpowernode.javase.chapter16.HelloWorld();
		System.out.println(hw2);//com.bjpowernode.javase.chapter16.HelloWorld@6d06d69c
		com.bjpowernode.javase.chapter16.HelloWorld hw3 =new com.bjpowernode.javase.chapter16.HelloWorld();
		System.out.println(hw3);com.bjpowernode.javase.chapter16.HelloWorld@7852e922
		*/
		
		HelloWorld hw =new HelloWorld();
		System.out.println(hw); //com.bjpowernode.javase.chapter16.HelloWorld@15db9742

	}
}

五、解释Scanner

package com.bjpowernode.javase.chapter16;
import java.util.Scanner; // 导入Scanner类的包 import java.util.*;
public class Test03
{
	public static void main(String[] args){
		/*

		// 为什么要这样写?
		// Test03类和Scanner类[SUN公司编写的]不在同一个包下
		// java.util 就是Scanner类的包名
		java.util.Scanner s =new java.util.Scanner(System.in);
		String str =s.next();
		System.out.println("你输入的字符串是:"+str);
		
		*/

		// 还可以这样写
		Scanner s =new Scanner(System.in);
		String str =s.next();
		System.out.println("字符串:"+str);

	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值