java 7 入门经典_Java 7程序设计入门经典 PDF 下载

本书详细介绍了Java 7编程的基础知识,包括数据类型、运算符、控制语句、类与对象、继承、接口、异常处理等核心概念。通过实例讲解了Swing GUI编程、输入/输出、多线程、泛型等高级特性,还涵盖了Java API库的使用,如字符串处理、日期时间、集合框架等。适合初学者系统学习Java 7。
摘要由CSDN通过智能技术生成

译者序

前言

开门见山的讲授方法

以恰到好处的时机介绍对象

教学功能

ACM建议

在线资源

致谢

第一部分 Java语言

第1章 Java编程基础

1.1 计算基础

1.1.1 计算机的硬件组成

1.1.2 位、字节和二进制

1.1.3 操作系统

1.2 程序

1.3 编程语言

1.4 Java语言

1.4.1 Java的起源

1.4.2 Java对互联网的贡献

1.4.3 Java applet

1.4.4 安全性

1.4.5 可移植性

1.4.6 Java的解决方案:字节码

1.4.7 Java的演进

1.5 面向对象编程的关键特性

1.5.1 封装

1.5.2 多态

1.5.3 继承

1.6 Java开发工具包

1.7 第一个简单的程序

1.7.1 输入程序

1.7.2 编译程序

1.7.3 运行程序

1.7.4 逐行解析第一个简单的程序

1.8 处理语法错误

1.9 第二个简单的程序

1.10 另一种数据类型

1.11 两种控制语句

1.11.1 if语句

1.11.2 for循环

1.12 创建代码块

1.13 分号和语句的位置

1.14 关于缩进

1.15 Java关键字

1.16 Java中的标识符

1.17 Java类库

1.18 习题

第2章 数据类型和运算符

2.1 为什么数据类型很重要

2.2 Java的基本数据类型

2.2.1 整数

2.2.2 浮点类型

2.2.3 字符

2.2.4 布尔类型

2.3 字面量

2.3.1 十六进制、八进制和二进制字面量

2.3.2 转义字符序列

2.3.3 字符串字面量

2.4 深入解析变量

2.4.1 初始化变量

2.4.2 动态初始化

2.5 变量的作用域和生命周期

2.6 运算符

2.7 算术运算符

2.8 关系运算符和逻辑运算符

2.9 具有“短路”功能的逻辑运算符

2.10 赋值运算符

2.11 速记赋值运算符

2.12 赋值中的类型转换

2.13 使用强制类型转换

2.14 运算符的优先级

2.15 表达式

2.15.1 表达式中的类型转换

2.15.2 空白和圆括号

2.16 习题

第3章 程序控制语句

3.1 从键盘输入字符

3.2 if语句

3.3 嵌套的if语句

3.4 if-else-if梯队

3.5 switch语句

3.6 嵌套的switch语句

3.7 for循环

3.8 for循环中的一些特殊情况

3.8.1 缺少部分

3.8.2 无限循环

3.8.3 没有循环体的循环

3.9 在for语句内部声明循环控制变量

3.10 增强的for循环

3.11 while循环

3.12 do-while循环

3.13 使用break语句退出循环

3.14 像使用goto语句一样使用break语句

3.15 使用continue语句

3.16 嵌套的循环

3.17 习题

第4章 类、对象和方法初探

4.1 类的基础知识

4.1.1 类的一般形式

4.1.2 定义类

4.2 如何创建对象

4.3 变量引用和赋值语句

4.4 方法

4.5 从方法返回

4.6 返回值

4.7 使用形参

4.8 构造函数

4.9 含有形参的构造函数

4.10 new运算符再探

4.11 垃圾回收和终结器

4.12 使用this关键字

4.13 习题

第5章 更多数据类型和运算符

5.1 数组

5.2 多维数组

5.2.1 二维数组

5.2.2 不规则数组

5.2.3 三维或多维数组

5.2.4 初始化多维数组

5.3 其他声明数组的语法

5.4 对数组的引用赋值

5.5 使用成员length

5.6 for-each风格的for循环

5.6.1 遍历多维数组

5.6.2 应用增强for循环

5.7 字符串

5.7.1 构造字符串

5.7.2 操作字符串

5.7.3 字符串数组

5.7.4 字符串是不可改变的

5.7.5 使用字符串控制switch语句

5.8 使用命令行参数

5.9 按位运算

5.9.1 按位与、按位或、按位异或、按位非运算符

5.9.2 移位运算符

5.9.3 位速记赋值运算符

5.10 问号运算符

5.11 习题

第6章 深入解析类和方法

6.1 控制对类成员的访问

6.2 向方法传递对象

6.3 如何传递实参

6.4 返回对象

6.5 重载方法

6.6 重载构造函数

6.7 递归

6.8 理解关键字static

6.8.1 静态变量

6.8.2 静态方法

6.8.3 静态代码块

6.9 嵌套类和内部类

6.10 长度可变的实参vararg

6.10.1 vararg基础

6.10.2 重载varargs方法

6.10.3 vararg和二义性

6.11 习题

第7章 继承

7.1 继承基础

7.2 成员访问和继承

