包的定义及使用

在这里插入图片描述

包的定义

共识:同一个目录下不允许存在同名文件。但是在实际的开发之中又不可能出现不重名的情况,为此,在项目里往往会引入包的定义,包就是一个文件夹,也就是说不同的目录中可以存放相同的文件。
Java中使用package关键字定义包。
范例:定义包
在这里插入图片描述
一旦声明了包,就必须将*.class文件保存在包里面,包不是手工定义的,Java专门提供了打包编译操作;
范例:打包编译
在这里插入图片描述
在这里插入图片描述
此时如果程序有包了,那么解释程序的时候必须加上包名称,也就是说此时的Hello类要执行就必须输入:
在这里插入图片描述
所有的Java项目开发过程之中,程序类必须要有包的定义才可以使用,没有包的类不存在。而类的完整名称“包.类”。

包的导入

利用程序包可以将一个很多的*.class类归类保存起来,但是这样一来有可能出现包与包之间进行类的互相调用问题,所以此时就可以利用import语句来解决。
范例:定义一个cn.mldn.util.Message的类

package cn.mldn.util;

class Message {
	public String getInfo(){
		return "www.mldn.cn";
	}
}

范例:定义一个cd.mldn.test.TestMessage类

package cd.mldn.test;
import cn.mldn.util.Message;
public class TestMessage {
	public static void main(String args[]){
		Message msg = new Message();
		System.out.println(msg.getInfo());
	}
}

在这里插入图片描述
之所以造成此问题,是因为此时的Message类的定义中使用的是默认的访问控制权限,这个访问控制权限的特点是,同一包中的类可以互相访问,但是不能被外部包所访问,所以在学习完包之后,对代码有如下规范化要求:以后的类都要求写在包中,而且包中的*.ava文件里面只会有一个public class声明。
总结关于public class与class声明的区别

  • publicclass定义要求文件名称与类名保持一致,而在*.java文件中只允许有一个public class定义,如果该类要被不同的包使用,则必须使用public class声明;

  • class定义的类文件名称可以与类名称不一致,但是在编译之后每一个class声明的类都会产生一个*.class文件,此类只能够在一个包中使用。
    范例:修改Message类的定义

    package cn.mldn.util;

    public class Message {
    public String getInfo(){
    return “www.mldn.cn”;
    }
    }
    多个程序编译的时候要考虑编译顺序,可以进行自动顺序编译:
    在这里插入图片描述
    现在代码出现了两个问题:

  • 问题一:每次都是导入特定的类,在进行导入的时候都要写上完整的类名称,要导入一个包中的多个类可以使用通配符“”完成。
    在这里插入图片描述
    使用“import 包.
    ”的情况并不会将一个包中的所有类都导入进来,包括所谓的类加载实际上只会加载所需要的类。

  • 问题二:有可能在同一个程序中导入不同的包,但是这不同的包有相同的类。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    为了避免使用冲突,建议在操作类的时候直接写上类的完整名称。
    范例:使用完整名称避免错误
    在这里插入图片描述
    这种情况在开发之中一定会出现许多次,所以用的时候就写上完整名称。
    编写顺序:package、import、publicclass。

系统常见包

Java开发类库非常的庞大,而且开发包也非常的多,比较常见的几个包如下:

  • java.lang:像Object、String、Integer、Number都是定义在这个包中定义的,从JDK1.1开始自动导入;
  • java.lang.reflect:反射开发包,直接与框架开发有关系;
  • java.util:Java的工具包;
  • java.util.regex:正则表达式的开发包;
  • java.text:国际化程序支持包;
  • java.io:数据流的开发包(Input、Output),前提:抽象类;
  • java.net:网络编程包;
  • java.sql:数据库的编程包;
  • java.awl、javax.swing:图形界面开发;
    • 在JDK1.0的时候只提供有java.awt的开发包,这个开发包可以实现图形界面的开发,但最初的设计有点仓促,要大量的使用windows的系统函数;
    • 在JDK1.2(Java2)推出了轻量级的组件有了swing开发组件;
  • java.applet.*:是在网页上嵌入的java程序,是Java发展的标记;

jar命令

项目完成之后,不同功能的类要保存在不同的包里,此时会有一个问题:往往有可能是若干个*.class文件完成某一特定的功能组合,那么如果更新也只会更新这几个文件,所以在实际的项目中为了方便管理,往往会利用jar文件负责处理。
在这里插入图片描述
范例:假设有一个Message.java类

package cn.mldn.util;

public class Message {
	public String getInfo(){
		return "www.mldn.cn";
	}
}
  1. 进行打包编译:javac -d . Message.java;
  2. 将开发包打成my.jar文件:jar -cvf my.jar cn;
    在这里插入图片描述
    打成的my.jar文件可以通过rar压缩文件打开,而后在这个文件里面会存在有一个文件夹:META-INF/MANIFEST.MF。(记录了jar文件的相关说明)
  3. 当程序打包完成之后肯定需要进行代码的执行,肯定需要编写测试类;
    在这里插入图片描述
    实际上每一个jar文件都是一个独立的路径,所以要想让jar文件起作用,必须配置CLASSPATH,但是CLASSPATH文件中有一个“.”,所以如果要配置多个CLASSPATH使用“;”分割。
    在这里插入图片描述
    在这里插入图片描述
    以上的配置只能够在当前命令行中使用,如果要想让其成为全局的配置,则需要修改环境属性
    在这里插入图片描述
    如果现在只使用记事本开发程序,那么所有需要的第三方的*.jar文件都必须在此处配置。

总结

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值