zoukankan      html  css  js  c++  java
  • 包-java

    Java 包

    为了更好地组织类,Java 提供了包机制,用于区别类名的命名空间。

    • 包的作用
    • 创建包
    • import 关键字
    • package目录结构
    • 设置CLASSPATH系统变量

    包的作用

    1. 把功能相似或者相关的类或接口组织在同一个包总,方便类的查找和使用.
    2. 如同文件夹一样,树形目录结构.同一个包中类名字不同,不同包中类的名字是可以相同的.调用时加上包名,避免冲突
    3. 包也限定了访问权限,拥有报访问权限的类才能访问某个包中的类

    Java 使用包(package)这种机制是为了防止命名冲突,访问控制,提供搜索和定位类(class)、接口、枚举(enumerations)和注释(annotation)等。

    语法格式:package pkg1.pkg2.ClassName.java

    示例

    package net.java.util;
    public class Something{
       ...
    }
    


    一个包(package)可以定义为一组相互联系的类型(类、接口、枚举和注释),为这些类型提供访问保护和命名空间管理的功能。

                 java.lang-打包基础的类
                 java.io-包含输入输出功能的函数

    创建包

    创建包的时候,你需要为这个包取一个合适的名字。之后,如果其他的一个源文件包含了这个包提供的类、接口、枚举或者注释类型的时候,都必须将这个包的声明放在这个源文件的开头。

    包声明应该在源文件的第一行,每个源文件只能有一个包声明,这个文件中的每个类型都应用于它。

    如果一个源文件中没有使用包声明,那么其中的类,函数,枚举,注释等将被放在一个无名的包(unnamed package)中

    示例

    /* 文件名: Animal.java */
    package animals;
    
    interface Animal {
       public void eat();
       public void travel();
    }
    


    开始实现:

    package animals;
    
    /* 文件名 : MammalInt.java */
    public class MammalInt implements Animal{
    
       public void eat(){
          System.out.println("Mammal eats");
       }
    
       public void travel(){
          System.out.println("Mammal travels");
       } 
    
       public int noOfLegs(){
          return 0;
       }
    
       public static void main(String args[]){
          MammalInt m = new MammalInt();
          m.eat();
          m.travel();
       }
    }
    


    打包命令:

    $ mkdir animals
    $ cp Animal.class  MammalInt.class animals
    $ java animals/MammalInt
    Mammal eats
    Mammal travel
    

    import 关键字

    语法格式:import pkg1.pkg2.classname;
    示例在一个包中,一个类想要使用本包中的另一个类,那么该包名可以省略

    package payroll;
    
    public class Boss
    {
       public void payEmployee(Employee e)
       {
          e.mailCheck();
       }
    }
    


    如果不在,引用方式

    • 类全名描述
      payroll.Employee
    • import关键字引入,使用通配符
      import payroll.*;
    • 使用关键字引用类
      import payroll.Employee;

    注意:import必须在package声明之后,类声明之前,可以有多个

    package目录结构

    • 包名成为类名的一部分
    • 包名必须与相应的字节码所在的目录结构吻合

    一种简单方式:
    将类、接口等类型源码放在一个文本中,这个文件的名字就是这个类型的名字,并以.java作为扩展名

    //文件名:Car.java
    package vehicle;
    public class 文件名Car{
        //类实现
    }
    


    接着把源文件放在一个目录中,这个目录要对应类所在包名
    ...vehicleCar.java

    现在类名和路径将会下面的样子
    类名>vehicle.Car
    路径名>vehiclCar.java(windows)

    一个公司使用它互联网域名颠倒形式来作为它的包名。
    例如:name.com,所有包名都是以com.name开头。包名中每一个部分对应一个子目录。

    编译的时候,编译器为包中定义的每个类、接口类型各创建一个不同的输出文件,输出文件的名字是这个类型的名字,并加上.class作为扩展后缀。

    //文件名:Demo.java
    package com.wangda.test;
    public class Demo{
    
    }
    class Google{
    
    }
    

    出现以下状态

    .comwangda	estDemo.class
    .comwangda	estGoogle.class
    

    以下方式导入所有的类、接口等

    import com.wangda.test.*;
    

    编译之后的 .class 文件应该和 .java 源文件一样,它们放置的目录应该跟包的名字对应起来。但是,并不要求 .class 文件的路径跟相应的 .java 的路径一样。你可以分开来安排源码和类的目录。

    <path-one>sourcescomwangda	estDemo.java
    <path-two>classescomwangda	estGoogle.class
    

    这样,你可以将你的类目录分享给其他的编程人员,而不用透露自己的源码。用这种方法管理源码和类文件可以让编译器和java 虚拟机(JVM)可以找到你程序中使用的所有类型。

    类目录的绝对路径叫做 class path。设置在系统变量 CLASSPATH 中。编译器和 java 虚拟机通过将 package 名字加到 class path 后来构造 .class 文件的路径。

    <path- two>classes是 class path,package 名字是 com.wangda.test,而编译器和 JVM 会在 <path-two>classescomwangda est 中找 .class 文件。

    一个 class path 可能会包含好几个路径,多路径应该用分隔符分开。默认情况下,编译器和 JVM 查找当前目录。JAR 文件按包含 Java 平台相关的类,所以他们的目录默认放在了 class path 中。

    设置CLASSPATH系统变量

    显示当前CLASSPATH变量

    Windows 平台(DOS 命令行下):C:> set CLASSPATH
    UNIX 平台(Bourne shell 下):# echo $CLASSPATH

    删除当前内容

    Windows 平台(DOS 命令行下):C:> set CLASSPATH=
    UNIX 平台(Bourne shell 下):# unset CLASSPATH; export CLASSPATH
    

    设置当前内容

    Windows 平台(DOS 命令行下): C:> set CLASSPATH=C:usersjackjavaclasses
    UNIX 平台(Bourne shell 下):# CLASSPATH=/home/jack/java/classes; export CLASSPATH
    
  • 相关阅读:
    Code First 数据迁移 转
    WebAPI Post接收数据
    hbase1.2.4 API改动
    spark中RDD持久化浅析
    SQLSTATE[42S22]: Column not found: 1054 Unknown column 'Attr_id' in 'where clause'
    宝塔忘记面板地址怎么办? 可以找到没问题的
    卸载Apache 删除已经停止的服务
    Composer 卸载
    TP5.1模型 增删改查
    打印数据库int类型的时间戳
  • 原文地址:https://www.cnblogs.com/bomily0212/p/12083277.html
Copyright © 2011-2022 走看看