第一章 走进Java的世界

        通过本章的学习可以达到如下目标:了解Java发展历史以及语言特点,理解Java语言可移植性的实现原理,掌握JDK的安装与配置方式,并且可以使用JDK运行第一个Java程序,了解JShell交互式编程工具的使用,掌握CLASSPATH的作用以及与JVM的关系。
        Java是现在最为流行的编程语言,也是众多大型互联网公司首选的编程语言与技术开发平台。本章将讲解Java语言的发展历史。

1.1 Java发展历史

        Java是SUN(Stanford University Network,1982成立)公司开发出来的一套编程语言,主要涉及这是James Gosling。其最早来源于一个叫做Green的嵌入式程序项目,目的是为家用消费产品开发一个分布式代码系统,这样就可以通过网络对家用电器进行和控制,
        在Green项目最开始的时候,SUN的工程师原本打算使用C++语言进行项目开发。但是考虑到C++语言开发的复杂性,于是基于C++开发出自己独立平台OAK(被称为Java的前身,是一种用于网络的精巧的安全语言),Sun公司曾一次投标一个交互式电视项目,单倍SGI打败。与之当时oak无家可归,恰巧这是Marc Andreessen开发Mosaic和Netscape项目启发了oak强沐足成员,SUN公司开发出了HotJava浏览器,出发了Java进军互联网,但SUN公司最红被ORACLE收购。
提示:Oracle与SUN公司的关系:
        熟悉Oracle公司历史的读者都清楚:Oracle一直以Microsoft公司为对手,最初许多策略都与之有关,两家都致力于企业办公平台的技术支持。整个企业级系统开发核心有四个组成部分:操作系统、数据库、中间件、编程语言。Oracle收购SUN公司后就拥有了庞大的开发群体,比微软的.NET的更多;随后,Oracle收购了BEA公司,得到了用户群体总多的Weblogic中间件,使得其完善了企业平台支持的能力。
        Java是一门综合性的编程语言,从最初设计时就综合考虑了嵌入式系统以及企业平台,所以在实际的Java开发过程中,其主要有三种开发方向,分别为JavaEE(最早称为J2SE)、JavaEE(最早称为J2EE)、JavaME(J2ME),其基本关系如下:
(1)Java标准开发(Java Platform Standard Edition,Java SE):包含构成Java语言核心的类,例如:数据库链接、接口定义、输入\输出、网络编程,当用户安装了JDK(Java开发工具包)之后就自动支持此类开发支持。
(2)Java嵌入式开发(Java Platform Micro Edition,Java Me):包含Java SE中的部分类,用于消费类电子产品的软件开发。例如,呼机、智能卡、收集、PDA、机顶盒,目前此类已经被Android开发所代替。
(3)Java企业开发(Java PlatForm Enterprise Edition,Java EE):包含JavaSE中的所有类,并且还包含用于开发企业级应用的类,例如EJB、Servlet、JSP、XML、事务控制,也是目前大型系统和互联网项目开发的主要平台。

1.2 Java语言特点

Java语言不仅拥有完善的编程体系,同时也受到众多软件厂商的追捧--围绕其开发出了大量的第三方应用,使得Java开发出了大量的第三方应用,使得Java技术得以群素的壮大,并且广泛使用,Java有以下特性:
1.简洁有效
        Java语言是一种相当简洁的‘面向对象’的程序设计语言。Java语言克服了C++语言的所有难以理解的和容易混淆的缺点,例如头文件、指针、结构、单元、运算符重载和虚拟接触类等。他更加严谨、简洁。因此也足够简单。
2 可移植性
        Java语言最大的特点在于‘一次编写、处处运行’。Java语言的执行基于Java虚拟机(Java Virtual Machine,JVM)运行,在其源代码编译之后将形成字节码文件。在不同的操作系统上只需植入与系统匹配的JVM就可以直接利用JVM的‘指令集’解释程序运行,降低了程序开发的复杂度,提高了开发效率。