7.3 构造函数和继承

7.4 用super关键字调用超类的构造函数

7.5 用super关键字访问超类成员

7.6 创建多层层次结构

7.7 执行构造函数的时机

7.8 超类引用与子类对象

7.9 方法重写

7.10 用重写方法支持多态

7.11 为什么要重写方法

7.12 使用抽象类

7.13 使用final关键字

7.13.1 用final关键字防止方法重写

7.13.2 用final关键字防止继承

7.13.3 对数据成员使用final关键字

7.14 Object类

7.15 习题

第8章 接口

8.1 接口的基础知识

8.2 创建接口

8.3 实现接口

8.4 使用接口引用

8.5 实现多个接口

8.6 接口中的常量

8.7 可扩展的接口

8.8 嵌套的接口

8.9 关于接口的最后思考

8.10 习题

第9章 包

9.1 包的基础知识

9.1.1 定义包

9.1.2 寻找包与环境变量CLASSPATH

9.1.3 一个短小的包例子

9.2 包与成员访问

9.2.1 一个包访问的例子

9.2.2 受保护的成员

9.3 导入包

9.4 静态导入

9.5 习题

第10章 异常处理

10.1 异常层次结构

10.2 异常处理基础

10.2.1 使用关键字try和catch

10.2.2 一个简单的异常处理例子

10.3 未捕获异常的后果

10.4 异常可以优雅地处理错误

10.5 使用多个catch子句

10.6 捕获子类异常

10.7 嵌套的try块

10.8 抛出异常

10.9 进一步解读Throwable类

10.10 使用finally块

10.11 使用throws关键字

10.12 Java的内置异常

10.13 JDK 7中新添加的异常特性

10.14 创建异常子类

10.15 习题

第11章 使用输入/输出

11.1 Java的输入/输出是建立在流上的

11.2 字节流和字符流

11.3 字节流类

11.4 字符流类

11.5 预定义的流

11.6 使用字节流

11.6.1 读控制台输入

11.6.2 写控制台输出

11.7 使用字节流读写文件

11.7.1 从文件中输入

11.7.2 写文件

11.8 自动关闭文件

11.9 读写二进制数据

11.10 随机访问文件

11.11 使用Java字符流

11.11.1 用控制台获得字符流输入

11.11.2 使用字符流进行控制台输出

11.12 使用字符流进行文件输入/输出

11.12.1 使用FileWriter类

11.12.2 使用FileReader类

11.12.3 File类

11.12.4 获得文件属性

11.12.5 获得目录列表

11.12.6 使用FilenameFilter接口

11.12.7 listFiles()方法

11.12.8 多种文件实用方法

11.13 使用Java的类型包装器来转换数值字符串

11.14 习题

第12章 多线程编程

12.1 多线程基础

12.2 Thread类和Runnable接口

12.3 创建线程

12.4 创建多个线程

12.5 判定线程终止的时间

12.6 线程的优先级

12.7 同步

12.8 使用同步方法

12.9 synchronized语句

12.10 使用方法notify()、wait()和notifyAll()进行线程通信

12.11 线程挂起、恢复和终止

12.12 习题

第13章 枚举、自动装箱和注解

13.1 枚举

13.2 Java的枚举是类类型

13.3 values()方法和valueOf()方法

13.4 构造函数、方法、实例变量和枚举

13.5 从Enum类继承枚举

13.6 自动装箱

13.6.1 类型包装器和装箱

13.6.2 自动装箱基础

13.6.3 装箱与方法

13.6.4 表达式中的自动装箱和自动拆箱

13.6.5 警告

13.7 注解(元数据)

13.7.1 创建和使用注解

13.7.2 内置注解

13.8 习题

第14章 泛型

14.1 泛型基础

14.1.1 一个简单的泛型例子

14.1.2 泛型只能用于对象

14.1.3 基于不同类型实参的不同泛型类型

14.1.4 有两个类型形参的泛型类

14.1.5 泛型类的一般形式

14.2 有界的类型

14.3 使用有通配符的实参

14.4 有界的通配符

14.5 泛型方法

14.6 泛型构造函数

14.7 泛型的类层次结构

14.8 泛型接口

14.9 原始类型和遗留代码

14.10 带有菱形运算符的类型推断

14.11 清除

14.12 二义性错误

14.13 泛型的一些限制

14.13.1 不能实例化类型形参

14.13.2 对静态成员的限制

14.13.3 泛型数组的限制

14.13.4 泛型异常的限制

14.14 习题

第15章 applet与剩余的Java关键字

15.1 applet基础

15.2 applet的完整骨架

15.3 applet的初始化和终止

15.4 applet架构的关键点

15.5 请求重绘

15.6 使用状态窗口

15.7 向applet传递形参

15.8 剩余的Java关键字

15.8.1 修饰符volatile

15.8.2 修饰符transient

15.8.3 关键字instanceof

15.8.4 关键字strictfp

15.8.5 关键字assert

15.8.6 原生方法

15.9 习题

第16章 面向对象设计介绍

16.1 优雅的软件及其重要性

16.2 优雅的方法

16.2.1 命名约定

