Java语言是SUN(Stanford University Network,斯坦福大学网络公司)公司1995年推出的一门高级编程语言,起初主要应用在小型消费电子产品上,后来随着互联网的兴起,Java语言迅速崛起(Java applet 可以在浏览器中运行),成为大型互联网项目的首选语言。
2009年04月20日,美国甲骨文公司74亿美元收购Sun,取得java的版权。
Java 是面向对象的语言,没有面向对象编程经验的读者需要花费不少时间来了解面向对象的概念、语法和编程思想,有不能理解的地方请大家一定要坚持,多花时间编写代码自然会豁然开朗,从面向过程到面相对象需要一个适应期。
Java 不只是一种编程语言,它是一个完整的平台,拥有庞大的库,将诸如图形绘制、Socket连接、数据库存取等复杂操作进行了最大程度的简化。
Java 是跨平台的,一次编译,到处运行,在 Windows 上编写的代码可以不加修改的移植到 Linux 上,反之也可以。
在世界编程语言排行榜中,Java几乎占据着第二名的位置,仅次于C语言。
Java是典型的面向对象的语言,晚于C++发布,部分语法和思想也参考了C++
尽管人们发现C++的语法太复杂,有很多冗余,但是 Java 在设计的时候还是尽可能的接近C++,降低人们的学习成本。Java 语法是 C++ 语法的一个“纯净”版,没有头文件、指针运算(也没有指针语法)、结构、联合、运算符重载、虚基类等。有C++基础的读者,可以轻易地切换到Java。
Java 的应用非常广泛:
- Web开发:Java非常适合开发大型的企业网站,例如人人网、去哪儿网的后台都是Java。
- Android开发:Android手机上APP几乎都是用Java开发的,例如QQ、微信、UC浏览器。
- 客户端开发:Java也可以用来开发电脑上的软件,例如Elicpse、Netbeans。
- 嵌入式应用:嵌入式应用就是在小型电子产品中运行的软件,例如老式手机上的软件、MP3上的软件。
但是,可以负责任的告诉你,Java 目前的主要应用方向是Web开发和Android开发,大部分IT公司招聘的Java程序员也是从事这两方面的工作。
Java 的GUI库称不上出色,很多用户不习惯它的界面;Java编写的客户端资源消耗也比较多;更重要的是,Java程序必须借助虚拟机才能运行,操作系统默认没有安装虚拟机(下节将会详细介绍)。直接投放市场的面向普通用户的客户端程序,用Java开发的很少。
在嵌入式方面,Java 很难操作底层硬件,灵活性较小,而且需要虚拟机支持,占用资源较多,对于配置很低的单片机系统来说有些吃力。所以,在力求高效、小型化、执行关键任务的应用中,最好采用汇编和C语言,例如火箭控制、传感器通信或报告宇宙飞行器的方位等。
Java 虽然是一门功能完善的语言,但是它有自己擅长的方面,也有不擅长的方面,大家在具体项目中要学会取舍。
相信大家已经了解到Java具有跨平台的特性,可以“一次编译,到处运行”,在Windows下编写的程序,无需任何修改就可以在Linux下运行,这是C和C++很难做到的。
那么,跨平台是怎样实现的呢?这就要谈及Java虚拟机(Java Virtual Machine,简称 JVM)。
JVM也是一个软件,不同的平台有不同的版本。我们编写的Java源码,编译后会生成一种 .class 文件,称为字节码文件。Java虚拟机就是负责将字节码文件翻译成特定平台下的机器码然后运行。也就是说,只要在不同平台上安装对应的JVM,就可以运行字节码文件,运行我们编写的Java程序。
而这个过程中,我们编写的Java程序没有做任何改变,仅仅是通过JVM这一”中间层“,就能在不同平台上运行,真正实现了”一次编译,到处运行“的目的。
JVM是一个”桥梁“,是一个”中间件“,是实现跨平台的关键,Java代码首先被编译成字节码文件,再由JVM将字节码文件翻译成机器语言,从而达到运行Java程序的目的。
注意:编译的结果不是生成机器码,而是生成字节码,字节码不能直接运行,必须通过JVM翻译成机器码才能运行。不同平台下编译生成的字节码是一样的,但是由JVM翻译成的机器码却不一样。
所以,运行Java程序必须有JVM的支持,因为编译的结果不是机器码,必须要经过JVM的再次翻译才能执行。即使你将Java程序打包成可执行文件(例如 .exe),仍然需要JVM的支持。
注意:跨平台的是Java程序,不是JVM。JVM是用C/C++开发的,是编译后的机器码,不能跨平台,不同平台下需要安装不同版本的JVM。
关于JVM的执行效率
Java 推出的前几年,人们有不同的看法,解释字节码肯定比全速运行机器码慢很多,牺牲性能换来跨平台的优势是否值得?
然而,JVM 有一个选项,可以将使用最频繁的字节码翻译成机器码并保存,这一过程被称为即时编译。这种方式确实很有效,致使微软的 .NET 平台也使用了虚拟机。
现在的及时编译器已经相当出色,甚至成了传统编译器的竞争对手,某些情况下甚至超过了传统编译器,原因是JVM可以监控运行时信息。例如,即时编译器可以监控使用频率高的代码并进行优化,可以消除函数调用(即“内嵌”)。
但是,Java 毕竟有一些C/C++没有的额外的开销,关键应用程序速度较慢。比如Java采用了与平台无关的绘图方式,GUI程序(客户端程序)执行要慢;虚拟机启动也需要时间。
客户端市场的折戟
Java 的GUI库称不上出色,界面不算友好,大部分用户不太习惯;Java 的客户端资源消耗也比较大,大数据量的应用和功能复杂的应用性能堪忧。
更加不能接受的是,微软因自身利益和SUN分家后,Windows 便不再预装JVM了,用户安装你的程序之前,必须要安装JVM并正确设置,你可以要求普通用户安装你的软件,但是你能期望他了解JVM的有关知识并正确安装设置吗?
虽然你可以将JVM集成在你的程序中,自动安装并设置,不让用户干预,但是你希望附带一个比你的程序还要大好多的JVM吗?一个软件这样做或许可以接受,成千上万个软件都这样做,那用户要安装多少个JVM?磁盘空间要浪费多少?
所以,直接投放市场的面向普通用户的客户端程序,用Java开发的很少,大部分Java开发的客户端是给企业内部员工使用,员工领到电脑时,技术部已经给配置好了。如果你希望从事客户端开发,建议学习 C/C++ 和 .NET,它们在Window客户端开发方面有较大的优势。
种种原因,注定了Java客户端不利于推向市场,让普通用户接受。不过话又说回来,客户端开发也不是Java的初衷,Java最初是面向嵌入式的,却随着互联网的兴起而快速成长,在Web开发上大显身手。
根据IDC的统计,在所有软件开发类人才的需求中,对JAVA工程师的需求曾达到全部需求量的50%以上。而且,JAVA工程师的薪水相对较高。通常来说,具有3~5年开发经验的工程师,年薪10万是很正常的一个工资。一些重点院校的优秀毕业生能够进入国内一流的IT企业(百度、腾讯、阿里巴巴等),年薪一般在20万左右,拿到多个offer的,证明很有实力,可以跟企业谈价,幸运的话可以拿到25万。
目前,Java的主要就业方向有三个。
Web开发
Web开发语言很多,Java是其中之一。Java在开发高访问、高并发、集群化的大型网站方面有很大的优势,例如人人网、去哪儿网、美团等。
Android开发
Android是全球最大的智能手机操作系统,2014年第三季度Android手机出货量占比达到84%。Android应用的主要开发语言就是Java。
Android 从2010年才开始走入大众视野,虽然最近几年发展非常快速,但人才积累却没有跟上,优秀的Android开发工程师仍然存在不小的缺口,这也是导致Android开发人员工资高,难招人的原因。
客户端开发
Java客户端开发主要面向政府、事业单位和大型企业,如医疗、学校、OA、邮箱、投票、金融、考试、物流、矿山等信息方面的系统。
但是客户端开发往往不是这些企业的主要业务,而是为主要业务提供辅助,以便企业能够更加高效的运营,因此必然不是企业的主要部门,虽然待遇可能和前面两者差不多,但是前景却不看好,企业没有精心打磨这些产品并推向市场的动力,都是内部员工使用,能用就好。
Java 有三个版本,分别为 J2SE、J2EE和J2ME,以下是详细介绍。
J2SE(Java 2 Platform Standard Edition) 标准版
J2SE是Java的标准版,主要用于开发客户端(桌面应用软件),例如常用的文本编辑器、下载软件、即时通讯工具等,都可以通过J2SE实现。
J2SE包含了Java的核心类库,例如数据库连接、接口定义、输入/输出、网络编程等。
学习Java编程就是从J2SE入手。
J2EE(Java 2 Platform Enterprise Edition) 企业版
J2EE是功能最丰富的一个版本,主要用于开发高访问量、大数据量、高并发量的网站,例如美团、去哪儿网的后台都是J2EE。通常所说的JSP开发就是J2EE的一部分。
J2EE包含J2SE中的类,还包含用于开发企业级应用的类,例如EJB、servlet、JSP、XML、事务控制等。
J2EE也可以用来开发技术比较庞杂的管理软件,例如ERP系统(Enterprise Resource Planning,企业资源计划系统)。
J2ME(Java 2 Platform Micro Edition) 微型版
J2ME 只包含J2SE中的一部分类,受平台影响比较大,主要用于嵌入式系统和移动平台的开发,例如呼机、智能卡、手机(功能机)、机顶盒等。
在智能手机还没有进入公众视野的时候,你是否还记得你的摩托罗拉、诺基亚手机上有很多Java小游戏吗?这就是用J2ME开发的。
Java的初衷就是做这一块的开发。
注意:Android手机有自己的开发组件,不使用J2ME进行开发。
Java5.0版本后,J2SE、J2EE、J2ME分别更名为Java SE、Java EE、Java ME,由于习惯的原因,我们依然称之为J2SE、J2EE、J2ME。
要进行Java开发,首先要安装JDK(Java Development Kit,Java开发工具箱)。
JDK 是一系列工具的集合,这些工具是编译Java源码、运行Java程序所必需的,例如JVM、基础类库、编译器、打包工具等。不论是什么样的 Java 应用服务器,都是内置了某个版本的 JDK,因此掌握 JDK 是学好 Java 的第一步。
JDK所提供的部分工具:
- java编译器:javac.exe
- java解释器:java.exe
- java文档生成器:javadoc.exe
- java调试器:jdb.exe
前面所说的Java版本,实际上是指JDK的版本。
最主流的 JDK 是 Sun 公司发布的 JDK,除了 Sun 之外,还有很多公司和组织都开发了自己的 JDK,例如 IBM 公司开发的 JDK、BEA 公司的 Jrocket,还有 GNU 组织开发的 JDK等等。IBM 的 JDK 包含的 JVM(Java Virtual Machine)运行效率要比 Sun JDK 包含的 JVM高出许多,而专门运行在 x86 平台的 Jrocket,在服务端运行效率也要比 Sun JDK 好很多,但不管怎么说,还是需要先把 Sun JDK 掌握好。
JDK 的下载
JDK有不同的版本(J2SE、J2EE、J2ME),初学Java,一般都选择J2SE。J2SE的下载地址为:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
打开网址,会看到如下所示的页面:
下载JDK需要接受相应条款,默认是不能下载的。
选择相应的操作系统,点击下载链接即可下载。
JDK的安装
双击下载好的安装包进行安装,点击“下一步”,出现如下图所示的界面:
这里可以根据你的习惯改变JDK的安装目录,不过你要记住,后面会用到这个安装目录。
可以看到,JDK包含了Java开发工具(编译器、打包工具等)、源代码(基础类库)和公共JRE,这三项都是默认安装的,是Java开发所必须的,缺一不可。
点击“下一步”,等待安装。
JDK安装完成后,会提示你是否安装JRE,如下图所示:
JDK中已经包含了JRE,无需再次安装,点击“取消”即可。
点击“关闭”,完成安装。
环境变量的设置
如果你不了解环境变量的概念,请猛击这里:什么是环境变量
进入环境变量配置窗口,在“用户变量”中,设置3项属性,JAVA_HOME、PATH、CLASSPATH(大小写无所谓),若已存在则点击“编辑”,不存在则点击“新建”:
- JAVA_HOME:设为JDK的安装路径(如D:\Program Files\jdk1.7.0_71),此路径下包括lib,bin,jre等文件夹(此变量最好设置,因为以后运行tomcat,eclipse等都需要依靠此变量)。
- Path:使得系统可以在任何路径下识别java命令,设为:%JAVA_HOME%\bin。%JAVA_HOME%就是引用前面指定的JAVA_HOME变量。
- CLASSPATH:Java运行环境加载类的路径,只有类在classpath中,才能被识别和加载,设为 .;%JAVA_HOME%\lib(注意前面的点号(.),点号表示当前路径)。
打开一个CMD窗口,输入“java -version”或者“javac”命令,看到很多说明信息,证明已经安装并配置成功了。
Eclipse的安装
有了JDK,你可以编译Java源码,运行Java程序,但是还没有代码编辑器,没有版本管理工具,也不能方便的管理工程文件,不能与团队协作。安装Eclipse,你才能完成这些工作。
Eclipse是一款Java集成开发环境(IDE)。Java IDE有很多,有免费的,有收费的,有英文的,中文的,有多国语言的,Eclipse 是最常用的一款,IT公司大部分员工都使用Eclipse。
Eclipse 开源免费,使用人数最多,提供了丰富的插件和友好的编辑界面,资源占用比较低,速度比较快,本身就是用Java开发的。
注意:一定要设置环境变量,Eclipse 的运行依赖于这些环境变量。
Eclipse的下载地址为:http://www.eclipse.org/downloads/
打开链接,看到下面的页面:
选择红色方框框起来的版本,下载即可。
Eclipse 是免安装的,你可以将下载的压缩文件解压到任意目录,以后也可以随意更换目录。第一次启动Eclipse,会要求你设置默认的工程目录,你可以只设置一次,也可以每次启动都设置。
点击“OK”,Eclipse 就成功启动,弹出欢迎界面。
安装简体中文语言包
Eclipse 默认是英文的,如果你的英文能力比较弱,可以安装简体中文语言包。不过我建议你使用英文版,作为程序员,你绝对有必要提高你的英文水平,很多技术文档都是英文的,只要持之以恒,很快就能提高你的英文阅读能力。
语言包的下载地址为:http://www.eclipse.org/babel/downloads.php
首先查看你当前安装的Eclipse的版本。在Eclipse菜单栏中选择“Help --> About Eclipse”,弹出一个对话框:
打开链接,向下滚动鼠标,下载对应版本的语言包:
进入下载页面,找到简体中文语言包:
这里包含了Eclipse软件本身及其模块和插件的语言包,你可以一次全部下载,也可以需要的时候再来下载,红色方框框起来的是Eclipse软件本身的中文包,我们需要下载它。
将下载到的文件解压,得到一个名为eclipse的文件夹,它里面包含两个文件夹:features和plugins,复制features和plugins到你的eclipse安装目录,覆盖原程序文件即可。
跟随世界潮流,第一个Java程序输出“Hell World!”。
通过Eclipse运行程序
启动Eclipse,在菜单中选择“文件 --> 新建 --> Java项目”,弹出对话框:
填入项目名称,点击“完成”,创建项目成功,可以看到在 E:\java\workspace 目录下多出了一个Demo文件夹。
在菜单中选择“文件 --> 新建 --> 类”,弹出对话框:
输入类名称,点击“完成”,成功创建一个HelloWorld类:
将下面的代码输入到源文件,注意Java是大小写敏感的:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
public class HelloWorld { public static void main(String[] args){ System.out.println("Hello World!"); } }
点击运行按钮 ,或者在菜单中选择“运行 --> 运行”,就可以看到下方控制台输出了“Hello World!”:
恭喜你,你成功编写并运行了第一个Java程序。
打开Demo文件夹下的bin目录,出现了一个 HelloWorld.class 文件,这就是编译生成的字节码。与C、C++不同,Java编译的结果不是可执行文件,而是字节码文件。字节码文件不能直接运行,必须由JVM翻译成机器码才能运行,这就是为什么运行Java程序必须安装JVM的原因。
通过命令行运行程序
当然,你也可以直接输入命令来编译和运行Java。
打开CMD,cd 到源文件所在目录,通过 javac filename 命令完成编译,通过 java classname 命令来运行程序,如下所示:
在Eclipse中运行程序,实际上也是执行这些命令,并将输出结果显示到控制台。有了Eclipse,编程更加方便。
HelloWorld程序分析
分析上述代码,从程序开始处介绍。
public class HelloWorld
定义了一个类,类是 “public” 公共类型的,类名为“HelloWorld”。另外,Java 中主类名应该和要保存的 Java 文件名相同,也就是说,这里定义的类名是“HelloWorld”,则文件应该保存为“HelloWorld.java”。
public static void main(String[] args)
Java 中的主运行方法,它和 C/C++中的main()作用是一样的,就是所有的程序都从“main()”中开始执行。要执行 Java 程序,必须有一个包括主运行方法的类。至于“public static void”的含义,读者可以尝试着去掉,看看编译器会提示什么错误。
System.out.println("Hello world");
“System.out.println()”是 Java.lang 包的一个方法,用来将字串“Hello world”输出到命令行窗口。
大家先不要急于理解所有概念,后续会一一讲解。
Java是一门面向对象的编程语言,理解Java,首先要理解类与对象这两个概念。
Java中的类可以看做C语言中结构体的升级版。结构体是一种构造数据类型,可以包含不同的成员(变量),每个成员的数据类型可以不一样;可以通过结构体来定义结构体变量,每个变量拥有相同的性质。例如:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#include <stdio.h> int main(){ // 定义结构体 Student struct Student{ // 结构体包含的变量 char *name; int age; float score; }; // 通过结构体来定义变量 struct Student stu1; // 操作结构体的成员 stu1.name = "小明"; stu1.age = 15; stu1.score = 92.5; printf("%s的年龄是 %d,成绩是 %f\n", stu1.name, stu1.age, stu1.score); return 0; }
运行结果:
小明的年龄是 15,成绩是 92.500000
Java中的类也是一种构造数据类型,但是进行了一些扩展,类的成员不但可以是变量,还可以是函数;通过类定义出来的变量也有特定的称呼,叫做“对象”。例如:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
public class Demo { public static void main(String[] args){ // 定义类Student class Student{ // 通过class关键字类定义类 // 类包含的变量 String name; int age; float score; // 类包含的函数 void say(){ System.out.println( name + "的年龄是 " + age + ",成绩是 " + score ); } } // 通过类来定义变量,即创建对象 Student stu1 = new Student(); // 必须使用new关键字 // 操作类的成员 stu1.name = "小明"; stu1.age = 15; stu1.score = 92.5f; stu1.say(); } }
运行结果:
小明的年龄是 15,成绩是 92.5
在C语言中,通过结构体名称就可以完成结构体变量的定义,并分配内存空间;但是在Java中,仅仅通过类来定义变量不会分配内存空间,必须使用new关键字来完成内存空间的分配。
可以将类比喻成图纸,对象比喻成零件,图纸说明了零件的参数及其承担的任务;一张图纸可以生产出具有相同性质的零件,不同图纸可以生产不同类型的零件。
在Java中,使用new关键字,就可以通过类来创建对象,即将图纸生产成零件,这个过程叫做类的实例化,因此也称对象是类的一个实例。
注意:类只是一张图纸,起到说明的作用,不占用内存空间;对象才是具体的零件,要有地方来存放,才会占用内存空间。
类所包含的变量和函数都有特定的称呼,变量被称为属性(通常也称成员变量),函数被称为方法,属性和方法统称为类的成员。
面向对象编程(Object Oriented Programming, OOP)
类是一个通用的概念,Java、C++、C#、PHP等很多编程语言中都有类,都可以通过类创建对象。可以将类看做是结构体的升级版,C语言的晚辈们看到了C语言的不足,尝试加以改善,继承了结构体的思想,并进行了升级,让程序员在开发或扩展大中型项目时更加容易。
因为Java、C++等语言都支持类和对象,所以使用这些语言编写程序也被称为面向对象编程,这些语言也被称为面向对象的编程语言。C语言因为不支持类和对象的概念,被称为面向过程的编程语言。
实际上,面向对象只是面向过程的升级。
在C语言中,可以将完成某个功能的重复使用的代码块定义为函数,将具有一类功能的函数声明在一个头文件中,不同类型的函数声明在不同的头文件,以便对函数进行更好的管理,方便编写和调用。
在Java中,可以将完成某个功能的代码块定义为方法,将具有相似功能的方法定义在一个类中,也就是定义在一个源文件中(因为一个源文件只能包含一个公共的类),多个源文件可以位于一个文件夹,这个文件夹有特定的称呼,叫做包。
面向对象编程在软件执行效率上绝对没有任何优势,它的主要目的是方便程序员组织和管理代码,快速梳理编程思路,带来编程思想上的革新。
Java 官方为开发者提供了很多功能强大的类,这些类被分别放在各个包中,随JDK一起发布,称为Java类库或Java API。
API(Application Programming Interface, 应用程序编程接口)是一个通用概念。
例如我编写了一个类,可以获取计算机的各种硬件信息,它很强大很稳定,如果你的项目也需要这样一个功能,那么你就无需再自己编写代码,将我的类拿来直接用就可以。但是,我的类代码很复杂,让你读完这些代码不太现实,而且我也不希望你看到我的代码(你也没必要也不希望读懂这些晦涩的代码),我要保护我的版权,怎么办呢?
我可以先将我的类编译,并附带一个文档,告诉你我的类怎么使用,有哪些方法和属性,你只需要按照文档的说明来调用就完全没问题,既节省了你阅读代码的时间,也保护了我的版权。例如,获取CPU信息的方法:
getCpuInfo(int cpuType);
这就是一个API。也就是说,该文档中描述的类的使用方法,就叫做API。
我也可以开发一个软件,用来清理计算机中的垃圾文件,我比较有公益心,希望让更多的开发人员使用我的软件,我就会在发布软件的同时附带一个说明文档,告诉你怎样在自己的程序中调用,这也叫做API。
Java API也有一个说明文档,入口地址:http://www.oracle.com/technetwork/java/api
选择对应版本的Java,点击链接进入即可。J2SE 1.7 的API地址为:http://docs.oracle.com/javase/7/docs/api/
这个文档是在线的,官方会随时更新。当然你也可以下载到本地,请大家自己百度怎么下载。
打开J2SE 1.7 的API文档,如下图所示:
Java类库中有很多包:
- 以 java.* 开头的是Java的核心包,所有程序都会使用这些包中的类;
- 以 javax.* 开头的是扩展包,x 是 extension 的意思,也就是扩展。虽然 javax.* 是对 java.* 的优化和扩展,但是由于 javax.* 使用的越来越多,很多程序都依赖于 javax.*,所以 javax.* 也是核心的一部分了,也随JDK一起发布。
- 以 org.* 开头的是各个机构或组织发布的包,因为这些组织很有影响力,它们的代码质量很高,所以也将它们开发的部分常用的类随JDK一起发布。
在包的命名方面,为了防止重名,有一个惯例:大家都以自己域名的倒写形式作为开头来为自己开发的包命名,例如百度发布的包会以 com.baidu.* 开头,w3c组织发布的包会以 org.w3c.* 开头,微学苑发布的包会以 net.weixueyuan.* 开头……
组织机构的域名后缀一般为 org,公司的域名后缀一般为 com,可以认为 org.* 开头的包为非盈利组织机构发布的包,它们一般是开源的,可以免费使用在自己的产品中,不用考虑侵权问题,而以 com.* 开头的包往往由盈利性的公司发布,可能会有版权问题,使用时要注意。
java中常用的几个包介绍:
包名 | 说明 |
---|---|
java.lang | 该包提供了Java编程的基础类,例如 Object、Math、String、StringBuffer、System、Thread等,不使用该包就很难编写Java代码了。 |
java.util | 该包提供了包含集合框架、遗留的集合类、事件模型、日期和时间实施、国际化和各种实用工具类(字符串标记生成器、随机数生成器和位数组)。 |
java.io | 该包通过文件系统、数据流和序列化提供系统的输入与输出。 |
java.net | 该包提供实现网络应用与开发的类。 |
java.sql | 该包提供了使用Java语言访问并处理存储在数据源(通常是一个关系型数据库)中的数据API。 |
java.awt | 这两个包提供了GUI设计与开发的类。java.awt包提供了创建界面和绘制图形图像的所有类,而javax.swing包提供了一组“轻量级”的组件,尽量让这些组件在所有平台上的工作方式相同。 |
javax.swing | |
java.text | 提供了与自然语言无关的方式来处理文本、日期、数字和消息的类和接口。 |
如果你希望使用Java包中的类,就必须先使用import语句导入。
import语句与C语言中的 #include 有些类似,语法为:
import package1[.package2…].classname;
package 为包名,classname 为类名。例如:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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 的 java.lang 包中所有的类(import java.lang.*;),其中定义了一些常用类,如 System、String、Object、Math 等,因此我们可以直接使用这些类而不必显式导入。但是使用其他类必须先导入。
前面讲到的”Hello World“程序使用了System.out.println(); 语句,System 类位于 java.lang 包,虽然我们没有显式导入这个包中的类,但是Java 编译器默认已经为我们导入了,否则程序会执行失败。
Java类的搜索路径
Java程序运行时要导入相应的类,也就是加载 .class 文件的过程。
假设有如下的 import 语句:
import p1.Test;
该语句表明要导入 p1 包中的 Test 类。
安装JDK时,我们已经设置了环境变量 CLASSPATH 来指明类库的路径,它的值为 .;%JAVA_HOME%\lib,而 JAVA_HOME 又为 D:\Program Files\jdk1.7.0_71,所以 CLASSPATH 等价于 .;D:\Program Files\jdk1.7.0_71\lib。
Java 运行环境将依次到下面的路径寻找并载入字节码文件 Test.class:
- .p1\Test.class("."表示当前路径)
- D:\Program Files\jdk1.7.0_71\lib\p1\Test.class
如果在第一个路径下找到了所需的类文件,则停止搜索,否则继续搜索后面的路径,如果在所有的路径下都未能找到所需的类文件,则编译或运行出错。
你可以在CLASSPATH变量中增加搜索路径,例如 .;%JAVA_HOME%\lib;C:\javalib,那么你就可以将类文件放在 C:\javalib 目录下,Java运行环境一样会找到。