《Java 应用与开发》课程讲义 - 王晓东1.2 Java 技术栈 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 1.3 Java 程序编译运行过程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.1 Java 运算符 . . . . . . . . . . 语言的版本迭代历程如图1.1所示。 1.1.2 Java 技术的特点 Java 具备以下技术特点: 面向对象 Java 是一种以对象为中心,以消息为驱动的面向对象的编程语言。 平台无关性 分为源代码级(需重新编译源代码,如 C/C++)和目标代码级 (Java) 平台 无关。 分布式 可支持分布式技术及平台开发。 可靠性 不支持直接操作指针,避免了对内存的非法访问;自动单元回收功能防止内存 丢失等动 Java1.1 Java1.2 Java2 J2SE J2ME J2EE 标准版,开发适用于PC上运行的程序 微缩版,开发适用于手机等嵌入式设备的程序 企业版,开发适用于服务器端的程序 引入内部类和即时编译(Just-In-Time,JIT)技术 引入Swing 2000.5 2002.2 2004.10 2006.11 J2SE1.3 J2SE1.4 J2SE1.5 J2SE5.00 码力 | 330 页 | 6.54 MB | 1 年前3
Java 应用与开发 - Java 内存模型与分配机制新生代 Old Space 老年代 大纲 Java 内存模型 Java 程序内存运行分析 Java 内存管理建议 Java 程序运行过程会涉及的内存区域 程序计数器 当前线程执行的字节码的行号指示器。 栈 保存局部变量的值,包括:用来保存基本数据类型的值; 保存类的实例,即堆区对象的引用(指针),也可以用来 保存加载方法时的帧。(Stack) 堆 用来存放动态产生的数据,如 new 出来的对象和数组。 享该类的方法,并不是每创建一个对象就把成员方法复制一次。 大纲 Java 内存模型 Java 程序内存运行分析 Java 内存管理建议 Java 程序运行过程会涉及的内存区域 程序计数器 当前线程执行的字节码的行号指示器。 栈 保存局部变量的值,包括:用来保存基本数据类型的值; 保存类的实例,即堆区对象的引用(指针),也可以用来 保存加载方法时的帧。(Stack) 堆 用来存放动态产生的数据,如 new 出来的对象和数组。 享该类的方法,并不是每创建一个对象就把成员方法复制一次。 大纲 Java 内存模型 Java 程序内存运行分析 Java 内存管理建议 Java 程序运行过程会涉及的内存区域 程序计数器 当前线程执行的字节码的行号指示器。 栈 保存局部变量的值,包括:用来保存基本数据类型的值; 保存类的实例,即堆区对象的引用(指针),也可以用来 保存加载方法时的帧。(Stack) 堆 用来存放动态产生的数据,如 new 出来的对象和数组。0 码力 | 44 页 | 818.30 KB | 1 年前3
Java 应用与开发 - 类加载和反射动态语言。从这个观点看,Perl、Python、Ruby 是动态语 言,C++、Java、C# 不是动态语言。 ▶ 但是 Java 有着一个非常突出的动态相关机制:反射 (Reflection),可以于运行时加载、探知、使用编译期间完 全未知的类。换句话说,Java 程序可以加载一个运行时才 得知名称的类,获悉其完整构造(但不包括 methods 定义), 并生成其对象实体、或对其 fields 设值、或唤起调用其 methods。 使用反射生成并操作对象 本节习题 反射机制 ▶ 反射机制是 Java 语言在运行时所拥有的一项自观能力。通 过这种能力可以彻底的了解自身的情况为下一步的动作做准 备。 ▶ 反射机制是在运行状态(而不是编译状态)时: ▶ 判断任意一个对象所属的类; ▶ 构造任意一个类的对象; ▶ 判断任意一个类所具有的成员变量和方法(通过反射甚至可 以调用 private 方法); ▶ 调用任意一个对象的方法。 类的加载、连接和初始化 类加载器 使用反射生成并操作对象 本节习题 反射的主要用途 O 一个常见的场景 当我们在使用 IDE(如 Eclipse)时,当我们输入一个对象或类 并想调用它的属性或方法,一按点号,编译器就会自动列出它的 属性或方法,这里就会用到反射。 大纲 反射 类的加载、连接和初始化 类加载器 使用反射生成并操作对象 本节习题 反射的主要用途 O 反射最重要的用途就是开发各种通用框架0 码力 | 46 页 | 714.40 KB | 1 年前3
基于 Java EE 的企业应用系统设计 - Spring MVC 01提供的其他 能力。 2. Spring MVC 中提供了 Dispatcher Servlet 而无需额外开发。 3. Spring MVC 中使用基于 XML 的配置文件,可以编辑配置而无需 重新编译应用程序。 4. Spring MVC 实例化控制器,并根据用户输入来构造 bean。 5. Spring MVC 可以自动绑定用户输入并正确地转换数据类型。 6. Spring MVC 内置了 应用的开发演化 MVC 模式示例 Spring MVC 数据绑定和表单标签库 Controller 注解类型 org.springframework.stereotype.Controller 注解类型用于指示 Spring 类的实 例是一个控制器。 O @Controller 示例 package com.example.controller; import org.springframework.stereotype MVC 模式示例 Spring MVC 数据绑定和表单标签库 RequestMapping 注解类型 RequestMapping 除了具有 value 属性外,还有其他属性: method 用来指示该方法仅处理哪些 HTTP 方法。 @RequestMappinq(value = "/order-process", method={RequestMethod.POST, RequestMethod0 码力 | 67 页 | 792.43 KB | 1 年前3
Java 应用与开发 - JSP (Java Server Page)doGet 或 doPost,发送响应给浏览器; 4. 版本时间不一致,Web 服务器调用转换系统,将 JSP 的文 本代码转换为 Servlet 的 Java 代码; 5. 将 Java 代码编译为 class 文件; 6. 调用 Servlet Class 的相应方法处理请求并返回响应。 大纲 JSP 概述 JSP 指令 JSP 动作 JSP 脚本 JSP 内置对象 本节习题 JSP JSP 指令 JSP 动作 JSP 脚本 JSP 内置对象 本节习题 大纲 JSP 概述 JSP 指令 JSP 动作 JSP 脚本 JSP 内置对象 本节习题 JSP 指令 JSP 指令指示一个 JSP 页面的属性和特征,JSP 指令不会产生 任何的输出到当前输出流中。 O JSP 指令 ▶ page 指令,用于定义 JSP 页面级的其他元素特征。 ▶ include 指令,用于嵌入另一个文本文件的内容到本页面。 本节习题 会话对象 session ▶ JSP 的 session 对象对应 Servlet 中 的javax.servlet.http.HttpSession。 ▶ JSP 页面使用 page 指令指示此 JSP 页面是否可以使用 session 内置对象。 1 <%@ page session="true␣|␣false" %> 大纲 JSP 概述 JSP 指令 JSP 动作 JSP 脚本 JSP0 码力 | 47 页 | 740.36 KB | 1 年前3
Hello 算法 1.1.0 Java版。 图 2‑4 递归调用深度 在实际中,编程语言允许的递归深度通常是有限的,过深的递归可能导致栈溢出错误。 2. 尾递归 有趣的是,如果函数在返回前的最后一步才进行递归调用,则该函数可以被编译器或解释器优化,使其在空 间效率上与迭代相当。这种情况被称为尾递归(tail recursion)。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 普通递归:求和操作是在“归”的过程中执行的,每层返回后都要再执行一次求和操作。 ‧ 尾递归:求和操作是在“递”的过程中执行的,“归”的过程只需层层返回。 图 2‑5 尾递归过程 Tip 请注意,许多编译器或解释器并不支持尾递归优化。例如,Python 默认不支持尾递归优化,因此即 使函数是尾递归形式,仍然可能会遇到栈溢出问题。 3. 递归树 当处理与“分治”相关的算法问题时,递归往往比迭代的 暂存数据:用于保存算法运行过程中的各种常量、变量、对象等。 ‧ 栈帧空间:用于保存调用函数的上下文数据。系统在每次调用函数时都会在栈顶部创建一个栈帧,函数 返回后,栈帧空间会被释放。 ‧ 指令空间:用于保存编译后的程序指令,在实际统计中通常忽略不计。 在分析一段程序的空间复杂度时,我们通常统计暂存数据、栈帧空间和输出数据三部分,如图 2‑15 所示。 图 2‑15 算法使用的相关空间 相关代码如下:0 码力 | 378 页 | 18.47 MB | 1 年前3
Hello 算法 1.0.0 Java版。 图 2‑4 递归调用深度 在实际中,编程语言允许的递归深度通常是有限的,过深的递归可能导致栈溢出错误。 2. 尾递归 有趣的是,如果函数在返回前的最后一步才进行递归调用,则该函数可以被编译器或解释器优化,使其在空 间效率上与迭代相当。这种情况被称为「尾递归 tail recursion」。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 普通递归:求和操作是在“归”的过程中执行的,每层返回后都要再执行一次求和操作。 ‧ 尾递归:求和操作是在“递”的过程中执行的,“归”的过程只需层层返回。 图 2‑5 尾递归过程 � 请注意,许多编译器或解释器并不支持尾递归优化。例如,Python 默认不支持尾递归优化, 因此即使函数是尾递归形式,仍然可能会遇到栈溢出问题。 3. 递归树 当处理与“分治”相关的算法问题时,递归往往比迭代的 暂存数据:用于保存算法运行过程中的各种常量、变量、对象等。 ‧ 栈帧空间:用于保存调用函数的上下文数据。系统在每次调用函数时都会在栈顶部创建一个栈帧,函数 返回后,栈帧空间会被释放。 ‧ 指令空间:用于保存编译后的程序指令,在实际统计中通常忽略不计。 在分析一段程序的空间复杂度时,我们通常统计暂存数据、栈帧空间和输出数据三部分,如图 2‑15 所示。 图 2‑15 算法使用的相关空间 相关代码如下:0 码力 | 376 页 | 17.59 MB | 1 年前3
Hello 算法 1.2.0 简体中文 Java 版。 图 2‑4 递归调用深度 在实际中,编程语言允许的递归深度通常是有限的,过深的递归可能导致栈溢出错误。 2. 尾递归 有趣的是,如果函数在返回前的最后一步才进行递归调用,则该函数可以被编译器或解释器优化,使其在空 间效率上与迭代相当。这种情况被称为尾递归(tail recursion)。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 普通递归:求和操作是在“归”的过程中执行的,每层返回后都要再执行一次求和操作。 ‧ 尾递归:求和操作是在“递”的过程中执行的,“归”的过程只需层层返回。 图 2‑5 尾递归过程 Tip 请注意,许多编译器或解释器并不支持尾递归优化。例如,Python 默认不支持尾递归优化,因此即 使函数是尾递归形式,仍然可能会遇到栈溢出问题。 3. 递归树 当处理与“分治”相关的算法问题时,递归往往比迭代的 暂存数据:用于保存算法运行过程中的各种常量、变量、对象等。 ‧ 栈帧空间:用于保存调用函数的上下文数据。系统在每次调用函数时都会在栈顶部创建一个栈帧,函数 返回后,栈帧空间会被释放。 ‧ 指令空间:用于保存编译后的程序指令,在实际统计中通常忽略不计。 在分析一段程序的空间复杂度时,我们通常统计暂存数据、栈帧空间和输出数据三部分,如图 2‑15 所示。 图 2‑15 算法使用的相关空间 相关代码如下:0 码力 | 379 页 | 18.48 MB | 10 月前3
Hello 算法 1.0.0b5 Java版。 图 2‑4 递归调用深度 在实际中,编程语言允许的递归深度通常是有限的,过深的递归可能导致栈溢出报错。 2. 尾递归 有趣的是,如果函数在返回前的最后一步才进行递归调用,则该函数可以被编译器或解释器优化,使其在空 间效率上与迭代相当。这种情况被称为「尾递归 tail recursion」。 ‧ 普通递归:当函数返回到上一层级的函数后,需要继续执行代码,因此系统需要保存上一层调用的上下 ‧ 普通递归:求和操作是在“归”的过程中执行的,每层返回后都要再执行一次求和操作。 ‧ 尾递归:求和操作是在“递”的过程中执行的,“归”的过程只需层层返回。 图 2‑5 尾递归过程 请注意,许多编译器或解释器并不支持尾递归优化。例如,Python 默认不支持尾递归优化,因此即使函数 是尾递归形式,但仍然可能会遇到栈溢出问题。 3. 递归树 当处理与“分治”相关的算法问题时,递归往往比迭代 暂存数据:用于保存算法运行过程中的各种常量、变量、对象等。 ‧ 栈帧空间:用于保存调用函数的上下文数据。系统在每次调用函数时都会在栈顶部创建一个栈帧,函数 返回后,栈帧空间会被释放。 ‧ 指令空间:用于保存编译后的程序指令,在实际统计中通常忽略不计。 在分析一段程序的空间复杂度时,我们通常统计暂存数据、栈帧空间和输出数据三部分。 第 2 章 复杂度分析 hello‑algo.com 40 图 2‑150 码力 | 376 页 | 30.69 MB | 1 年前3
Java 应用与开发 - Servlet 编程Servlet 编程 Servlet 生命周期 Servlet 配置 Servlet 部署 Servlet 示例 Servlet 配置 Servlet 启动时机 在配置 Servlet 时,可以指示 Servlet 跟随 Web 容器一起自动启 动。这时,Servlet 就可以在没有请求的情形下,进行实例化和初 始化,完成特定任务。自启动 Servlet 的配置语法: 1编译好的 Servlet class 文件应该放到指定的 Web 应用目录下, 才能被 Web 容器找到,这个目录为: /WEB-INF/classes/package/FileName.class 例如 0 码力 | 50 页 | 725.36 KB | 1 年前3
共 29 条
- 1
- 2
- 3













