深入了解--Java包的定义与使用

包的定义

在开发中,类要放在包里面,为了防止有可能产生类的重用定义,就会将程序文件放在不同的目录下,这个目录就叫做包,如果程序中有包,那么产生的“*.class”文件就需要放在包中

包的导入

利用包的定义实际上就可以将不同的功能的类保存在不同的包之中,但是这些类彼此之间一定会存在有互相调用的关系,那么在这个时候就需要使用import语句来导入其它包中的程序类。

“ import 包名 ” 或者“ import 包 . * ”

注意:关于public class与class定义的区别?

  • public class: 类名称必须与文件名称保持一致, 一个 *.java文件里面只允有一个public class ,同时如果一个类需要被其它的包所使用,那么这个类一定要定义为public class;
  • class: 类名称可以与文件名称不一致,并且在一个* .java 文件里面可以提供有多个class定义编译后将形成不同的*.calss的文件,但是这些类只能够被本包所访问,外包无法访问。
静态导入

从JDK1.5开始对于类中全部由静态方法提供的特殊类是可以采用静态导入处理的。
比如:

package cn.qq.test;
import cn.qq.util.MyMath;//导入包,此包中的方法全是静态方法
public class TestMath {
    
    
	public static void main (String args []) {
    
    
		System.out.println(MyMath.add(10,20,30)) ;
		System.out.println(MyMath.sub(30,20)) ;
	}
}
/*              可以改成         */
package cn.qq.test;
import static cn.qq.util.MyMath.*;//静态导入
public class TestMath {
    
    
	public static void main (String args []) {
    
    
		System.out.println(MyMath.add(10,20,30));//不需要在引用包名调用
		System.out.println(MyMath.sub(30,20));
	}
}

当使用了静态导入处理之后就好比该方法是直接定义在主类中的,可以由主方法直接调用。方便了程序的编写

生成jar文件

当一个项目开发完成之后一定会存在有大量的*.class文件,那么对于这些文件的管理往往可以利用一种压缩结构的形式来进行处理,而这样的结构在Java之中就被称为jar文件,如果要想将程序打包为Jar文件,那么可以直接利用jdk中提供的jar命令完成
jar命令:可以在java程序的文件目录下输入jar --help命令(cmd)来查看各种jar命令。
用cmd来打包处理:

  1. 程序:
package cn.qq.util,
public class Message {
    
    
	public String getContent() {
    
    
		return "www.qq.com"
	}
}
  1. 对程序进行编译与打包处理:(在Java的存放程序的目录下)
  • 对程序打包编译: javac -d . Message. java;
  • 此时会形成cn的包,包里面有相应的自保与*.class文件,将其打包为qq.jar: jar -cvf qq. jar cn
    “-c”: 创建一个新的jar文件;
    “-v”:得到一个详细输出;
    “-f”: 设置要生成的jar文件名称,本处定义的是“qq.jar”
  1. jar文件的使用,要通过CLASSPATH设置路径“SET CLASSPATH=. ;d:\Javadome\qq.jar
  2. 随后就可以正常编译并使用这个类(TestMessage)了

系统常用包

  • java.lang:像String、Number、 Object 等类都在这个包里面,这个包在JDK1.1之后默认导入
  • java.lang.reflect:反射机制处理包,所有的设计从此开始;
  • java.util:工具类的定义,包括数据结构的定义;
  • java.io:进行输入与输出流操作的程序包;
  • java.net: 网络程序开发的程序包;
  • java.sql: 数据库编程的程序包;

访问控制权限

访问范围 private default protected public
同一包中的同一类
同一包中的不同类 ×
不同包的子类 × ×
不同包的所有类 × × ×

猜你喜欢

转载自blog.csdn.net/qq_43337254/article/details/107914425