1.classpath

1.1classpath定义

  • classpath是一个环境变量
  • classpath指示JVM如何搜索class
  • classpath设置的搜索路径与操作系统相关
    * window使用分号分割的,Mac、Linux使用冒号分割的

    • C:\work\project1\bin;C:\shared;"D:\My Document\project2\bin"
    • /usr/shared:/usr/local/bin:/home/csj/bin

1.2classpath用途

假设classpath是 .;C:\work\project1\bin;C:\shared
jvm在加载com.feiyangedu.Main这个类时,依次查找:
当前目录\com\feiyangedu\Hello.class
C:\work\project1\bin\com\feiyangedu\Hello.class
C:\shared\com\feiyangedu\Hello.class

  • 在某个路径下找到了,就不再继续搜索
  • 如果没有找到,报错

1.3classpath的设定方法

  • 直接在系统变量中设置classpath环境变量(不推荐)
  • 在启动JVM时设置classpath变量(推荐)
java -classpath C:\work\bin;C:\shared com.feiyangedu.Hello
java -cp C:\work\bin;C:\shared com.feiyangedu.Hello
  • 没有设置环境变量,也没有设置-cp参数,默认当前目录为classpath
  • 在eclipse中运行Java程序,eclipse自动传入的-cp参数是当前工程的bin目录和引入的.jar

2.jar包

2.1jar包的组成

  • jar包是zip格式的压缩文件,包含若干.class文件
  • jar包相当于目录
  • classpath可以包含jar文件: C:\work\bin\all.jar
  • com.feiyangedu.Hello类将在classpath给予的目录中搜索com/feiyangedu/Hello.class
  • 使用jar包可以避免大量的目录和.class文件

2.2jar包的创建

  • 使用jdk自带的jar命令
  • 使用构建工具如maven等
  • 直接压缩

2.3jar包的其他功能

  • jar包可以包含一个特殊的/META-INF/MANIFEST.MF文件
  • MANIFEST.MF是纯文本,可以指定Main-Class和其他信息
  • jar包还可以包含其他jar包
  • 了解更多,搜索oracle Java manifest

2.4jdk的class

  • jvm运行时会自动加载jdk自带的class
  • jdk自带的class被打包在rt.jar
  • 不需要在classpath中引用rt.jar

3.实例

Hello.java

package com.feiyang;
public class Hello {private final String name;public Hello(String name){this.name = name;}public String hello(){return "Hello, " + name + "!";}
}

Main.java

package com.feiyang;
public class Main {public static void main(String[] args){Hello h = new Hello("World");System.out.println(h.hello());}
}

3.1指定运行文件

运行Main文件,生成class文件。将class所在目录压缩为jar包
以IDEA为例,class文件在其项目路径下的target/classes里

cd target/classes/
zip -q -r test.jar *
java -cp test.jar com.feiyang.Main

3.2直接运行jar包

新建META-INF/MANIFEST.MF文件,重新执行main文件,在classes目录下会生成META_INF文件,将classes下的所有文件打包

Manifest-Version: 1.0
Main-Class: com.feiyang.Main
X-Copyright: blablabla
X-Build-Version: 1.0
zip -q -r main.jar *
java -jar main.jar

4.总结:

  • JVM通过环境变量classpath决定搜索class的路径和顺序
  • 不推荐设置系统环境变量classpath,始终建议通过-cp命令传入
  • jar包相当于目录,可以包含很多class文件,方便下载和使用
  • META-INF/MANIFEST.MF可以提供jar包的信息,如Main.Class
  • 不需要在classpath中引用包含Java核心类的rt.jar

转载于:https://www.cnblogs.com/csj2018/p/10285341.html

