JavaWeb相关
1、参数传递
2、会话跟踪的四种实现方式
3、cookie
4、session
5、Filter
6、Properties
7、日志
8、反射(xml、)
9、内联函数
10、事件处理模型
11、良好的代码习惯
12、Java的三大注解( 由虚拟器控制给出注解,提示开发人员注意编码规则 )
13、存根类(Stub)
14、扩展方法
15、数组复制
1、参数传递
基本类型传递值,引用类型传递地址,在方法中,可根据地址改变引用类型的成员变量值。
值传递不可以改变原变量的内容和地址(仅副本做局部变量)。
引用传递不可以改变原变量地址,但可通过引用改变值。
一个方法不能修改一个基本数据类型的参数(数值、布尔),===>值传递
一个方法可以改变一个对象(引用)的值,一个方法不可改变对象的原引用。==>引用类型
若将一个变量(常量)赋值给一个引用类型,则等于new一次引用类型对象,与方法外没有关系。????
2、会话跟踪的四种实现方式
1) 表单域:<input type=”hidden”>,非常适合需要大量数据存储的会话应用
2) URL重写:URL可以在后面附加参数,和服务器的请求一起发送,url&name=value
3) Cookie:Cookie是一个小的,已命名的数据元素,服务器使用set-Cookie头标记它为HTTP响应的一部分,发送给客户端,客户端保存cookie的值,在对同一服务器的后续请求中使用cookie将内容返回给服务器,cookie保存在客户端,可设置保存时间。(session的Id存储在cookie中)。
4) session:使用setAttribute(String str,Object obj)方法将对象捆绑到一个会话上。
每个session对象有一个唯一的Id,保存在客户端的Cookie中,关闭浏览器SessionId消失。
如果客户端禁用cookie,可以使用url重写的方法实现会话跟踪。
session用来表示用户会话,session对象在服务端维护。
cookie存放在客户端,可以分为内存cookie和磁盘cookie,超时消失。
隐藏域在页面中对于用户是不可见的,在表单中插入的目的是收集和发送消息。
3、cookie
4、session
5、Filter
servlet中的过滤器格式:
<filter>
<filter-name> xxxx</filter-name>
<filter-class> xxxx.aaaa</filter-class>
</filter>
<init-param>(可选)
<parma-name>charset</param-name>
<param-value> UTF-8</param-value>
</init-param>
<filter-mapping>
<filter-name> xxxx</filter-name>
<url-pattern> /* </url-pattern>
</filter-mapping>
filter-mapping可映射到一个或者多个servlet或JSP文件,<url-pattern>可映射到任意特征的URL。
6、Properties
Properties实现了Map接口,是线程安全的。(setProperties方法中有synchronized)
Properties是HashTable的子类,不过Properties添加了两个方法,load()和store()可以直接导入或者将映射写入文件。另外Properties是<String,String>的映射。
主要用于导入配置文件信息。
7、日志
日志的级别大小关系:ALL<TRACE<DEBUG<INFO<WARN<ERROR<FATAL<OFF
log4j建议只使用四个级别:优先级从高到低:ERROR>WARN>INFO>DEBUG
8、反射(xml、)
反射破坏了原有的访问修饰符的访问限制。
9、内联函数 应用于 代码量小,且频繁调用
java中的内联函数从空间换时间,===》递归适宜用内联(原理是使用方法时不需要再调用)
final关键字会告诉编译器,可以将final函数视为内联函数,但编译器最终会权衡性能再做确定。final有助于锁定方法和提高效率。缺点是占用空间,消耗内存。
10、事件处理模型
Java提供的事件处理模型是一种人机交互模型,有三个基本要素。
1) 事件源:事件发生的场所,指各个组件,如按钮。
2) 事件: 事件封装了组件上发生的事件,比如按钮单击、按钮松开等。
3) 事件监听器:负责监听事件源上发生的特定类型的事件,当事件到来时,还必须负责处理响应的事件。
11、良好的代码习惯
1、面向接口编程:List myList = new ArrayList(); === 接口名 xxx = new 接口实现类
Map map = new HashMap();
(1)程序规范化设计 (2)团队协同开发 (3)转换为组件 (4)代码复用
2、Java中路径用 “/” 才是正确的,如果使用了 “\”表示路径,需要转义。”\”也是转义符。
12、Java的三大注解( 由虚拟器控制给出注解,提示开发人员注意编码规则 )
(1)@SuppressWarnings(“deprecation”); ==>屏蔽相应的警告,(一般在方法上标注)
(2)@Override; 指定被注解的方法需要覆写超类的方法(1.5实现接口方法不能写,6.0可写)
(3)@Deprecated;表明程序调用一个废弃元素(方法),编译器应该显示警告(不能被使用)
元注解(Meta-Annotations,Java注解类型):Target、Retention、Documented、inherited。
@Target:注解表明注解类型适用于哪种目标元素,@Target(ElementType TYPE)适用任何类的元素包括:元素字段、方法、参数、构造函数、局部变量、类型本身。
13、存根类(Stub)
Stub是一个类,它实现了一个接口。继承该类就可以使用(间接)接口的方法,(不用全实现)。RMI采用Stub和Skeletons来进行远程对象的通讯,Stub充当客户端代理(运行在本地虚拟机),远程对象的调用实际上是通过调用该对象的客户端代理Stub来完成的。
每一个远程对象都包含一个代理对象Stub,当运行在本地虚拟机上的程序想调用远程Java虚拟机上的方法时,1)在本地创建该对象的代理对象Stub,然后调用代理对象上的方法,在远程有一个skeleton对象与Stub呼应,接受来自Stub对象的调用。(运行时动态链接??)
14、扩展方法
扩展方法只能访问所扩展类的public成员。
15、数组(数组复制)
(1)System.arrayCopy用本地方法(C语言)实现==>使用java间接操作硬件
(2)clone() 定义:protected native Object clone() throws CloneNotSupportedException{}
(3)arrays.CopyOf 调用了system.arraycopy 方法实现
(4)用for循环实现,效率最低