第一章 Java简介
1.1 Java概览
applet程序可嵌入网页; Java会通过隐式检测禁止Java applet的恶意代码;
Java Server Pages-JSP 创建服务器应用程序, 动态创建针对收到的特殊请求定制HTML页面并下载到客户端.
一次编写, 任意运行; 提供了GUI, XML, database和network communication等应用的支持;
1.2 语言特性
与机器无关; 可移植性较好; 面向对象object-oriented; 内置支持各国字符集的功能;
1.3 学习Java
1.3.1 Java程序
嵌入到网页中的Java applet, 独立的程序Java appliaction-控制台应用程序和窗口应用程序;
1.3.2 学习路线
1)基本概念 2)语句方法 3)类, 面向对象 4)处理错误和读写文件 5)泛型类类型 6)图形UI和applet 7)Extensible Markup Language-XML
1.4 环境
跨平台的方式: Java程序不是直接在计算机上执行, 而是在Java 2 Platform的标准化环境中运行, Java Runtime Environment-JRE;
Java Platform包含两部分: Java虚拟机Java Virtual Machine-JVM, Java应用编程接口Java Appliaction Programing Interface-Java API;
Java编译器将编写的Java代码转换为一个由字节码bytecode组成的二进制程序; 字节码是对JVM的机器指令; 当执行Java程序时, Java解释器Interpreter会坚持字节码, 进行解释和检查确保安全执行, 然后在JVM中执行操作;
Java解释器可以独立运行, 也可以作为浏览器的一部分Chrome, Firefox, IE...
Java程序由字节码而不是机器指令组成, 与运行的硬件完全隔离; Java解释器位于程序和物理机器之间, 可以阻止执行程序中非授权的操作;
解释过的Java程序的运行速度只有使用本地机器指令的程序速度的1/10, 但在现在的Java机器实现中, 很多性能缺陷已经改善;
1.4.1 程序开发
Java2Platfrom, Standard Edition(J2SE), JDK-32/64bit
1. 程序代码编辑器
Interactive Development Environment-IDE; JCreator, Notepad++, NetBeans;
2. JDK
在线文档-http://docs.oracle.com/javase/7/docs/api/
JNLP-Java Network Launching Protocol, 用于在一个网络服务器中执行应用程序或applet, 无需浏览器和下载安装代码;
JRE库中的类存储在jre\lib下, 被打包归档在rt.jar中, JRE会在程序执行时提取所需的类;
CLASSPATH环境变量;
3. 解压类库的源代码
类库的源代码包含在src.zip中;
4. 编译Java程序
Java源代码文件: classname.java;
JDK编译器: javac classname.java; javac是Java编译器的名称;
-source选项用来设定Java语言版本: javac -source 1.7 classname.java; 默认当前版本, 在使用旧版本编译时选用;
Note 文件名和类名必须一样;
使已存的CLASSPATH变量失效: javac -classpath . classname.java;
CLASSPATH的值在-classpath选项名的后面, 点号定义当前目录, 编译器会在当前目录下查找文件;
Note 常用"-classpath .", 多个CLASSPATH用分号隔开, 路径包含空格用双引号包括;
Note 避免将源文件放在安装JDK的目录下.
编译器会产生.class同名文件, Java可执行模块存放在.class中;
Javac -help; java -help;...
5 执行程序
JDK中的Java解释器执行.class文件中的字节码程序: java classname; 提供类名, 包含main();
选项-enableassertions(-ea)对于使用断言assertion的程序来说很有必要; -classpath(-cp);
使已存CLASSPATH无效:
1
|
java -ea -
cp
. classname;
|
Java解释器会分析并执行字节码指令来执行程序;
6 执行applet
Java编译器能编译应用程序和applet; 但applet必须在执行前嵌入网页, 然后在使用了Java的Web浏览器中执行, 或者appletviewer;
1
|
appletviewer MyApplet.html
|
applet嵌入网页的方法:
1)超文本标记语言HTML (对大小写不敏感)
2)将applet添加到HTML中
类似于元素属性element attribute;
1
2
3
4
5
6
|
<body>
<hr>
<applet code =
"MyFirstApplet.class"
width =
350
height =
200
>
</applet>
<hr/>
</body>
|
Java对大小写敏感;
1
2
3
4
5
6
7
8
|
import
javax.swing.JApplet;
import
java.awt.Graphics;
public
class
MyFirstApplet
extends
JApplet {
public
void
paint(Graphics g) {
g.drawString(
"To climb a ladder, start at the bottom rung."
,
20
,
90
);
}
}
|
1.5 Java中的面向对象编程
1.5.1 对象
对象是一个抽象的概念; 类class是描述有共同属性的一组对象集合的规范;
子类是继承了超类所以属性的类, 具有额外的规范;
类的实例是描述该类一个已存对象的技术术语;
1.5.2 定义对象类
数据抽象data abstraction;
1.5.3 对象操作
Method代码块; 可以传递数据项; 返回数据项; private方法; 构造函数;
Note Java的文件名和类名一样;
1.5.4 程序语句
可以跨行, 语句由分号结束; 一般换行可以包括空格和制表符.
1.5.5 封装
将数据和方法都隐藏在一个对象的内部, 通过类定义中设置private来实现;
优点-隐藏类的具体实现;
1.5.6 类与数据类型
基本类型-基本数据类型不属于类;
1.5.7 类与子类
子类-特殊的对象子集; 子类的父类-超类;
1.5.8 对象的优势
容易维护和扩展;
1.5.9 标记
注解annotation, 不是Java语句, 是特殊的语句, 改变编译器或库对程序语句的处理方式.
可以自定义自己的注解, e.g. 添加注解禁止警告.
1
|
@SuppressWarnings
(
"serial"
)
|
告诉编译器不要发布serial警告消息, 注意在特定环境中只禁止确实不相关的警告;
1.5.10 泛型类
通常用来为存储事务集合的对象定义类. 泛型类是创建本质上类似的类的诀窍.
1.6 Java程序结构
-Java程序总是由一个或多个类组成; -类的代码放入文件中, 文件的名称必须和类名相同; -Java源文件名扩展名".java".
Note 文件中可以有多个类, 文件名与外层类名相同;
1.6.1 Java的类库
Java中的库是类的集合, 提供可使用的工具;
类库是一系列类, 相关的类归类成一个package集合.
包名根据包自身包括的类所在目录的路径进行定义; e.g. java.lang --> java\lang;
import语句标识包中所需的类名; 程序中导入类的完整包(包名和基本类名)时, 可以使用非限定名称;
通配符导入: 导入包中的所有类名; (会稍微影响编译效率)
1
|
import
javax.swing.*;
|
import *会增加名称冲突的风险; 为冲突的一方或多方都使用完全限定名称可以使编译器找到引用的类;
标准类被包含在压缩文件rt.jar中, 存储在jre/lib目录下; .jar是Java归档文件, rt表示运行时run time;
1.6.2 Java应用程序
每个Java应用程序都包含一个定义了main()方法的类, 类名在执行时作为Java解释器的参数;
运行Java程序时, 首先执行main(), 然后开始由mian()执行其他类的方法;
1
2
3
4
5
|
public
class
Hello{
public
static
void
main(String[] args){
System.out.println(
"Hello Java"
);
}
}
|
>System是标准类名, 封装系统中标准I/O设备的对象; 默认包java.lang包含了System. out是静态成员对象, 代表标准输出流;
编译出错的情况:
-在环境变量PATH中没有设定jdk的bin的路径; -大小写敏感; -文件名与类名匹配;
1
|
java –ea –classpath . Hello
|
>enable assertion, set class path;
1.7 Java和Unicode
Unicode是一个标准字符集, 支持对几乎所有的语言进行编码; Unicode使用16bit的编码表示一个字符(2个字节), 16bit可区别65535个非零字符编码;
Java源码是Unicode字符, 注释, 标识符和字符串都能使用Unicode集合中表示字母的字符;
ASCII集合对应Unicode集合的前128个字母. 每个字符通常占据两个字节. Java支持Unicode 4.0, 允许使用32bit编码的超大字符集;
1.8 小结 可移植性, 面向对象;
1.9 资源 www.wrox.com
---1 End---