16.2.2 方法的内聚

16.2.3 形式良好的对象

16.2.4 内部文档

16.2.5 外部文档

16.3 优雅的类

16.3.1 类的内聚和专家模式

16.3.2 避免重复

16.3.3 完整的接口

16.3.4 设计时要考虑变化

16.3.5 最少知识原则

16.4 继承与委托的比较

16.4.1 UML类图

16.4.2 从代码重用的角度看

16.4.3 is-a关系

16.4.4 类似的行为

16.4.5 多态

16.4.6 继承的代价

16.5 设计模式

16.5.1 适配者模式

16.5.2 观察者模式

16.6 习题

第二部分 利用Swing工具箱进行GUI编程

第17章 Swing基础

17.1 Swing的起源和设计理念

17.2 组件和容器

17.2.1 组件

17.2.2 容器

17.2.3 顶级容器窗格

17.3 布局管理器

17.4 第一个简单的Swing程序

17.5 事件处理

17.5.1 事件

17.5.2 事件源

17.5.3 事件侦听器

17.5.4 事件类和侦听器接口

17.5.5 适配器类

17.6 使用按钮

17.7 JTextField类介绍

17.8 使用匿名内部类来处理事件

17.9 习题

第18章 探索Swing控件

18.1 JLabel类和ImageIcon类

18.2 Swing按钮

18.2.1 处理动作事件

18.2.2 处理项事件

18.2.3 JButton类

18.2.4 JToggleButton类

18.2.5 复选框

18.2.6 单选按钮

18.3 JTextField类

18.4 JScrollPane类

18.5 JList类

18.6 JComboBox类

18.7 树

18.8 JTable类

18.9 模型简介

18.10 习题

第19章 使用菜单

19.1 菜单基础

19.2 JMenuBar类、JMenu类和JMenuItem类概览

19.2.1 JMenuBar类

19.2.2 JMenu类

19.2.3 JMenuItem类

19.3 创建主菜单

19.4 为菜单项添加助记键和快捷键

19.5 为菜单项添加图像和工具提示

19.6 使用JRadioButtonMenuItem类和JCheckBoxMenuItem类

19.7 习题

第20章 对话框

20.1 JOptionPane类

20.2 showMessageDialog()方法

20.3 showConfirmDialog()方法

20.4 showInputDialog()方法

20.5 showOptionDialog()方法

20.6 JDialog类

20.7 创建无模式的对话框

20.8 用JFileChooser类选择文件

20.9 习题

第21章 线程、applet和绘图

21.1 Swing中的多线程

21.2 使用Timer类

21.3 创建Swing的applet

21.4 绘图

21.4.1 绘图基础

21.4.2 图形上下文

21.4.3 计算可绘图区域

21.4.4 请求绘图

21.4.5 绘图的例子

21.5 习题

第三部分 畅游Java API库

第22章 处理字符串

22.1 字符串的基础知识

22.2 字符串的构造函数

22.3 三个与字符串有关的语言特性

22.3.1 字符串字面量

22.3.2 字符串拼接

22.3.3 字符串与其他数据类型拼接

22.3.4 重写toString()方法

22.4 length()方法

22.5 获得字符串中的字符

22.5.1 charAt()方法

22.5.2 getChars()方法

22.5.3 toCharArray()方法

22.6 字符串比较

22.6.1 equals()方法和equalsIgnoreCase()方法

22.6.2 equals()方法与“==”运算符的比较

22.6.3 regionMatches()方法

22.6.4 startsWith()方法和endsWith()方法

22.6.5 compareTo()方法和compareToIgnoreCase()方法

22.7 使用indexOf()方法和lastIndexOf()方法

22.8 获得修改的字符串

22.8.1 substring()方法

22.8.2 replace()方法

22.8.3 trim()方法

22.9 改变字符串中字符的大小写

22.10 StringBuffer类和StringBuilder类

22.11 习题

第23章 探索java.lang包

23.1 基本类型包装器

23.1.1 Number类

23.1.2 Double类和Float类

23.1.3 Byte类、Short类、Integer类和Long类

23.1.4 Character类

23.1.5 Boolean类

23.1.6 自动装箱和类型包装器

23.2 Math类

23.3 Process类

23.4 ProcessBuilder类

23.5 Runtime类

23.6 System类

23.6.1 使用currentTimeMillis()方法测量程序执行的时间

23.6.2 使用arraycopy()方法

23.6.3 获得属性值

23.6.4 重定向标准输入流和标准输出流

23.7 Object类

23.8 Class类

23.9 Enum类

23.10 与线程有关的类和Runnable接口

23.11 其他类

23.12 java.lang包中的接口

23.12.1 Comparable接口

23.12.2 Appendable接口

23.12.3 Iterable接口

23.12.4 Readable接口

23.12.5 CharSequence接口

23.12.6 AutoCloseable接口

23.13 习题

第24章 探索java.util包

24.1 Locale类

24.2 使用日期和时间

24.2.1 Date类

24.2.2 Calendar类和GregorianCalendar类

24.3 用Formatter类格式化输出

24.3.1 Formatter类的构造函数

