lesson09 Java包和导入和类路径

合集下载

【Java】包的定义和导入

【Java】包的定义和导入

【Java】包的定义和导⼊Java 语⾔引⼊“包”这个机制,使类具有多层命名空间,有效解决了类的命名冲突、类⽂件管理等问题。

通俗来讲,⼀个“包”就是⼀个⽂件夹,⽤来存放 Java 源⽂件和编译⽣成的字节码⽂件。

借助“包”,可以将⾃⼰定义的类和其他类库中的类分开管理。

1.包的定义package test; //定义包package com.baidu.search.utils; //定义多级包知识点:package 语句必须作为 Java 源⽂件的第⼀条⾮注释语句。

⼀个 Java 源⽂件中只能有⼀条 package 语句。

Java 源⽂件中可以定义多个类,在声明包之后,这些类⽣成的字节码⽂件,将全部位于这个包下。

多个 Java 源⽂件可以声明同⼀个包,即多个 Java 源⽂件,可以存放在同⼀个⽂件夹下。

多级包相当于嵌套的⽂件⽬录,如 “com \ baidu \ search \ utils” ⽬录,Java 源⽂件和编译⽣成的字节码⽂件都将存放在utils ⼦⽬录下。

多级包建议写成 “ 公司域名反写 . 项⽬名 . 模块名” 的形式。

例如,"com.baidu" “search” “utils” 分别对应 “公司域名反写” “项⽬名” “模块名”。

2.导⼊包Java 中⼀个类可以访问同⼀个包下的其他类,但如果需要访问其他包中的类,则需要使⽤ import 语句导⼊该类所在的源⽂件,格式如下:import包名.*; //导⼊指定包中的所有类import包名.类名; //导⼊指定包中的指定类知识点:import 语句不是必须的,完整包名.类名变量名 = new 完整包名.类名(); 这种形式也是可以的。

当导⼊的两个或多个包,具有同名的类时,编译器将会⽆法区分,需要使⽤完整包名.类名变量名 = new 完整包名.类名(); 的形式加以区分。

⼀个 Java 源⽂件中只能有⼀条 package 语句,但可以有多条 import 语句。

Java获取项目路径的多种方式

Java获取项目路径的多种方式

Java获取项⽬路径的多种⽅式在正常开发的情况下,我们经常会遇到:需要获取指定⽂件路径,虽然我知道项⽬在本机的路径,⼀旦打包发布了,再根据绝对路径获取指定⽂件,肯定是获取不到的。

这时候就需要⽤java给我们提供的⼀些获取相对路径⽅法了。