3 面向对象
‘面向对象’是软件工程学的一次革命,大大提升了人类的软件开发能力,是一个伟大的进步,是软件发展的一个里程碑,Java是一门面向对象的编程语言,并且有着更加良好的程序结构定义。
4 垃圾回收
垃圾指的是无用的内存回收,Java提供了垃圾回收机制(Garbage Collection ,GC),利用GC机制使得开发者在编写程序时只需要考虑自身程序的合理性,而不用去关注GC问题,极大的简化了开发难度。
5 引用传递
Java避免使用复杂的指针,而是用更加简单的引用来代替指针。指针虽然是一种高效的内存处理模式,但是其需要较强的逻辑分析能力。而Java在设计的时候充分考虑到了这一点,所以开发者直接利用引用就可以简化指针的处理,引用在初学重视最难以理解的部分。
6 适合分布式计算
Java设计的初衷是为了更好地解决网络通信问题,所以Java语言非常适合分布式计算程序的开发,它不仅提供了简洁的Socket开发支持、适合于公共网关接口(Common Gateway Interface,CGI)程序的开发,还提供了对NIO、AIO的支持,使得网络通信性能得到了强大的改善。
7 健壮性
Java语言在进行编译时会进行严格的语法检查,可以说是Java的编译器是最严格的编译器。在程序运行中也可以通过合理的异常检查处理避免错误产生时的程序中断执行,从而保证Java程序可以稳定的运行。
8 多线程编程支持
线程是一种轻量级进程,是现代程序设计中必不可少的一种特性。多线程处理能力使得程序具有更好的交互性和实时性。Java在多线程处理方面性能超群,随着JAVA语言的不断完善,它还提供了JUC的多线程开发框架,以方便开发者实现多线程的复杂开发。
9 较高的安全性
Java程序的执行依赖于JVM解释字节码程序文件,而JVM拥有较高的安全性,同时随着JAVA斑斑的不断更新,面对最新的安全隐患也可以及时进行修补。
10函数式编程
除了支持面向对象编程技术之外,JAVA中也有着良好的函数式编程支持(Lambda表达式支持),利用函数式编程可以更简洁的实现程序代码编写。
11 模块化支持
Java9版本开始提供的最重要功能,毫无疑问就是模块化(Module),代码名字叫做Jigsaw(拉锯),可以将庞大冗余的Java分解成一个个的模块,方便进行开发和部署。
        除了以上特征之外,Java语言最大的特点还在于其开源性,使得JAVA语言在业界收到大量的关注。同时Java语言还在不断地维护更新中,使其自身的完善性也在不断加强。

1.3 Java可移植性

计算机高级语言类型主要有编译型和解释型两种,而JAVA刚好是这两种类型的集合。而Java程序中所提供的源代码需要编译后才能执行,其运行机制如图:
Java语言在执行的时候必须对源代码进行编译,而编译后将产生一种字节码(*.class文件),这是一种‘中间’文件类型,需要由特定的系统环境所执行,即Java虚拟机(Java Virtual Machine,JVM).在JVM中定义了一套完善的指令集,并且不同操作系统版本的JVM所拥有的‘指令集’是相同的。程序员只需要针对JVM的指令集进行开发,并由JVM区匹配操作系统,这样就解决了程序的可移植性问题,JVM的执行原理如下:
提示:关于Java可移植性的简单理解
Java可移植性的过程就类似于以下情景:有一个中国富商要同时跟美国、汗国、俄罗斯、日本、法国、德国等几个国家洽谈业务,但是不懂他们的语言,于是他针对每个国家各请了一个翻译。这样她可以只对翻译说话,再由不同的翻译将他们说的话给不同国家的客户,这样在各个国家通用了。

1.4 搭建Java开发环境

Java语言执行需要经过编译源代码,而后才可以在JVM上解释字节码程序,这些操作都需要JDK(Java Development Kit,Java开发工具包)的支持才可以正常完成。

1.4.1 JDK简介

