Plusaber's Blog

  • Home

  • Tags

  • Categories

  • Archives

Java package, import

Posted on 2014-04-06 | In java | Comments:

Java package, import

package

package作用

Java引入包(package)机制,提供了类的多层命名空间,用于解决类的命名冲突、类文件管理等问题。

Java允许将一组功能相关的类放在同一个package下,从而组成逻辑上的类库单元。如果希望把一个类放在指定的包结构下,我应该在Java源程序的第一个非注释行放置如下格式的代码:

package packagename;

一旦在Java源文件中使用了这个package语句,就意味着该源文件里定义的所有类都属于这个包。位于包中的每个类的完整类名都应该是包名和类名的组合,如果其他人需要使用该包下的类,也应该使用包名加类名的组合。

javac -d . Hello.java 与 javac Hello.java 的区别?

1
2
3
4
5
6
7
8
package lee;
public class Hello
{
  public static void main(String[] args)
{
  System.out.println("Hello World!");
}
}

-d选项本来用于设置编译生成的class文件的保存位置,这里指定将生成的class文件放在当前路径下。使用该命令编译后,当前路径下生成一个名为lee的文件夹,该文件夹下则有一个Hello.class文件。

如果直接使用javac Hello.java命令编译,将会在当前路径下生成一个Hello.class文件,而不会生成lee文件夹。

同一个包中的类必须位于同一个文件夹吗?

可以不在同一个文件夹。例如lee.Person和lee.PersonTest两个类可一个在C盘一个在D盘,只要让CLASSPATH环境变量包含这两个路径即可。

包名如何起?

包名一般全是小写字母,由一个或多个有意义的单词连缀而成。为了在开发中避免包名和类名同时重复的情况,Oracle建议使用公司Internet域名倒写来作为包名,例如Internet域名是crazyit.org,则该公司的所有类都放在org.crazyit包及其子包下。
域名倒写.项目名.模块名.组件名

同一个包下的类互相访问时可以不加包前缀吗?
可以。

父包和子包互相访问时可以不加包前缀吗?
不可以,必须加包前缀。

import

import关键字

正如上面看到的,如果需要使用不同包中的其他类时,总是需要使用该类的全名,这是一件繁琐的事情。为了简化编程,Java引入了import关键字,import关键字可以向某个java文件只能给导入指定包层次下的某个类或全部类,import语句应该出现在package语句之后、类定义之前。一个Java源文件只能包含一个package语句,但可以包含多个import语句,多个import语句用于导入多个包层次下的类。

导入单个类:import package.subpackage…ClassName;
导入全部类:import package.subpackage…*;

上面的(*)只能代表类,不能代表包。

使用方式

为了能够使用某一个包的成员,我们需要在 Java 程序中明确导入该包。使用“import”语句可完成此功能。在 java 源文件中 import 语句应位于 package 语句之后,所有类的定义之前,可以没有,也可以有多条,其语法格式为:
import package1[.package2…].(classname|*);
java 运行时环境将到 CLASSPATH + package1.[package2…]路径下寻找并载入相应的字节码文件 classname.class。“*”号为通配符,代表所有的类。也就是说 import 语句为编译器指明了寻找类的途径。

例,使用 import 语句引入类程序:TestPackage.java

1
2
3
4
5
6
7
import p1.Test;    //或者 import p1.*;
public class TestPackage {
public static void main(String args[]) {
Test t = new Test(); // Test 类在 p1 包中定义
t.display();
}
}

java 编译器默认为所有的 java 程序引入了 JDK 的 java.lang 包中所有的类(import java.lang.*;),其中定义了一些常用类:System、String、Object、Math 等。因此我们可以直 接使用这些类而不必显式引入。但使用其它非无名包中的类则必须先引入、后使用。

Java 类搜寻方式

程序中的 import 语句标明要引入 p1 包中的 Test 类,假定环境变量 CLASSPATH 的值为“.;C:\jdk6\lib;D:\ex”,java 运行环境将依次到下述可能的位置寻找并载入该字节码文件 Test.class:
.\p1\Test.class
C:\jdk6\lib\p1\Test.class
D:\ex\p1\Test.class
“.”代表当前路径,如果在第一个路径下就找到了所需的类文件,则停止搜索。否则依次搜索后续路径,如果在所有的路径中都未找到所需的类文件,则编译或运行出错。

Java的常用包

Java的核心类都放在java这个包及其子包下,Java扩展的许多类都放在javax包及其子包之下。这些实用类也就是前面所说的API(应用程序接口),Oracle按这些类的功能分别放在不同的包下。下面几个包是Java中的常用包。

java.lang:这个包下包含了Java语言的核心类,如Sting、Math、System、和Tread类等,使用这个包下的类无需使用import语句导入,系统会自动导入这个包下的所有类。
java.util:这个包下包含了Java的大量工具类/接口和集合框架类/接口,例如Arrays和List、Set等。
java.net:这个包下包含了一些Java网络编程相关的类/接口。
java.io:这个包下包含了一些Java输入/输出相关的类/接口。
java.text:这个包下包含了一些Java格式化相关的类。
java.sql:这个包下包含了一些Java进行JDBC数据库编程相关的类/接口。
java.awt:这个包下包含了抽象窗口工具集(Abstract Window Toolkits)的相关类/接口,这些类主要用于构建图形用户界面(GUI)程序。
java.swing:这个包下包含了Swing图形用户界面编程的相关类/接口,这些类可用于构建平台无关的CUI程序。

