第1章 - Java 介绍
1 计算机语言概述
1).什么是软件
软件: 一系列按照特定顺序组织的计算机数据和指令的集合就是软件
常见的软件 1).系统软件: DOS, Windows, Linux等。2).应用软件: 扫雷, 迅雷, QQ等
2).人机交互
软件的出现实现了人与计算机之间的更好的交互,一般的交互方式如下:
1).图形化界面(Graphical User Interface GUI), 这种方式简单直观, 使用者易于接受, 容易上手操作.
2).命令行方式(Command Line Interface CLI), 需要有一个控制台, 输入特定的指令, 让计算机完成一些操作, 较为麻烦, 需要记录在一些命令
3).什么是计算机语言
语言: 是人与人之间用于沟通的一种方式
计算机语言: 人与计算机交流的方式(那么需要学习计算机语, 如C, C++, Java等)
2 Java语言概述
1).SUN(Stanford University Network, 斯坦福大学网络公司), 1995年推出的一门高级编程语言
2).是一种面向Internet的编程语言
3).随着Java技术在Web方面的不断成熟, 已经成为Web应用成功的首选开发语言
4).是简单易学, 完全面向对象, 安全可靠, 与平台无关的编程语言
2.1 Java语言的三种技术架构
1).J2EE(Java 2 Platform Enterprise Edition)企业版
是为开发企业环境下的应用程序提供的一套解决方案
该技术体系中包含的技术如Servlet, Jsp等, 主要针对于Web应用程序开发
2).J2SE(Java 2 Platform Standard Edition)标准版
是为开发普通桌面和商务应用程序提供的解决方案
该技术体系是其他两者的基础, 可以完成桌面应用程序的开发(如Java版的扫雷)
3).J2ME(Java 2 Platform Micro Edition)小型版
是为开发电子消费产品和嵌入式设备提供的解决方案
该技术体系主要应用于小型的消费类产品, 如手机中的应用程序等
【注: Java5.0版本后, 更名为JAVAEE, JAVASE, JAVAME】
2.2 Java的特点: 跨平台原理,安全性
JVM(Java虚拟机)是一个软件, 不同的平台有不同的版本
我们编写的Java源码, 编译后会生成.class 文件, 称为字节码文。解决了2大问题:安全性 和 可移植性
JVM就是负责将.class文件(字节码文件)翻译成特定平台下的机器码然后运行。JVM是一个"桥梁", 是一个"中间件", 是实现跨平台的关键, Java代码首先被编译成字节码文件, 再由JVM将字节码文件翻译成机器语言, 从而达到运行Java程序的目的(这个过程中, 我们编写的Java程序没有做任何改变, 仅仅是通过JVM这一"中间层", 就能在不同平台上运行, 真正实现了"一次编译, 到处运行"的目的)
【注意: 编译的结果不是生成机器码, 而是生成字节码, 字节码不能直接运行, 必须通过JVM翻译成机器码才能运行. 不同平台下编译生成的字节码是一样的, 但是由JVM翻译成的机器码却不一样.】
所以, 运行Java程序必须有JVM的支持, 因为编译的结果不是机器码, 必须要经过JVM的再次翻译才能执行. 即使你将Java程序打包成可执行文件(例如.exe), 仍然需要JVM的支持
【注意: 跨平台的是Java程序, 不是JVM. JVM是用C/C++开发的, 是编译后的机器码, 不能跨平台, 不同平台下需要安装不同版本的JVM.】
2.3 什么是JRE, JDK
1).JRE(Java运行环境)
包含Java虚拟机(JVM Java Virtual Machine)和Java程序所需的核心类库, 如果想要运行一个开发好的Java程序, 计算机安装JRE即可
2).JDK(Java开发工具包)
JDK提供给Java开发人员使用, 包含了Java的开发工具, 也包括了JRE, 所以安装了JDK, 就不用单独装JRE
【简单而言, 使用JDK开发完成的Java程序, 交给JRE去运行】
2.3.3 JDK目录介绍
sample: 包含了使用JNLP的示例应用程序, JNLP是指Java Network Launching Protocol, 用于在一个网络服务器中执行应用程序或applet, 但不需要浏览器, 也不需要下载和安装代码.
jre: 包含执行Java程序时将要用到的Java运行时环境(Java Runtime Environment, JRE)工具. Java库中的类存储在jre\lib目录下. 它们并不会单个出现. 它们都被打包并存放在归档文件rt.jar中. JRE会在程序执行时确保提取所需的类.
2.4 Javac.exe
Win+R -> 进入CMD -> 执行JDK安装位置下的/bin/javac.exe
命令行模式(非图形化界面)
输入help看命令行操作
基本操作:注意有包名和没有bao名区别
javac Hello.java
java Hello
javac com/demo/Hello.java
java com.demo.Hello
3 Java语言环境变量
3.1 环境变量的配置
Windows:
1).我的电脑 -> 属性 -> 系统设置 -> 环境变量
2).在系统变量中, 新建一个JAVA_HOME,配置内容:D:\Program Files\Java\jdk1.8.0_45
3).寻找PATH变量:添加内容:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
4).寻找CLASSPATH, 没有就新增CLASSPATH变量,内容:.;%JAVA_HOME%\lib;%JAVA_HOME%\lib\tools.jar
【注意: 配置\jdk\bin的环境变量, 才可以在任何目录下使用javac.exe】
Linux
vim /etc/profile
添加内容
#Java config
JAVA_HOME=/usr/local/app/jdk1.8.0_152
JRE_HOME=/usr/local/app/jdk1.8.0_152/jre
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
export JAVA_HOME JRE_HOME CLASS_PATH PATH
使其生效
source /etc/profile
3.2 JAR
(basic.demo03.JarDemo)
JAR(Java Archive, Java 归档文件)是与平台无关的文件格式, 它允许将许多文件组合成一个压缩文件. 为J2EE应用程序创建的JAR文件是EAR文件(企业JAR文件).
jar: 可以看到命令列表
步骤, cmd进入要打包的目录:
jar -cf jarDemo.jar
3.3 临时配置环境变量
进入cmd,使用set path来设置临时变量,而不会改变电脑本身环境变量
set path=*********
4 Java程序开发体验
4.1 Hello World!
(basic.helloworld.HelloWorld)
要学习Java程序, 首先应该了解程序的基本结构, 这样有利于进一步学习Java语言. 一个Java程序的基本结构大体分为包、main()方法、标识符、关键字、语句和注释等
1.HelloWorld的初体验
1).将Java代码编写到扩展名为.java的文件中
2).通过javac命令对该java文件进行编译。javac HelloWord.java
3).通过java命令对生成的class文件进行运行。java HelloWorld.class
流程:.java文件 -- javac.exe(编译) -> .class文件 -- java.exe(运行) -> 结果
【注意: 1.在Java语言中, 主方法的写法是固定的, 除主方法的形参"String[] args"可以修改为"String args[]"以外, 不可以修改其他任何部分, 否则Java程序都将无法运行
2.设置的classpath环境变量就是javac 生成class的位置
3.Java编译器假设源代码在工作环境中使用默认的字符编码. 如果不是, 就必须设定-encoding选项来告知编译器源代码所使用的字符编码. 例如: javac.exe -encoding Unicode HelloWorld.java】
4.2 Java的类库
Java中的库是类的集合(通常提供相关的工具)可以在程序中使用. 下表是经常使用的标准包
包名 | 描述 |
java.lang | 支持基本语言特征并处理数组和字符串的类. 该包在程序中自动加载,所以在程序中直接可用 |
java.io | 用于流输入和输出操作的类 |
java.nio.file | 用于文件输入和输出的类 |
java.util | 各种类型的实用程序类, 包括在集合或数据项组中管理数据的类 |
javax.swing | 提供易用且灵活的组件来构建图形用户界面(Graphical User Interface, GUI). [也称Swing组件] |
java.awt | 提供原始的GUI组件(JDK1.1)以及一些对Swing组件必要的基本支持 |
java.awt.geom | 这些类定义二维的几何形状 |
java.awt.event | 在窗口应用程序的实现中用来处理程序中的事件. 事件是指移动鼠标、单击鼠标左键或菜单选项等 |
4.3 Java与Unicode
Unicode是一个标准字符集(用来支持对几乎所有语言的编码)。Unicode使用16比特(大部分国家的语言都用不同的8比特字符集定义,但是8比特只能有256种不同的编码,不足以表示那么多的字符)的编码来代表一个字符(所以每个字符占据两个宇节), 而且16比特可以区别65535个非零字符编码. 有如此多可用的字符编码, 足够为每种主要的字符集分配白身的编码集, 包括Kanji这样的字符集, 用于日语并且需要上万个字符编码. 而且事情还不止于此. Unicode支持三种编码方式, 最多允许表示多达一百万个的额外字符.
Java源代码是Unicode字符. 注释、标识符以及字符和字符串都能使用Unicode集合中表示字母的任意字符. Java也支持使用Unicode来表示字符和字符串, 所以框架支持一个程序中含有各种国际语言. 最熟悉的普通ASCII集合对应Unicode集合的前128个字母. 除了要注意每个字符通常占据两个字节之外, 大部分情况下可以忽略对Unicode字符的处理, 除非要从一开始就构建一个支持多语言的应用程序.
之所以说每个Unicode字符通常都占据两个字节, 是因为Java支持Unicode4.0, 因而允许使用32比特编码的超大字符集. 可能认为使用16比特能够表示的64K的字符集己经足够, 但是其实不然. 仅仅东方语言, 例如日语、朝鲜语以及中文就单独包含70000多个象形文字(一个象形文字只是一个图形符号, 有时叫做表意文字). 超大字符集用来表示在由 16比特字符定义的基本多语言集合中没有包括的字符