方法的重载 :同一个类里面方法的名字相同,方法的参数项(主要是参数类型,参数个数) 不同 , 返回类型可能不同。
重载方法可以具有不同的返回类型,但返回类型本身不足以区分方法的两个版 本。构造方法也可以被重载。
方法的重写 :子类继承父类 , 子类覆盖了父类的同名同参同返回值的方法,子类的访问修饰 符不能比父类的范围小。
* 父类 new 子类,只能调用子类中重写的方法,而不能调用子类扩展的方法
继承和多态 java 是单一继承 , 接口起到了类似多继承的作用。
子类不能调用父类 private 的属性和方法。
super 关键字:调用父类的方法和属性(父类私有的除外),写在子类的方法调 用之前(第一行)
* 静态方法里不能使用 super 关键字 ( 比如 main 方法里 )
* 多态的实现:重载,重写,接口
*log4j 优先级从高到低: error,warn, info, debug
* 异常—— Exception 异常要在最后抛出
* 异常时先执行 finally 中的程序后执行 return
四种基本数据类型的取值范围 : byte(-2^7~+2^7-1) short(-2^15~+2^15-1) ,int 和 long 的范围依此类推
软件工程 面向过程的程序设计思想:程序=数据结构+算法 面向对象的程序设计思想:程序 = 对象+消息 OOA:面向对象分析
数据库连接
流是指一连串流动的字符,是以先进先出的方式处理的。
构造一个文件输入流对象:InputStream o = new FileInputStream(“a.txt”);
o.available();//可读取的字节数
o.read(); //读取文件的数据
o.close(); //关闭输入流对象
FileInputStream是读取字节,BuferedReader读取字符
数据库连接
1创建jdbc数据源
2 装载驱动 class.forName(“sun.jdbc….”);
3 创建Connection对象
4 读取数据
5 处理数据库的返回结果ResultSet
6 关闭释放连接对象
Jsp与servlet
Servlet是基于线程的,CGI是基于进程的,占用资源多
Servlet运行环境常用的有jswdk ,tomcat,resin
进程与线程 进程 就是同一时间内执行多个程序,一个进程都有自己独立 的内存空间, 一组系统资源
* 程序中单个顺序的流控制称为线程
* 多个线程可共享一个内存空间,进程不行。
* 多进程 :在操作系统中,能同时运行多个任务程序
* 多线程 :在同一应用程序中,有多个顺序流同时执行
*Java 支持多线程,它的所有类都是在多线程下定义的
Java 中的线程由三部分组成:
1. 虚拟的 CPU ,封装在 java.lang.Thread 包中
2. CPU 所执行的代码
3. CPU 所处理的数据
* 当一个线程创建状态时,系统不为它分配资源,调用 .start() 时才分配 * 线程的终止有两种,一是自动执行完成(推荐),二是调用 stop() 方法
栈内存,堆内存
定义一个变量或方法时, java 就在栈中 为这个变量分配内存空间 ,超出作用域就自动释放。
* 栈中数据可以共享
* 堆内存 放 new 出来的对象 ,由 JVM 自动回收机制管理
两种不同的 String 声明
String str = new String(“abc”) ; // 放在堆中
String str = “abc” // 放在栈中,速度快
* 总结:堆主要用来存放对象,栈主要用来执行程序
Equals 和 = =
双等号 :比较是否指向同一个引用Equals:比较两个字符串内容是否相等,比如new出来的两个String
类型的变量,把它们的参数设为相同, 用equals就为true,用双等号为false
网络编程
*URL(Uniform Resource Locator) 是统一资源定位器的简称,它表示 Internet 上某一 资源的地址。
* Socket 通常用来实现客户方和服务方的连接。 Socket 是 TCP/IP 协议的一个十分 流行的编程界面,一个 Socket 由一个 IP 地址和一个端口号唯一确定。 Socket 通常 用来实现 C/S 结构。
软件开发基础
计算机是执行程序指令的电子设备,输入、输出、存储和处理
CPU部件:算术逻辑单元(ALU),控制单元
存储器:主存储器(临时存储数据),辅助存储器(永久存储)
RAM:随机访问存储器—内存条
ROM:只读存储器—可以访问和读取但不能修改
Cache:高速缓存
一个字节(Byte)等于8位(bit)
软件的分类:系统软件、通用软件、应用软件、编程语言
编程语言分类:机器语言(第一代)、汇编语言(第二代)
二进制、十进制、十六进制的转换
十进制转二进制,可以采用除2取模,商为1时停止,然后从下往上组合即是相应的二进制
十进制小数转二进制乘2取整,先取的作为高位
二进制转十进制:1101 = 1*2^0+0*2^1+1*2^2+1*2^3 //从右往左开始算
数据结构
数据结构是将数据存储到计算机中的种方式,以便有效使用这些数据
栈(后进先出) 链表 队列(先进先出) 哈希表 堆 图 树
网络和Internet
共享数据、在计算机之间交换数据、高效的资源管理
局域网(LAN)、城域网(MAN)、广域网(WAN)
TCP:传输控制协议 IP:网际协议 UDP:用户数据报文协议(不用建立连接,从一边往另一边送东西,数据可能丢失)
软件开发过程
软件开发模型:瀑布型、螺旋型
软件开发过程:
1、可行研究与计划
2、需求分析
3、设计
4、开发
5、评估/测试
6、维护
struts
Struts 1.2 工作原理:
1. ActionServlet 核心 控制器会拦截所有 *.do 的请求
2. 从 struts-config.xml 中找到用户请求的 Action
3. 通过 struts-config.xml 中的配置再去找这个 Action 对应的 ActionForm, 并实例化
4. 把用户填写的数据自动填充到 ActionForm 中 ( 调用 ActionForm 中的 setXX() 方法填充 )
5. 同时把 ActionForm 放入到指定的范围中 (request,session)
6. 然后把请求转发给 Action
7. Action 获取 ActionForm 中的值然后调用业务逻辑层实现功能
8. 再通过 ActionMapping 查找 Actionforward 实现转发
工作流程如下:
1. 服务器启动后,根据 web.xml 加载 ActionServlet 读取 struts-config.xml 文件内容到内存。
2. 以登陆为例:第一次进 login.jsp 会先实例化 Form, 把默认值赋给表单元素。
3. 输入用户名密码提交表单、提交到 action 属性的 login.do, 通过 ActionServlet 读 struts-config.xml 文件找到 action 下的 path 属性找到 .do ,通过 name 属性找 form-beans 中的 form-bean 的 name 属性得到 ActionForm 的包名类名,先实例化 form, 把表单的值填充给 form, 调用 form 的 validate 方法验证、 ActionErrors 返回 null 表示验证通过,否则失败返回 input 指定的页面,验证通过会实例化 Action, 执行 Action 的 excute 方法。
添加 struts1.2 支持,乱码处理: filters 文件夹放到工程 src 目录下, web 覆盖。
作业: s2sh 整合增删改查 , 选添加 hibernate, 然后 struts,spring
Struts2 的核心控制器是 FilterDispatcher,
OGNL 的集合操作符:
?: 获取所有符合逻辑的元素
^: 获取符合逻辑的第一个元素
$: 获得符合逻辑的最后一个元素
this : 获取一个对象某个属性值的集合
Hibernate
Hibernate 是一个优秀的持久化框架
瞬时状态,持久状态
ORM :对象关系映射,完成对象数据到关系数据的映射机制
使用 Hibernate 的三项准备工作是:
1、 添加 hibernate 库
2、 添加 Hibernate 配置文件
3、 添加对应表的实体类和对应文件
对象的三种状态:临时状态 (Transient) 、持久化状态 (Psersistent) 、游离状态 (Detached)
Session 中的查询方法: load() 支持延迟加载 , get() 即时加载, load() 在数据中找不到数据会抛异常,而 get() 则返回 null 。
清除缓存方法: evict(),clear()
关联关系:一对一、一对多、多对多
继承实现的三种策略:单表继承,具体表继承,类表继承
Load 只有在 lazy=false 时,才支持多态查询。
支持一级缓存的方法: get(), load(), iterate( 查询实体对象 )
避免大量体入库内存溢出 : 先 flush() 再 clear().
事务的四个特性:原子生、一致性、隔离性、持久性。
Session 缓存的三大作用:
1、 减少数据库的访问频率,提高访问性能
2、 保证缓存中的对象与数据库同步,位于缓存中的对象称为持久化对象
3、 当持久化对象之间存在关联时, Session 保证不出现对象图的死锁。
Spring
Struts1 和 struts2 的不同点:
Spring 是一个开源的控制反转和面向切面的容器框架,主要目的是简化企业开发。
核心机制:以 BeanFactory 为基础,管理 Bean 之间依赖
单例模式: 1 、饿汉式 2 、懒汉式 3 、登记式
依赖注入: DI 控制反转: IOC 是同一个意思
依赖注入的两种方式: 1 设值注入 2 构造注入
数据结构和算法
冒泡:每次比较都可找出最大或最小的,有序的在最右边
选择排序:有序的在最左边
插入排序:速度比冒泡快一倍,比选择也快。
递归
调用自身
汉诺塔问题:
doGet()和doPost()
Jsp页面的form标签里的method属性为get时调用doget(0,
为post时调用doPost()
Jsp
Jsp引擎(Tomcat)先将jsp文件转换为servlet,然后调用Java编译器javac.exe对
Servlet代码进行编译,把它变成字节码(.classes)文件。然后再调用java虚拟机
执行该字节码文件,最后将结果返回给Web浏览器。
Html注释:<!- -客户端可以在源码中看到- - >
Jsp注释:<%-- 客户端源码看不到 --%>
<% ! int a=0; %> <%! String s = new String(“hello”) %> //以分号结束
Include指令:<%@ include file=”/footer.jsp” %>
Include动作:<jsp:include page=”baidu.jsp” />
表达式:<%=表达式 %>
Jsp的九个内置(implicit)对象:out、request、response、session、application、exception、
Config、page、pageContext
- /**
- * @汉诺塔的问题
- */
- public class HanoiTowers {
- static int count = 0; // 总共要移多少次
- public void moveTowers(int n, String start, String inter, String to) {
- // 柱子的n个圆盘移动到目标柱子上
- count++;
- if (n == 1) {
- System.out.println("从" + start + "到" + to);
- } else {
- // 首先将n-1个盘子移到备用柱,这里用到递归(方法调用方法本身),以便得到最底下最大的盘子
- moveTowers(n - 1, start, to, inter);
- System.out.println("从" + start + "到" + to);
- // 然后把n-1个备用柱上的盘子移到目标柱子上
- moveTowers(n - 1, inter, start, to);
- }
- }
- public static void main(String[] args) {
- new HanoiTowers().moveTowers(3, "A", "B", "C");
- System.out.println("总共要移动" + count+"次");
- }
- }