JDK是Oracle提供给开发者的一套Java开发工具包,开发者可以利用JDK进行源代码的编译,也可以进行字节码的解释执行,开发者可以直接通过Oracle的官方网站(http://www.oracle.com)获得JDK工具:
进入JavaSE的下载页面时会询问客户下载的JDK类型,主要有以下几种。
JDK(Java Development Kit):主要提供Java程序的开发支持,同时也提供了有JRE(Java Runtime Enviroment)的支持,也就是说安装完JDK之后就同时具备了开发和运行Java程序的支持,也是本节使用的环境。
JRE(Java Runtime Enviroment):提供有Java的运行环境,但是无法进行项目开发。此时JRE分为两类:一类是Server JRE(服务器端JRE);令一类是ClientJRE(客户端JRE)
由于本次需要进行程序的编译与解释,所以将下载JDK,打开相应的连接之后选择win10操作系统配置:

1.4.2 JDK的安装与配置

用户下载完成JDK之后将获得一个Windows的程序安装包,如果要安装只需双击运行即可,为了方便,将JDK工具安装到“D:\Java”目录中,咋子进行JDK安装的同时,也会询问是否进行JRE的安装,选择安装后将更新本机系统的JRE为当前JDK版本。
当JDK与JRE安装完成后可以直接打开JDK安装目录的bin子目录(D:\Java\jdk-21\bin),在此目录下提供了两个核心命令:javac.exe和java.exe:
javac.exe与java.exe这两个命令并不属于Windows本身,如果要在命令行里直接运行,在Winodws系统中好难过进行可执行程序的路径配置,操作步骤:计算机-->属性-->高级系统设置(或者WIN+R+sysdm.cpl)--->编辑Path环境属性--->添加JDK的目录(D:\Java\jdk-21\bin)环境属性配置完毕后,用户可以启动命令行工具,随后输入javac.exe
如果出现以下界面则表示JDK安装成功。

1.5 Java编程起步

Java是一门完善的编程语言,包含完整的语法和含义。在Java程序中所有的源代码必须以.java作为后续,同时所有的程序代码都需要放在一个类中并且由主方法开始执行。为了帮助读者快速掌握Java程序的结构,下面编写一个简单的程序,盲目地市在屏幕上进行信息的输出。
提示:注意程序中的大小写,Java程序是严格遵守大小写的。
范例:编写第一个Java程序(保存路径D:\mldnjava\Hello.java)

public class Hello{        //程序所在类
public static void main(String[]args)   //程序主方法
{
System.out.println("课程资源请访问"); //屏幕输出信息
}
}
程序编写完成后可以按照以下的命令进行编译与解释
【编译程序】在命令行方式下,进入程序所在的目录,执行javac Hello.java,对程序进行编译。比那一晚陈厚可以发现咋子目录中多了一个Hello.class文件。
【解释程序】程序编译之后,输入java Hello即可在JVM上解释Java程序
提示:认真编写第一个程序:
如果暂时不理解上面的程序也没关系,读者只需要按部就班的数据程序并进行编译、执行,得到与本书相同的结果即可。
        另外,读者需要知道的是,Java程序分为Application程序和Applet程序,其中使用Main方法的程序主要是Application程序,本章主要介绍Application程序进行讲解,Applet程序主要应用在网页上面且不再使用,
        虽然是一个小小的信息输出程序并不麻烦,但是需要注意的是,任何语言都有自己的程序组成结构,下面将针对Java程序代码进行分析。

1 类

Java中的程序以类为单位,所有的程序都必须在class中进行定义,类的定义有以下两种形式:class 类名称{                               |                               public class 类名称{
代码                                             |                                          代码                              
}                                                   |                                        }
在本次的程序中使用的是第二种形式,而"public class Hello{}"代码中的Hello就是类名称。
如果将现在的代码修改为public class HelloMLDN{}文件名称仍然是Hello.java,则在变异过程中将会出现下列:
错误的提示信息
        这时因为如果在该类的定义中使用了public class的声明,那么文件名称必须与类名称保持一致。如果没有使用public class,而只使用了class,如class HelloMLDN{},此时文件名称与类名称不相同,但是最终生成的*.class文件的名称将为HelloMLDN.class
也就是说,使用class定义的类,其文件名称与类名称可以不同,但是生成的*.class文件的名称就是class定义的类的名称,那么执行的一定是*.class的文件名称,即执行java HelloABC
        在一个*.java文件中可以同时有多个类定义,并且会将不同的class保存在不同的*.class文件之中:
范例:在一个*.java中定义多个class:
public class Hello{
public static void main(String[] args)
{
System.out.println("课程资源请访问");
}
}
class A{}
class B{}
此时程序中一共有三个class的声明,所以编译之后会形成3个class文件,包括A.class,B.class,Hello.class:
通过以上的分析,可以得到以下的结论:
public class定义要求文件名称与类名称保持一致。也就是说,一个*.java文件中只允许有一个public class 的定义
class定义的类文件名称可以与类名称保持不一致,但是在编译之后每一个使用class声明的泪都会生成一个*.class文件,也就是说,一个*.java文件可以善生多个*.class文件。
提示:实际的开发来讲,一个*.java文件里面一般只会定义一个public class,但是现阶段属于学习过程,所以会在一个*.java文件里面定义多个类,那么就会出现public class与class在一个文件中混合声明不同类结构的情况。
        关于类名称的定义的重要说明:类名称要求每个单词的首字母大写,如HelloDemo,TestDemo,此为Java命名规范,开发者必须严格遵守。

2 主方法

主方法是一切程序的起点,所有的程序代码都从主方法开始执行,Java中的主方法定义如下:
public static void main(String args[])
{
执行的代码
}
在以后的学习中为了方便,将把主方法所在的类称为主类,并且主类都使用public class声明。

3 系统输出

如果要在屏幕上显示信息,则可以使用以下方法。
System.out.println():输出之后追加一个换行
System.out.print():输出之后不追加换行。
范例观察换行:
public class Hello{
public static void main(String args[])
{
System.out.print("111");
System.out.print("111");
System.out.print("111");
}
}
本程序由于输出时,诶呦进行换行,所以所有的输出结果都显示在同一行。

1.6 JShell交互式编程工具

在JDK1.9之后提供了一个方便的交互工具--JSell,利用此工具可以方便的执行程序,并且不再需要编写主方法就可以应用,如果要想运行JShell工具,直接在命令行方式下输入jshell即可:

在JShell交互环境下可以直接编写程序,例如,可以直接在交互式编程模式下输入以下内容。
命令1:100+200
命令2:System.out.println("ooo");

当用户输入后可以自动执行程序。
除了可以直接在JShell中编写代码之外,也可以直接在本地磁盘中运行,而后交由JShell加载执行,例如,本次程序的保存路径是:D:\mldnjava\mldn.txt
范例:定义JShell程序文件mldn.txt

System.out.println("111")
随后在JShell中可以直接利用/open进行文件内容加载

如果要想退出JShell交互式编程边境,可以直接输入/exit

1.7 CLASSPATH环境属性

Java程序的执行依赖于JVM,当用户使用Java命令去解释class字节码文件时实际上都会启动一个JVM进程,而在这个JVM进程中需要一个明确的类加载路径,而在这个JVM进程中需要有一个明确的类加载路径,而这个路径就是通过CLASSPATH环境属性指派的
        在Java中可以使用SET CLASSPATH命令指定Java类的执行路径,这样就可以在不同的路径下加载制定路径中class文件进行执行。下面通过一个实验来了解CLASSPATH的作用,假设这里的Hello.class类位于D:\mldnjava目录下
在任意盘符的命令行窗口下执行下列命令:
SET CLASSPATH=D:\mldnjava
之后在E盘根目录下执行:java  Hello

由上面的输出结果可以发现,虽然在E盘根目录中并没有Hello.class文件,但是也可以用java Hello执行Hello.java文件。之所以会有这种结果,就是因为在操作中使用了SET CLASSPATH命令,将类的加载路径指向了D:\mldnjava,所以运行时,会从D:\mldnjava目录中查找所需要的类。
提示:CLASSPATH与JVM的关系
CLASSPATH主要指的是类的运行路径,实际上在读者执行Java命令的时候,对于本地的操作系统来说就意味着启动了一个JVM,那么JVM在运行的时候需要通过CLASSPATH加载所需要的类,而默认情况下CLASSPATH是指向当前目录(当前命令行窗口所在的目录,所以会从目录下直接查找)
        但是这样随意设置加载路径的方式并不好用,最好的做法还是从当前所在路径中加载所需要的程序类。所以在设置CLASSPATH时,最好将CLASSPATH指向当前目录,即所有的class文件都从当前目录下,路径设置为“.”:
SET CLASSPATH=.
但是这样的操作都属于每一个命令行窗口的单独设置,如果想让CLASSPATH都有作用,则可以在环境属性中添加CLASSPATH属性并进行配置

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值