24.3.2 格式化基础

24.3.3 格式化字符串和字符

24.3.4 格式化数字

24.3.5 格式化日期和时间

24.3.6 说明符%n和说明符%%

24.3.7 指定最小的域宽度

24.3.8 指定精度

24.3.9 使用格式标志

24.3.10 大写字母选项

24.3.11 使用实参索引

24.3.12 为不同的地区设置格式化

24.3.13 关闭Formatter对象

24.4 格式化和printf()方法

24.5 Scanner类

24.5.1 Scanner类的构造函数

24.5.2 Scanner类的基础知识

24.5.3 Scanner类的例子

24.5.4 Scanner类的其他特性

24.6 Random类

24.7 使用Observable类和Observer接口

24.8 Timer类和TimerTask类

24.9 其他混杂的应用类和接口

24.10 习题

第25章 使用集合框架中的数据结构

25.1 数据结构概览

25.1.1 栈和队列

25.1.2 链表

25.1.3 树

25.1.4 散列表

25.1.5 选择数据结构

25.2 集合概览

25.3 集合接口

25.3.1 Collection接口

25.3.2 List接口

25.3.3 Set接口

25.3.4 SortedSet接口

25.3.5 NavigableSet接口

25.3.6 Queue接口

25.3.7 Deque接口

25.4 集合类

25.4.1 ArrayList类

25.4.2 LinkedList类

25.4.3 HashSet类

25.4.4 TreeSet类

25.4.5 LinkedHashSet类

25.4.6 ArrayDeque类

25.4.7 PriorityQueue类

25.5 通过迭代器访问集合

25.5.1 使用迭代器

25.5.2 用for-each风格的循环代替迭代器

25.6 使用映射

25.6.1 映射接口

25.6.2 映射类

25.7 比较器

25.8 集合算法

25.9 Arrays类

25.10 遗留类和遗留接口

25.10.1 Enumeration接口

25.10.2 Vector类

25.10.3 Stack类

25.10.4 Dictionary类

25.10.5 Hashtable类

25.10.6 Properties类

25.11 习题

第26章 使用java.net包进行网络编程

26.1 网络基础

26.2 网络类和网络接口

26.3 InetAddress类

26.4 Socket类

26.5 URL类

26.6 URLConnection类

26.7 HttpURLConnection类

26.8 数据报

26.8.1 DatagramSocket类

26.8.2 DatagramPacket类

26.8.3 数据报的例子

26.9 习题

第27章 并发实用工具

27.1 并发API包

27.1.1 java.util.concurrent包

27.1.2 java.util.concurrent.atomic包

27.1.3 java.util.concurrent.locks包

27.2 使用同步对象

27.2.1 Semaphore类

27.2.2 CountDownLatch类

27.2.3 CyclicBarrier类

27.2.4 Exchanger类

27.2.5 Phaser类

27.3 使用执行器

27.4 使用Callable接口和Future接口

27.5 TimeUnit枚举

27.6 并发集合

27.7 锁

27.8 原子操作

27.9 通过Fork/Join框架并行编程

27.10 主要的Fork/Join类

27.10.1 ForkJoinTask<V>类

27.10.2 RecursiveAction类

27.10.3 RecursiveTask<V>类

27.10.4 ForkJoinPool类

27.11 分治策略

27.11.1 第一个简单的Fork/Join示例

27.11.2 理解并行度的影响

27.11.3 使用RecursiveTask<V>类的一个例子

27.11.4 异步执行任务

27.12 并发实用工具与Java的传统方法的比较

27.13 习题

附录A 使用Java文档注释

A.1 Javadoc标签

A.1.1 @author

A.1.2 {@code}

A.1.3 @deprecated

A.1.4 {@docRoot}

A.1.5 @exception

A.1.6 {@inheritDoc}

A.1.7 {@link}

A.1.8 {@linkplain}

A.1.9 {@literal}

A.1.10 @param

A.1.11 @return

A.1.12 @see

A.1.13 @serial

A.1.14 @serialData

A.1.15 @serialField

A.1.16 @since

A.1.17 @throws

A.1.18 {@value}

A.1.19 @version

A.2 文档注释的一般形式

A.3 javadoc程序输出了什么

A.4 使用文档注释的例子

附录B 正则表达式介绍

B.1 Pattern类

B.2 Matcher类

B.3 正则表达式语法基础

B.4 演示字符串匹配

B.5 使用通配字符和限定符

B.6 使用字符类

B.7 使用replaceAll()方法

B.8 与String类连接

B.9 更多内容

附录C 部分习题的参考答

