Package包机制

一、Java包的概念和作用

  1. “包”是是由一组类和接口所组成的具有一定功能的集合。
  2.  简单地说,将一组功能相关的类和接口打包起来形成的整体,就是包。
  3. 在java中每定义好一个类,通过java编译器进行编译以后,都会生成一个扩展名为.class的文件,当这个程序的规模逐渐庞大时,很容易发生类名称冲突的现象。为了管理成千上万的类,java提供了一种管理类的文件机制--包。
  4. java可运行程序是一组可以打包并压缩为一个Java文档文件(JAR,使用Java的jar文档生成器)的.class文件。Java解释器负责这些文件的查找、装载和解释。
  5. 使类的组织更加合理,避免类的名称冲突。
  6. “包” 具有一定的访问控制能力,可以从更上层的角度进行访问权限控制。
  7. “包”可以理解为文件夹 ,因为他是一种树形结构的路径。
  8. 提供类的命名空间:
    1. 包内包含了一组类,他们在单一的名字空间之下被组织在了一起。
    2. 每个Java包为类提供了一个命名空间。
    3. 两个类如果名字相同,只要所属的包不同,Java就会认为它们是不同的类
    4. 这样,在设计类时,就不需要考虑它会不会与现有的类(包括Java系统类)重复,只需要注意别与同一个包里的类重复就可以了。
       

二、创建包

①创建包的两种方式:

1.在ide中创建包

2.在类中指定包名

  • 需要将 package 包名 表达式放在程序的第一行,必须是非注释代码。
  • 当使用package关键字为类指定包名以后,包名将会成为类名的一部分,表示这个类必须指定全名。
  • 例如cn.edu.mju.user包下的user.java类时,需要形如cn.edu.mju.user.user.java的表达式

②默认包

 

  • 对于没有指定包名的Java文件,系统认为它们都属于一个默认的包。
  • 如果没有把自己的Java类放入某个包中,那么任何默认包里的对象都可以访问它,并且不局限于同一个子目录下。
  • 因此,应当在每个Java文件的顶部都放上package关键字,指明它属于哪个包。
  • 包名也应当是独一无二的。

③包的命名方法:

  • Java建议以公司或自己的域名作为包名,因为域名肯定是独一无二的。
  • 包的命名方法是将域名去除开头的“www”,再按分隔点颠倒过来,后面加上包的功能名,以作为包的全名。
  • 例:假设域名是“www.mju.edu.cn”,那么你可以将所有的包都以“cn.edu.mju”开头。
  • java包的命名规则全部使用小写字母,包括中间的字也是如此

三、类的访问

①类的访问级别只有2级:缺省级公开级

缺省级:class user  

不需要任何关键字,只有同一个包内的对象可以访问该类,其他包的对象不能访问 

 

公开级:public class user  

不但同一个包里的其它类可以访问这个类,而且其它包的类也可以访问它  

 

②public 类的访问


        (1) 用类的全名(包名+类名)访问;如果某个类只访问一次,那么可以直接使用类的全名,形式是“包名.类名”,繁琐、易出错、影响可读性。
           

 java.util.Scanner input = new java.util.Scanner(System.in);


        (2) 导入包中的某个类;用“import”关键字导入一个类
           

import java.util.Scanner;
Scanner input = new Scanner(System.in);


        (3) 导入包中的所有类。
 

import java.util.*;
Scanner input = new Scanner(System.in) 

③关于import


(1)导入单个类
            导入单个类方法的优点:

                便于使用导入类。

                import部分集中放在程序的开头,可以直观地统计程序使用了哪些包和类。

                移植程序时可以很直观地了解程序所需要的包,保证了程序在移植时的可用性。

            导入单个类方法的缺点:

                虽然我们可以用import关键字导入一个类,但它仍然是其它包的成员。

                导入的类的访问级、默认级的成员函数和成员变量依然无法访问。

                无法导入包中其它的默认访问级的类。

                每次只能导入一个类,如果包中有很多类的话,一个一个导入会很麻烦。

 

(2)导入所有类
import 包名.*;   “*”表示包中的所有公开类

访问包中的类,导入所有类注意事项

  • “*”号指包中的所有公开类,不是通配符。  
  • 不能用“import graphics.G*;”来一次性地导入所有以“G”打头的类。
  • 也不能用“import com.mycom.g*.*;”来导入所有以g打头的包中的所有类。
  • 一次只能导入一个包中的类,下面的语句是错误的:import com.mycom.*.*;
  • 为保证Java程序的基本功能,Java会自动导入两个包:java.lang包,程序所在的包。相当于自动在程序开头添加下面的语句:
import java.lang.*;//java.lang包中有Java语言的基本语法功能
import mypackage.*;//Java导入这两个包中的所有公开类
  • 如果导入的类名与本地包的类名相同:默认使用本地类。需导入包中的类采用“包名.类名”的形式。
  • 如果导入的两个包中有重名的类,并且使用到重名的类时,编译器无法知道应当用哪个类,于是报错。采用“包名.类名”的形式使用。

 ④管理Java源文件

  • Java文件的源码保存在以“java”为后缀的文本文件里
  • 每个源文件称作一个编译单元/转译单元
  • 每个编译单元里可以有一个或多个类,但最多只能有一个公开类(public)
  • 如果有公开类的话,源文件的文件名必须与公开类的名字相一致
  • Java编译器将源文件编译成二进制文件,二进制文件以“class”为后缀
  • 每个类都有一个对应的二进制文件(.class)
  • 如果一个源文件中有多个类,那么将产生多个二进制文件

三、Java解释器的执行过程 

Java解释器:解释器是Java虚拟机非常重要的一部分,它的工作就是把字节码转化为机器码并在特定的平台进行运行。简单一点,java的解释器只是一个基于虚拟机JVM平台的程序 ,即jdk或jre目录下bin目录中的java.exe文件。 Java解释器相当于运行Java字节码的“CPU”,但该“CPU”不是通过硬件实现的,而是用软件实现的。

  • 步骤1:可以通过操作系统设置,也可不用设置,一般编译环境会为你设置,其中CLASSPATH包含一个或多个目录,用来查找.class文件的根目录。
  • 步骤2:需要从根目录进行查询,解释器获取包的名称,将点号替换为反斜杠,具体哪种反斜杠视操作系统而定。
  • 步骤3:将得到的路径与CLASSPATH中的各个不同的项相连接,解释器就在这些目录中查找与你创建的类名称相关的.class文件。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值