转自: Java package详解

CLASSPATH、PATH、JAVA_HOME的作用及JAVA环境变量配置

Posted on 2014-04-05 | In java | Comments:

CLASSPATH、PATH、JAVA_HOME的作用及JAVA环境变量配置

CLASSPATH

它是javac编译器的一个环境变量。用与import、package关键字有关。作用是指定类搜索路径,要使用已经编写好的类,前提当然是能够找到它们了,JVM就是通过CLASSPATH来寻找类的。我们需要把jdk安装目录下的lib子目录中的dt.jar和tools.jar设置到CLASSPATH中,当然,当前目录“.”也必须加入到该变量中。这里CLASSPATH为:

1
2
.;C:/Program Files/Java/jdk1.6.0_21/lib/dt.jar;C:/Program Files/Java/
jdk1.6.0_21/lib/tools.jar

当写下import java.util.*时,编译器面对import关键字时,就知道你要引入java.util这个package中的类,但是编译器如何知道你把这个package放在哪里了呢?所以你首先得告诉编译器这个package的所在位置;如何告诉它呢?就是设置CLASSPATH啦.

如果java.util这个package在c:/jdk/ 目录下,你得把c:/jdk/这个路径设置到CLASSPATH中去!当编译器面对import java.util.*这个语句时,它先会查找CLASSPATH所指定的目录,并检视子目录java/util是否存在,然后找出名称吻合的已编译文件(.class文件)。如果没有找到就会报错!

当你自己开发一个package时,然后想要用这个package中的类;自然,你也得把这个package所在的目录设置到CLASSPATH中去!CLASSPATH的设定,对JAVA的初学者而言是一件棘手的事。所以Sun让JAVA2的JDK更聪明一些。你会发现,在你安装之后,即使完全没有设定CLASSPATH,你仍然能够编译基本的JAVA程序,并且加以执行。

配置

对于Windows系统而言,名为Path的系统环境变量已经存在,可以直接修改该环境变量,在该环境变量值后面追加如 D:\Java\jdk1.7.0\bin(JDK的安装路径)。或者新建一个名为PATH的环境变量,设置它的值为 D:\Java\jdk1.7.0\bin

Linux平台下的环境变量是通过 .bash_profile 文件来设置的。在该文件的PATH变量后面添加:/home/Java/jdk1.7.0 /bin(JDK安装路径)

PATH= .:PATH:HOME/bin : /home/Java/jdk1.7.0/bin

完成了PATH变量的设置后,在 .bash_profile 文件最后添加导出PATH变量的语句

export PATH

重新登陆Linux或执行如下命令让文件中的PATH变量生效:

source .bash_profile

PATH

PATH环境变量。作用是指定命令搜索路径.

在命令行下面执行命令如javac编译java程序时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序。

我们需要把jdk安装目录下的bin目录增加到现有的PATH变量中,bin目录中包含经常要用到的可执行文件如javac/java/javadoc等,设置好PATH变量后,就可以在任何目录下执行javac/java等工具了。我们这里设定的PATH值为:

1
2
3
4
5
%SystemRoot%/system32;%SystemRoot%;%SystemRoot%/System32/Wbem;%SYSTEMROOT%/
System32/WindowsPowerShell/v1.0/;C:/Program Files/Common Files/Thunder
Network/KanKan/Codecs;C:/Program Files/Microsoft SQL Server/90/Tools/
binn/;C:/Program Files/Common Files/TTKN/Bin;C:/Program Files/Common Files/
Teleca Shared;C:/Program Files/Java/jdk1.6.0_21/bin
C:/Program Files/Java/jdk1.6.0_21/bin

上述只有红色部分;C:/Program Files/Java/jdk1.6.0_21/bin是java的PATH变量,注意变量之间需要用”;”隔开。

如果想在运行Java时临时指定JRE搜索Java类的路径,可以使用 -classpath 选项,Linux上用冒号(:)隔开

java -classpath dir1;dir2,...;dirN Java类
或者
java -classpath %CLASSPATH%;.;dir1;dir2,...;dirN Java类

JAVA_HOME

JAVA_HOME环境变量,指向jdk的安装目录,Eclipse/NetBeans/Tomcat等软件就是通过搜索JAVA_HOME变量来找到并使用安装好的jdk。这里JAVA_HOME为:

C:/Program Files/Java/jdk1.6.0_21

转自: CLASSPATH、PATH、JAVA_HOME的作用及JAVA环境变量配置

1…1617
Plusaber

Plusaber

Plusaber's Blog
82 posts
12 categories
22 tags
Links
  • LinkedIn
  • Indeed
  • Baito
  • Kaggle
© 2014 – 2019 Plusaber
Powered by Hexo v3.8.0
|
Theme – NexT.Mist v7.1.1