Java经典入门教程pdf完整版Java私塾跟我学系列JAⅥ篇网址:htp:/www.lavass.Cn电话:010-86835215 3;Java是一种软件运行平台 3.1:什么是软件的运行平台 如同我们需要阳光、空气、水和食物才能正常存活一样,软件最终要能够运行,也需要 系列旳外部环境,来为软件的运行提供支持,而提供这些支持的就是运行平台。 3.2:Java是一种运行平台 Java本身提供Java软件所需要的运行环境,Java应用可运行在安装了JRE(Java Runtime environment)的机器上,所以我们说Java是一个运行平台。 JRE: Java Runtime Environment,Java运行环境。 4:Java是一种软件部署环境 4.1:什么是软件的部署 简单地讲,部署就是安装,就是把软件放置到相应的地方,并且进行相应的配置(一般 称作部署描述),让软件能够正常运行起来。 4.2:Java是一种软件部署环境 ava本身是一个开发的平台,开发后的Java程序也是运行在Java平台上的。也就是说, 开发后的Java程序也是部署在Java平台上的,这个尤其在后面学习JEE(Java的企业版) 的时候,体现更为明显 :Java能干什么 JaⅦa能做的事情很多,涉及到编程领域的各个方面。 1:桌面级应用:尤其是需要跨平台的桌面级应用程序。 先解释一下桌面级应用:简单的说就是主要功能都在我们本机上运行的程序,比如 word、 excel等运行在木机上的应用就属」桌面应用。 2:企业级应用 先解释一下企业级应用:简单的说是大规模的应用,一般使用人数较多,数据量较大, 对系统的稳定性、安全性、可扩展性和可装配性等都有比较高的要求 这是目前Java应用最广泛的一个领域,几乎一枝独秀。包括各种行业应用,企业信息、 化,也包括电子政务等,领域涉及:办公自动化OA,客户关系管理CRM,人力资源HR, 企业资源计划ERP、知识管理KM、供应链管理SCM、企业设备管理系统EAM、产品生命 周期管理PLM、面向服务体系架构SOA、商业智能BⅠ、项日管理PM、营销管理、流程管 理 Work Flow、财务管理…..等几乎所有你能想到的应用 3:嵌入式设备及消费类电子产品 包括无线手持设备、智能卡、通信终端、医疗设备、信息家电(如数字电视、机顶盒 电冰箱)、汽车电子没备等都是近年以来热门的Java应用领域,尤其是手机上的Java应用 程序和Java游戏,更是普及。 4:除了上面提到的,Java还有很多功能:如进行数学运算、显示图形界面、进行网络操作、 进行数据库操作、进行文件的操作等等。 PDF文件使用" pdfFactory Pro"试用版本创建ww, fineprint,cn Java私塾跟我学系列JAⅥ篇网址:htp:/www.lavass.Cn电话:010-86835215 三:Java有什么 Java体系比较庞杂,功能繁多,这也导致很多人在自学Java的时候总是感觉无法建立 全面的知识体系,无法从整体上把握Java的原因。在这里我们先简单了解一下Java的版本 具体的Java体系知识结构,将在后面详细讲述。 Java分成三种版本,分别是Java标准版(JSE)、Java微缩版JME)和Java企业版(JE), 每一和版本都有自己的功能和应用方向。 1:Java标准版:JSE( Java standard Edition) JSE( Java Standard edition)是sun公司针对桌面开发以及低端商务计算解决方案而开 发的版本,例如:我们平常熟悉的 Application桌面应用程序。这个版本是个基础,它也是 我们半常开发和使用最多的技术,Java的主要的技术将在这个版本中体现。本书主要讲的 就是JSF。 2:Java微缩版:JME( Java Micro edition) JE(Java, Micro edition)是对标准版JSE进行功能缩减后的版本,于199年6月 由 Sun Microsystems第一次推向Java团体。它是一项能更好满足Java开发人员不同需求 的广泛倡议的一部分。 Sun Microsystems将JM定义为“一种以广泛的消费性产品为目标 的高度优化的Java运行时环境,包括寻呼机、移动电话、可视电话、数字机顶盒和汽车导 航系统。” JE是致丿于消费产品和嵌入式设备的开发人员的最佳选择。尽管早期人们对它看好而 且Java开发人员团体中的热衷人土也不少,然而,J最近才开始从其影响更大的同属 品JEE和JSE的阴影中走出其不成熟期。 JME在开发面向內存有限的移动终端(例如寻呼机、移动电话)的应用时,显得尤其实用。 因为它是建立在操作系统之上的,使得应用的丌发无须考虑太多特殊的硬件配置类型或操作 系统。因此,开发商也无须为不同的终端建立特殊的应用,制造商也只需要简单地使它们的 操作平台可以攴持JM便可, 3:Java企业版:JEE( Java enterprise edition) JE( ava Enterprise edition)是·种利用Java平台来简化企业解决方案的开发、部 著和管理相关的复杂问题的体系结构。JE技术的基础就是核心Java平台或Java平台的标 准版,JEE不仅巩固了标淮版屮的诈多优点,例如“编写一次、随处运行”的特性、方便存 取数据库的 JDBC API、 CORBA技术以及能够在 Internet应用中保护数据的安全模式等等, 同时还提供了对BJB( Enterprise java beans)、 Java Servlets aPi、JSP( Java Server pages) 以及ⅫML技术的全面攴持。其最终目的就是成为一个能够使企业开发者大幅缩短投放市场时 间的体系结构。 JEE体系结构提供屮间层集成框架来满足无需太多费用而又需要高可用性、高可靠性以 及可扩展性的应用的需求。通过提供统的开发平台,J降低了开发多层应用的费用和复 杂性,同时提供对现有应用稈序集成强有力支持,完全支持 Entcrprise java beans,有良 好的向导攴持打包和部署应用,添加了目录攴持,增强了安全机制,提高了性能 JE是对标准版进行功能扩展,提供一系列功能,用来解决进行企业应用开发中所面临 的复杂的问题。具体的我们会放到后面JFE的课程去讲。 4:三个版本之间的关系 JE几乎完全包含JSE的功能,然后在JSE的基础上添加了很多新的功能。 JME主要是JSE的功能子集,然后冉加上一部分额外添加的功能 PDF文件使用" pdfFactory Pro"试用版本创建ww, fineprint,cn Java私塾跟我学系列JAⅥ篇网址:htp:/www.lavass.Cn电话:010-86835215 如下图所示 JEE JSC JME Java的API类库之中有一组所谓的核心类( Corellas,即java.*),在核心类之外还有 所谓的扩允类( xtended Class,即 Javax.*)。根据对这两种类的支持程度,进而区分出几 种不同的Java版本。 我们必须以 Java Standard Edition(JSE)作为基准,这个版本做了所有Java标准规格 之中所定义的核心类,也文持所有的Java基木类。JSE定位在客户端程序的应用上 从JSE往外延伸,其外面为 Java Entcrprise edition(JEE),此版本除了支持所有的 标准核心类外,而且还增加了许多文持全业内部使用的扩充类,攴持 Servlet/JSP的 Javax. servlet.*类、支持 Enterprise Java Bean的 javax.ejb.*类。当然,JE必定支 持所有的Java基本类。JE定位在服务器端( server-side)程序的应用上。 从J5E向内看,是 Java micro edition(JME),它所支持的只有核心类的了集合,在JME CLDC的规格之中,只支持java.lang.*、java.io.*、以及java.uti1.*这些类。此版本 也增加了一些攴持“微小装置”的扩充类,如 Javax. microedition.io.*类。然而,此版 木并不支持所有的Java基木类,就标准的 JMECLDO,也就是能在 Palmos上执行的 KwM( KVirtualmachine)来说,它就不支持属于浮点数( float、 double)的Java基本类。JME 定位在嵌入式系统的应用上 最里层,还有一个Java的 Smart card版本,原本在Java的文件之中并没有这样定义 但是将亡画在JⅦ内部是很合理的。因为 SmartCard版本具攴持java.lang*这个核心类, 比起JM所支持的核心类更少,但它也有属」自凵的扩充类,如 Javacard.*、 javacard. 这些类 Smartcard版本只支持 Boolean与Bytc这两种Java基本类,此版本定位在 SmartCard 的应用上 四:闲话 ava 1:Java历史 在上世纪90年代初,sun公司有一个叫做 Green的项目,目的是为家用消费电子广品 开发一个分布式代码系统,这样就可以对家用电器进行控制,和它们进行信息交流。詹姆 斯·高斯林( James Gosling)等人基于C+开发一种新的语言0 ak ( java的前身)。0ak是 种用于网络的精巧而安全的语言。Sun公司曾依此投标个交互式电视项目,但结果是被SGl 打败,Sun打算抛弃0ak。随着可联网的发展,Sun看到了0ak在计算机网络上的广阔应用 前景,于是改造0ak,在1995年5月以“Java”的名称正式发布,从此Java走上繁荣之路 当然提到Jaa历史,不得不提的一个故事就是Java的命名。开始“Oak”的命名是以 项目小组办公室外的树而得名,但是Oak商标被其他公司注册了,必须另外取一个名字 传说有天,几位Java成员组的会员正在讨论给这个新的语言取什么名字,当时他们止在 咖啡馆喝着Java(爪哇)咖啡,有一个人灵机一动说就叫Java怎杵,得到了其他人的赞同, 于是,Java这个名字就这样传开了。当然对于传说,了解一下就好了,不必过于认真 2:Java大事记 PDF文件使用" pdfFactory Pro"试用版本创建ww, fineprint,cn Java私塾跟我学系列JAⅥ篇网址:htp:/www.lavass.Cn电话:010-86835215 作为学习Java的人士,对Java历史上发生的大事件有一个了解是应该的。 JDK〔 Java Software Develop kit):Java软件开发工具包。JIK是Java的核心,包 括了Java运行坏境,一系刎Java开发工具和Java基础的类库。目前主流的JDK是Sun公 同发布的JDK,除了Sun之外,还有很多公司和组织都开发了自己的JD,例如IBM公司开 发的JD,BA公司的 Jrocket,还有GN组织丌发的JDK等等。 时间 事件 1995年5月23日 Java语言诞生 1996年1月 第个 JDK-JDK1.0诞生 1997年2月18日 JDK1.1发布 1998年12月8日 Java2企业平台J2EE发布 1999年6月 Sun发布JaⅤa三个版本:标准版J2SF,企业 版J2EE,微型版JME 2004年9月30日 Javase50发布 2006年12月 Java se60发布 3:Java特点 简单地说,Java具有如下特点:简单的、面向对象、平台无关、多线程、分布式、安全、 晑性能、可靠的、解释型、自动垃圾回收等特点。 这里只解释一下平台无关和分布式,其余的在后面会逐步接触到 3:平台无关 所谓平台无关指的是:用Java写的程序不用修改就可在不同的软硬件平台上运行。这 烊就能实现同样的程序既可以在 Windows下运行,到了Unix或者 Linux环境不用修改就直 接可以运行了。Java主要靠Java虚拟机(JⅧM)实现平台无关性 平台无关性就是一次编写,到处运行: Write Once, Run Anywhere 32:分布式 分布式指的是:软件由很多个可以独立执行的模块组成,这些模块被分布在多台计算机 上,可以同时运行,对外看起来还是个整体。也就是说,分布式能够把多台计算机集合起 来就像一台计算机一样,从而提供更好的性能 4:Java标准组织—Cp JCP( Java Community process)是一个开放的国际组织,成立于1995年,主要职能 是发展和更新Java技术规范、参考实现(RⅠ)、技术兼容包(TCK)。Java技术和JCP两者 的原创者都是SN计算机公司。组织成员可以提交JSR( Java Specification Requests), 通过讨论、认可、审核以后,将进入到下一版本的规范里面。 也就是说JCP是目前Java技术发展事实上的控制者和领导者。 五:Java如何做到让机器理解我们想要做的东西 用·个图来描述这个过程会比较谷易理解: PDF文件使用" pdfFactory Pro"试用版本创建ww, fineprint,cn Java私塾跟我学系列JAⅥ篇网址:htp:/www.lavass.Cn电话:010-86835215 Runtime Compile Class loader Byte code Verifier Javac Hello.java Netwo Hello class Interpreter code Runtime generator/ Hardware 1:编写代码 首先把我们想要计算机做的事情,通过Java表达出来,写成Java文件,这个过程就是 编写代码的过程。如上图所示的 Hello java文件。 2:编译 写完Jaa代码后,机器并不认识我们写的Java代码,需要进行编译成为字节码,编译 后的文件叫做clas文件。如上图所示的 Hello, class文件。 3:类装载 Classloader 类裝载的功能是为执行程序寻找和装载所需要的类 Classloader能够加强代似的安全性,主要方式是:把本机上的类和內络资源类相分离, 在调入类的时候进行检查,因而可以限制任何“特洛伊木马”的应用。 4:字节码(byte-code)校验 功能是对 class文件的代码进行校验,保证代码的安全。 Java软件代码在实际运行之前要经过几次测试。JWM将代码输入一个字节码校验器以 测试代码段格式并进行规则检査一一检査伪造指针、违反对象访问权限或试图改变对象类型 的非法代码。 注意-—所有源于网络的类文件都要经过字节码校验器 字节码校验器对程序代码进冇四遍校验,这可以保证代码符合JⅧM规范并∏不破坏系统 的完整性。如果校验器在完成四遍校验后未返回出错信息,则下列各点可被保证 类符合JWⅦM规范的类文件格式 无访问限制异常 代码木引起操作数栈上溢或下溢 所有操作代码的参数类型将总是正确的 无非法数据转换发生,如将整数转换为对象引用 对象域访问是合法的 5:解释( Interpreter) 可是机器也不能认识clas文件,还需要被解释器进行解释,机器才能最终理解我们所 要表达的东西 PDF文件使用" pdfFactory Pro"试用版本创建ww, fineprint,cn Java私塾跟我学系列JAⅥ篇网址:htp:/www.lavass.Cn电话:010-86835215 6:运行 最后由运行环境屮的 Runtime对代码进行运行,真正实现我们想要机器完成的工作 7:说明 由上面的讲述,大家看到,Java通过个编译阶段和个运行阶段,来让机器最终坦解 我们想要它完成的工作,并按照我们的要求进行运行 在这两个阶段屮,需要我们去完成的就是编译阶段的工作,也就是说:我们需要把我们 想要札器完成的工作用Jaa语言表达出来,写成Java源文件,然后把源文件进行编译,形 成 class文件,最后就可以在JaⅦa运行环境中运行了。运行阶段的工作由Java平台自身提供 我们不需要做什么上作。 六:Java技术三大特性 1:虚拟机 Java虚拟机JM( Java Virtual Machine)在Java编程里面具有非常重要的地位,约 相当于前面学到的Java运行环境,虚拟机的基本功能如下: (1):通过 Classloader寻找和装载 class文件 (2):解释字节码成为指令并执行,提供 class文件的运行环境 (3):进行运行期间垃圾回收 4):提供与硬件交互的平台 Java虚拟杋是在真实札器中用软件模拟实现的—种想象机器。Jaa虚拟札代码被存储 在.clas文件中;每个文件都包含最多一个 public类。Java虚拟机规范为不同的硬件平台 提供了·种编译Java技术代码的规氾,该规范使Java软件独立于平台,因为编译是针对作 为虚拟机的“一般机器”而做。这个“一般机器”可用软件模拟并运行于各种现存的计算机 系统,也可用硬件米实现ε编译器在获取Java应用程序的源代码后,将其生成字节码,它是 为J硎M生成的一种机器码指令。每个Java解释器,不管它是Java技术廾发工具,还是可运行 applets的Wcb浏览器,都可执行JVM。 JWM为下列各项做出了定义 指令集(相当于中央处理器[CP]) 寄存器 类文件格式 栈 垃圾收集堆 存储区 JⅧM的代码格式由紧缩冇效的字节码构成。由J硎M字节码编写的程序必须保持适当的类 型约東。大部分类型检査是在编译时完成。任何从属的Java技术解释器必须能够运行仼何 含有类文件的程序,这些类文件应符合Java虚拟机规范中所指定的类文件格式 1.1:虚拟机是Java平合无关的保障 正是因为有虚拟机这个中间层,Java才能够实现与平台无关。虚拟机就好比是一个Java 运行的基本平台,所有的Java程序都运行在虚拟机上,如下图所示: PDF文件使用" pdfFactory Pro"试用版本创建ww, fineprint,cn Java私塾跟我学系列JAⅥ篇网址:htp:/www.lavass.Cn电话:010-86835215 Java源程序(*java文件) Javac编译 ava类文件(*cass文什) 平台无 被装载进入虚拟机 Java虚拟机 平台相关 解释执行字节码文件 Linux Windows 2:垃圾回收 2.1:什么是垃圾 在程序运行的过程中,存在被分配了的内存块不再被需要的情况,那么这些内存块对程 序来讲就是垃圾。 产生了垃圾,自然就需要清理这些垃圾,更为重要的是需要把这些垃圾所占用的内存资 源,回收回来,加以再利用,从而节省资源,提高系统性能。 2.2:垃圾回收 不再需要的凵分配内存应取消分配(释放内存) 在其它语言中,取消分配是程序员的责仟 Java编程语言提供了种系统级线程以跟踪内存分配 垃圾攻集 可检查和释放不再需要的内存 可自动完成上述工作 可在JM实现周期中,产生意想不到的变化 许多编程语言都允许在程序运行时动态分配内存,分配内存的过程由于语言句法不同而 有所变化,但总是要将指针返回到内存的起始位置,当分配内存不再需要时(內存指针已溢 出范围),程序或运行环境应释放内存 在C,C艹+或其它语言中,程序员负责释放内存。有吋,这是件很困难的事情。因为 你并不总是事先知道内存应在何时被释放。当在系统中没有能够被分配的内有时,可导致程 序瘫痪,这种程序被称作具有内存漏洞 java编程语言解除∫程序员释放内存的贲仼。它可提供一种系统级线程以跟踪每一次 内存的分配情況。在Java虚拟机的空闲周期,垃圾收集线程检查并释敚那些可被释放的内 存。垃圾收集在Java技术程序的生命周期中自动进行,它解除了释放内存的要求,这样能 够有效避免内存漏洞和内存泄露(内冇泄露就是程序运行期间,所占用的内存一直往上涨, 很容易造成系统资源耗尽而降低性能或崩溃) PDF文件使用" pdfFactory Pro"试用版本创建ww, fineprint,cn Java私塾跟我学系列JAⅥ篇网址:htp:/www.lavass.Cn电话:010-86835215 2.3:提示 (1):在Java里面,垃圾回收是一个自动的系统行为,程序员不能控制垃圾回收的功 能和行为。比如垃圾回收什么时候开始,什么时侯结束,还有到底哪些资源需要回收等,都 是程序员不能控制的 (2):有些跟垃圾回收相关的方法,比如: System. gc(,记住“点,调用这些方法, 仅仅是在通知垃圾回收程序,全于垃圾回收程序运个运行,仆么时候运行,都是尢法控制的。 (3):程序员可以通过设置对象为nul(后面会讲到)来标示某个对象不再被需要了, 这只是表示这个对象可以被回收了,并不是马上被回收 3:代码安全 Java如何保证编写的代仍是安全可靠的呢? (1):第一关:编写的代码首先要被编译成为 class文件,如果代码写得有问题,编译期间 就会发现,然后提示有编译错误,无法编译通过。 (2):第二关:通过编译关后,在类装载的时候,还会进行类装载检查,把本机上的类和网 络资源类相分离,在调入类的时候进行检査,因而可以限制仁何“特洛伊木马”的应用 (3):第三关:类装载后,在运行前,还会进行字节校验,以判断你的程序是安全的。 (4):第四关:如果你的程序在网终上运行,还有沙箱( Sand box)的保护,什么是沙箱呢? 就是如果你的程序没有汏得授权,只能在沙箱限定的范围内运行,是不能够访问本地資源的, 从而保证安全性。 如下图所示: Runtime Compile Java class Loader匿载检查 Hello world. java Network Byte code verifier 节码校验 Javac 编译检耷 Hello World class Interpreter Runtime Hardware 学习到这甲,大家应该对Java有了一定的了解了。现在是否想要看看Java程序究竟什 么样子呢?是不是想要体会一下如何开发Java程序呢?下面我们先米看看如何构建JSE的 环境,这是进行Java程序开发的第一步, PDF文件使用" pdfFactory Pro"试用版本创建ww, fineprint,cn
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值