@Testpublic void url() throws IOException {// 获取当前项⽬下路径:⽅式⼀File file = new File("");String filePath = file.getCanonicalPath();// 输出:D:\MyCode\log\log4j2-javaSystem.out.println(filePath);// 获取当前项⽬下路径:⽅式⼆// 输出:D:\MyCode\log\log4j2-javaSystem.out.println(System.getProperty("user.dir"));// 获取类加载的根路径String path = this.getClass().getResource("/").getPath().substring(1);// 输出:D:/MyCode/log/log4j2-java/target/classes/System.out.println(path);// 获取当前类的所在⼯程路径String path1 = this.getClass().getResource("").getPath().substring(1);// 输出:D:/MyCode/log/log4j2-java/target/classes/com/gzl/cn/System.out.println(path1);// 获取类加载指定⽂件或者⽂件夹路径String path2 = this.getClass().getResource("/data/DataConvert.dll").getPath().substring(1);System.out.println(path2);//获取所有的类路径包括jar包的路径System.out.println(System.getProperty("java.class.path"));}这个是我的项⽬路径。

java中import详解

java中import详解

java中import详解前⾔import与package机制相关,这⾥先从package⼊⼿,再讲述import以及static import的作⽤。

packagepackage名称就像是我们的姓,⽽class名称就像是我们的名字。

package和package的附属关系⽤”.”来连接,这就像是复姓。

⽐如说ng.String就是复姓 ng,名字為 String 的类别;java.io.InputStream 则是复姓 java.io,名字為 InputStream的类别。

importimport就是在java⽂件开头的地⽅,先说明会⽤到那些类别。

接着我们就能在代码中只⽤类名指定某个类,也就是只称呼名字,不称呼他的姓。

⾸先,在程序开头写:import ng.System;import java.io.InputStream;import java.io.InputStreamReader;import java.io.BufferedReader;于是我们就可以在程序中这样写到:InputStream = System.in;InputStreamReader isr = new InputStreamReader(is);BufferedReader br = new BufferedReader(isr);⼀个java⽂件就像⼀个⼤房间,我们在门⼝写着在房间⾥⾯的class的姓和名字,所以在房间⾥⾯提到某个class就直接⽤他的名字就可以。

例如:System 就是指 ng.System,⽽ InputStream 就是指 java.io.InputStream。

但是如果⼀个java⽂件⾥⾯有多个同个“姓”,即包名相同的类(例如上⾯的InputStream,InputStreamReader,BufferedReader都是java.io 中的类),我们⼀⼀写出显得⽐较繁杂,所以Sun就让我们可以使⽤1import ng.*;2import java.io.*;表⽰⽂件⾥⾯说到的类不是ng包的就是java.io包的。

Javaimport以及Java类的搜索路径

Javaimport以及Java类的搜索路径

Javaimport以及Java类的搜索路径Java import以及Java类的搜索路径Java 官方为开发者提供了很多功能强大的类,这些类被分别放在各个包中,随JDK一起发布,称为Java类库或Java API。

下面店铺为你分享Java import以及Java类的搜索路径,欢迎大家阅读!更多相关信息请关注相关栏目!如果你希望使用Java包中的类,就必须先使用import语句导入。

import语句与C语言中的 #include 有些类似,语法为:import package1[.package2…].classname;package 为包名,classname 为类名。

例如:import java.util.Date; // 导入 java.util 包下的. Date 类import java.util.Scanner; // 导入java.util 包下的Scanner 类import javax.swing.*; // 导入 javax.swing 包下的所有类,* 表示所有类注意:import 只能导入包所包含的类,而不能导入包。

为方便起见,我们一般不导入单独的类,而是导入包下所有的类,例如 import java.util.*;。

Java 编译器默认为所有的 Java 程序导入了 JDK 的 ng 包中所有的类(import ng.*;),其中定义了一些常用类,如System、String、Object、Math 等,因此我们可以直接使用这些类而不必显式导入。

但是使用其他类必须先导入。

前面讲到的”Hello World“程序使用了System.out.println(); 语句,System 类位于 ng 包,虽然我们没有显式导入这个包中的类,但是Java 编译器默认已经为我们导入了,否则程序会执行失败。

Java类的搜索路径Java程序运行时要导入相应的类,也就是加载 .class 文件的过程。

Java 中的包

Java 中的包

“包”机制是Java 中特有的,也是Java 中最基础的知识之一。

一些初学Java 的朋友,通常像学其他语言一样从教材上“copy”一些程序来运行,可是却常常遇到莫名其妙的错误提示,这些问题事实上都是对“包”的原理不理解。

本节将就此问题进行深入阐述。

什么是Java 中的包在Java 程序语言中,为了开发方便,会将多个功能相似的类放到一个组内,而这个组就是“包”,包就像一个目录结构。

先来观察目录结构,目录的结构分为目录、子目录和文件。

在操作系统中,如何表示一个文件的目录结构呢?先看一个有关文件目录结构的例子:D:\Java\wp.doc其实包的表示有点像文件的目录结构。

例如:Java.wp。

下面来分析一下上面的代码,“Java”就是包名称,而“wp”就是类名称。

包就是将一些类组合在一起。

例如,在一个Java 包中有wp 类、wp1 类、wp2 类等等。

包的作用总结如下:1. 包将包含类代码的文件组织起来,易于查找和使用适当的类。

2. 包不止是包含类和接口,还能够包含其它包。

形成层次的包空间。

3. 有助于避免命名冲突。

当使用很多类时,确保类和方法名称的唯一性是非常困难的。

包能够形成层次命名空间,缩小了名称冲突的范围,易于管理名称。

4. 控制代码访问权限。

如何实现包在Java 中要想使用包,必须先声明一个包,而声明一个包必须使用关键字“package”。

具体如下所示:package Java.wp声明一个包时,声明语句必须放在类所有语句的最前面,下面先看一个实例。

Public class package1{public static void main(String[] args){System.out.println(new Date());}}编辑出错,系统提示找不到类Date。

在Java 中调用其他包中的公用类,可以使用两种方式:1. 第一种方式就是在每个类名前加上完整的包名。

具体如下所示:java.util.Date today=new java.util.Date();这样的对象实例化看起来与以前用的“Date today=new Date()”有很大区别,就是在类名称前面加上了包的名字。

Java文件的路径、绝对路径和规范路径示例说明

Java文件的路径、绝对路径和规范路径示例说明

Java文件的路径、绝对路径和规范路径示例说明java.io.File提供了三个方法来获取文件的路径不同写法,这三个方法分别是getPath()、getAbsolutePath()和getCanonicalPath(),下面将进一步说明它们。

getPath本方法将文件的抽象路径名转换为一个路径名字符串并返回,返回的字符串使用默认名称分隔符(Windows 下为“、”,Unix下为“/”)分隔名称序列中的名称。

如果使用URI创建的文件,字符串将移除协议头。

getAbsolutePath本方法返回文件的绝对路径名字符串。

如果文件对象本身是通过绝对路径名创建的,将简单地返回原来的参数,这与 getPath() 方法一样;如果文件对象是通过相对路径创建的,返回的绝对路径名的解析方式因操作系统类型不同。

在 UNIX 系统上,根据用户的当前目录解析相对路径名,可使该路径名成为绝对路径名。

在 Microsoft Windows 系统上,首先根据路径名指定的当前驱动器目录(如果有)解析相对路径名,可使该路径名成为绝对路径名;否则,可以根据当前用户目录解析它。

getCanonicalPath本方法返回规范的文件路径名字符串,建议优先使用。

规范路径名是绝对路径名,并且是惟一的。

规范路径名的准确定义与系统有关。

如有必要,此方法首先将路径名转换为绝对路径名,这与调用 getAbsolutePath() 方法的效果一样,然后用与系统相关的方式将它映射到其惟一路径名。

这通常涉及到从路径名中移除多余的名称(比如 "." 和 "..")、解析符号连接(对于 UNIX 平台),以及将驱动器号转换为标准大小写形式(对于 Microsoft Windows 平台)。

每个表示现存文件或目录的路径名都有一个惟一的规范形式。

每个表示不存在文件或目录的路径名也有一个惟一的规范形式。

不存在文件或目录路径名的规范形式可能不同于创建文件或目录之后同一路径名的规范形式。

java 取类的相对路径

java 取类的相对路径

java 取类的相对路径Java是一种面向对象的编程语言,可以通过类来创建各种对象。

在Java中,类的相对路径是指类文件相对于当前工作目录的路径。

本文将详细介绍如何使用Java获取类的相对路径。

在Java中,类的相对路径是相对于当前工作目录的路径。

当前工作目录是指在运行Java程序时所在的目录。

可以通过以下代码获取当前工作目录的路径:```javaString currentPath = System.getProperty("user.dir"); System.out.println("当前工作目录:" + currentPath);```上述代码中,使用`System.getProperty("user.dir")`方法获取当前工作目录的路径,并通过`System.out.println()`方法输出当前工作目录的路径。

在Java中,可以使用`Class`类的`getResource()`方法获取类的相对路径。

`getResource()`方法可以接受一个相对路径作为参数,并返回一个`URL`对象,表示该相对路径对应的资源。

可以通过`URL`对象的`getPath()`方法获取资源的相对路径。

以下是一个示例代码,演示了如何使用`getResource()`方法获取类的相对路径:```javaClass<?> clazz = MyClass.class;URL resourceUrl = clazz.getResource("");String relativePath = resourceUrl.getPath();System.out.println("类的相对路径:" + relativePath);```上述代码中,首先使用`MyClass.class`获取一个`Class`对象,表示`MyClass`类。

java 获取路径

java 获取路径

java 获取路径在日常开发中,获取文件路径是一个常见任务,特别是在使用java实现多层次的文件路径交互时,更是重要。

对于java开发人员来说,可以借助一些已有的函数实现路径的获取,也可以通过某些特定的类来完成。

一、java中的路径获取方式在java中,开发者可以通过两种方式来获取路径,分别是通过文件操作类和文件系统路径类来实现。

1.文件操作类文件操作类是java.io.*包中的一个类,主要用于处理文件操作,提供了getCanonicalPath()、getAbsolutePath()和getPath()等方法,可以用于获取文件的路径,如下:// 使用File类中的getCanonicalPath()方法获取路径File file = new File(myfile.txtString canonicalPath = file.getCanonicalPath();System.out.println(CanonicalPath: + canonicalPath);// 使用File类中的getAbsolutePath()方法获取路径String absolutePath = file.getAbsolutePath();System.out.println(AbsolutePath: + absolutePath);// 使用File类中的getPath()方法获取路径String path = file.getPath();System.out.println(Path: + path);2.文件系统路径类文件系统路径类是java.nio.file.Paths是java.nio.file包中的一个类,是一个与文件系统相关的类,常用的方法有get()和toAbsolutePath(),可以用于获取路径,如下:// 使用Path中的get()方法获取路径String path = Paths.get(myfile.txttoString();System.out.println(Path: + path);// 使用Paths中的toAbsolutePath()方法获取路径Path path1 = Paths.get(myfile.txttoAbsolutePath();System.out.println(Path1: + path1);二、路径类型分析1.绝对路径绝对路径是指从操作系统根目录开始,包含全部文件和目录的路径,其特点是由一系列的“/”(反斜杠)组成,从第一个“/”开始一直到最后一个“/”结束,是一条完整的路径,不会受其他路径的影响。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
–右击project,选中properties,在弹出窗口中, 左侧菜单选择Java Build Path,右侧选择 Libraries标签,点击Add External JARs, 在弹出 文件框中选择合适的jar添加进来,一路OK退 出。
jar(4)
谢 谢!
17
• Java支持多个目录放置Java,并且通过 package/import/classpath/jar等机制配合使 用,可以支持多处地方放置和调用Java类。
package/import(2)
• • • • • • • • package 包 在Java类文件的第一句话给出包的名称 package .ecnu; public class PackageExample { } 类的全称.ecnu.PackageExample 在引用类的时候,必须采用全称 PackageExample.java必须严格放置在 cn/edu/ecnu目录下
• 具体的命令可以在控制台下输入jar后可以 看到全的帮助文档。
jar(3)
• • • • 命令行编译和运行,在classpath中引入jar javac –cp .;c:\temp;xxx.jar Test.java java –cp .;c:\temp;xxx.jar Test eclipse内导入jar
jar(2)
• jar的主执行文件是jar.exe,也是位于 JAVA_HOME的bin目录下。 • jar的主要命令有:
–jar cvf classes.jar A.class B.class // 将A和B压 缩集成为classes.jar –jar cvf classes.jar –C foo/ . //将foo下面的 所有文件压缩为classes.jar
jar(1)
• jar文件是Java所特有的一种文件格式。 • jar文件实际上是一组class文件的压缩包
–jar文件可以包括多个class,比多层目录更加简洁实用 –jar文件经过压缩,只有一个文件,在网络下载和传播 方面,更具有优势 –jar文件只包括class,而没有包含java文件,在保护源文 件知识版权方面,能够可以起到更好的作用 –将多个class文件压缩成jar文件(只有一个文件),可 以规定给一个版本号,更容易进行版本控制
package/import(8)
• Package规则(续)
–Classpath参数可以是路径,也可以是jar包(参 见下面的Jar节)。如果路径内有空格,请将 classpath参数整体加一对双引号。例如 java – classpath “.;c:\temp;c:\a bc” A.B.C –-classpath 可以简写成-cp。
package/import(2)
• • • • • • 包名 package name必须唯一 域名是唯一的,因此常用域名做包名 域名逆序:.ecnu,从大到小 类的完整名字:包名+类名 包名:和目录层次一样 但是包具体放在什么位置不重要,编译和 运行的时候再指定。
package/import(3)
package/import(6)
类名(全称) A.B.C 文件名 C.java 文件全路径 C:\m1\A\B\C.java
D.E.F( 引 用 了
A.B.C) G.H(引用了D.E.F, 没有直接但是间接引用 了 A.B.C , 因 此 仍 然需
F.java
d:\m2\D\E\F.java
G.H
package/import(7)
• package规则
–编译一个类,需要java文件的全路径,包括扩 展名。运行一个类,需要写类名全称(不是文 件路径),也不能写扩展名。 –编译类的时候,需要给出这个类所调用的类( 包括被调用类所依赖的类)的所在路径。运行 类的时候,需要给出这个类,以及被调用类的 路径总和。 –classpath的参数在Windows平台是以半角分号 隔开;在Linux平台是以半角冒号隔开。
package/import(5)
• • • • java –classpath .;c:\temp PackageExampleTest Java,执行命令,是java.exe的简写。 -classpath 固定格式参数,可以简写成-cp. 第三部分是一个(以分号连接起来的)字符串。以 分号作为分隔符隔开,得到一个个子路径。当运 行PackageExampleTest类的过程中,如果需要用到 其他的类,就会分裂第三部分的字符串,得到多 个子路径,然后依次在每个路径下,再去寻找相 应类(全称,包名以点隔开对应到目录)。 • 主执行类的全称(含包名)
package/import(9)
• import规则
–import必须全部放在package之后,类定义之前 。 –多个Import的顺序无关。 –可以用*来引入一个目录下的所有类,比如 import ng.*; 此意思是引入ng下面所 有的类文件,当不包括ng下面所有的子 目录文件,即并不包括ng.reflect.*; 换句话 说,不能递归包含各个目录下的文件。
E:\m3\G\H.java
要给出A.B.C的路径)
A. B.C D. E.F G. H 编译 X>javac c:\m1\A\B\C.java 运行 X>java –classpath .;c:\m1 A.B.C 编译 X>javac –classpath .;c:\m1 d:\m2\D\E\F.java 运行 X>java –classpath .;c:\m1;d:\m2 D.E.F 编译 X>javac –classpath .;c:\m1;d:\m2 e:\m3\G\H.java 运行 X>java –classpath .;c:\m1;d:\m2;e:\m3 G.H Javac对应的是java.exe 编译命令,java对应java.exe 运行命令
Java 程序设计
第九讲 包、导入和类路径
华东师范大学
陈良育
1
Outline
• package
• import
• classpath
• jar
2
package/import(1)
• 所有的Java类都是放置在同一个目录下面的 ,因此类之间的相互调用无需显式声明调 用。
–同一个目录下,两个类的名字不能相同 –文件过多,查找和修改都不易,且容易出错。
• 在PackageExampleTest.java中,我们可用 import关键字来引入PackageExample类 • //PackageExampleTest.java • import .ecnu.PackageExample; // • 必须写类的全称 • public class PackageExampleTest • {…main函数,参见代码…}
package/imageExample的上级目录依次 是ecnu,edu,cn。 • 而再上层的路径,将会在类运行的时候依 靠classpath参数来决定。Java将依靠这个环 境变量的指引去寻找合适所需要的类 • java PackageExampleTest • java –classpath .;c:\temp PackageExampleTest
相关文档
最新文档