廖雪峰Java2面向对象编程-5包和classpath-4classpath和jar相关推荐

  1. 廖雪峰Java2面向对象编程-4抽象类和接口-1抽象类

    每个子类都可以覆写父类的方法 如果父类的方法没有实际意义,能否去掉方法的执行语句?子类会报编译错误 如果去掉父类的方法,就失去了多态的特性 可以把父类的方法声明为抽象方法. 如果一个class定义了方 ...

  2. 廖雪峰Java2面向对象编程-6Java核心类-5枚举类

    直接定义常量 public class Weekday {//定义int常量public static final int SUN = 0;public static final int MON = ...

  3. 廖雪峰Java2面向对象编程-6Java核心类-1字符串和编码

    Java的字符串用String表示 1.String特点: 可以直接使用"..."表示一个字符串,不强制使用new String 内容不可变 String s1 = "h ...

  4. 面向对象编程:包,继承,多态,抽象类,接口

    一.包 1.导入包中的类 2.静态导入 3.将类放到包中 4.包的访问权限控制 二.继承 1.语法规则 2.protected 关键字 3.final 关键字 三.组合 四.多态 1.向上转型 2.动 ...

  5. java面向对象编程_包_继承_多态_重载和重写_抽象类_接口_this和super

    目录点击跳转 包 包的命名方法 导入包中的类 系统包的介绍 **注意事项** 继承 基础知识 构造方法 **基础语法** `protected`修饰符 组合 `this`和`super`关键字 `th ...

  6. 廖雪峰Java11多线程编程-3高级concurrent包-4Concurrent集合

    Concurrent 用ReentrantLock+Condition实现Blocking Queue. Blocking Queue:当一个线程调用getTask()时,该方法内部可能让给线程进入等 ...

  7. java多线程同步与死锁,廖雪峰Java11多线程编程-2线程同步-3死锁

    在多线程编程中,要执行synchronized块,必须首先获得指定对象的锁. 1.Java的线程锁是可重入的锁 public void add(int m){ synchronized (lock){ ...

  8. 廖雪峰Java11多线程编程-1线程的概念-1多线程简介

    多任务 现代操作系统(windows,MacOS,Linux)都可以执行多任务: 多任务就是同时运行多个任务,例如同时开启钉钉.百度网盘.火狐.谷歌.ps等 操作系统执行多任务就是让多个任务交替执行, ...

  9. 面向对象编程(包,继承,组合)

    前言 包 包含义 导入包中的类 静态导入 将类放到包中 包的访问权限控制 继承 继承出现的背景 语法规则 字段和方法的四种访问权限 更复杂的继承关系 final 关键字 组合

  10. 廖雪峰Python电子书总结

    函数 1.注意:函数的默认参数必须指向不可变对象 未修改前: def add_end(L=[]): L.append('END') return L 存在的问题:如果连续调用多次,会出现多个 'END ...

最新文章

  1. STM32的CAN总线的接收双FIFO使用方法
  2. LinkedList 模拟栈和队列
  3. solaris 中挂载usb移动硬盘
  4. 单点登录 之 OAuth
  5. 使用git将本地文件上传到远程仓库
  6. MySQL分页查询方法及优化
  7. 垂直导航菜单制作技巧一
  8. FineUI(专业版)v3.1发布(ASP.NET控件库)!
  9. json apis and ajax,FreeCodeCamp - JSON APIs and Ajax
  10. 【转】Git连接oschina管理代码版本
  11. 信号与系统:希尔伯特变换
  12. 构造器模式(Builder模式)
  13. 单龙芯3A3000-7A1000PMON研究学习-(3)初步编译
  14. div左对齐与里面的内容偏左但是距离左边有点儿距离
  15. vue 实现数字滚动卡片
  16. API接口是什么?(京东API详解)
  17. 2017下半年软件测评师上午考试试题
  18. Easyui数据表格合并单元格
  19. AM335xu-bootLOGO开机LOGO
  20. 天空飘彩带的css3代码_纯CSS3实现飘逸洒脱带有飞行效果的三级下拉菜单

热门文章

  1. 不要变得迟钝,努努力,什么都迎刃而解
  2. poj 2362 Square 经典深搜
  3. fm足球经理Football Manager 2022 for mac(真实模拟游戏)中文版
  4. Illustrator 教程,如何在 Illustrator 中使用绘图模式?
  5. 在苹果Mac中巧用聚焦搜索Spotlight
  6. Airmail 5 for Mac(轻量级邮件客户端)
  7. 在 Mac 上的“访达”中排序和排列项目
  8. 11.20日个人工作总结
  9. new Date()浏览器兼容性问题
  10. Python爬虫从入门到放弃(二十一)之 Scrapy分布式部署