三:静态方法的理解
静态方法是属于类的,内存必须为它分配内存空间,这个空间一直由静态方法占用,内存管理器不会由于静态方法没有被调用而 将静态方法的存储空间收回,这样如果将所有的方法都声明为静态方法,就会占用大量的内存空间,最后是系统变慢。而普通的 成员方法是由对象调用的,内存并不会一直为起分配内存,只有调用的时候才为其分配存储空间,而当其没有被调用时,存储空 间就会被内存管理其收回,释放没有用的空间,提高的系统的运行速率!
静态方法的特征:静态的方法属于类的可以直接使用类名.方法名()调用, 在Java中也可以使用类的实例来调用比如: 类名实例名=new 类名() 实例名.方法名(); 但在静态方法中不能直接调用实例方法.!! 一个简单静态方法 public static void Get(){ System.out.println("这是一个静态方法!") } 实例和静态方法自己多去写几个例子就明白了!
静态方法只能被静态方法调用。
.静态方法只能访问静态成员变量. 非静态方法能访问静态成员变量也能访问非静态成员变量
类名可以直接调用静态成员变量。 静态方法只能调用静态成员变量。 静态方法的产生要先于成员变量的初始化。
应该是静态方法只能调用静态变量 你想想,假如你用静态方法调用非静态变量,当类没有初始化的时候就可以使用静态方法,但是这个时候,非静态变量还未产生呢. 编译都会报错的
类装载步骤 在Java中,类装载器把一个类装入Java虚拟机中,要经过三个步骤来完成:装载、链接和初始化,其中链接又可以分成校验、 准备和解析三步,除了解析外,其它步骤是严格按照顺序完成的,各个步骤的主要工作如下: 装载:查找和导入类或接口的二进制数据; 链接:执行下面的校验、准备和解析步骤,其中解析步骤是可以选择的; 校验:检查导入类或接口的二进制数据的正确性; 准备:给类的静态变量分配并初始化存储空间; 解析:将符号引用转成直接引用; 初始化:激活类的静态变量的初始化Java代码和静态Java代码块。 初始化类中属性是静态代码块的常用用途,但只能使用一次。 (简单来讲就是项目加载的时候就执行静态代码块,你想了解更清楚的话就写点代码测试一下)
凡是声明为static的语句(变量,方法,代码块),是在加载类的时候就执行的
一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候就已经加载可以用类名直接调用 比如main方法就必须是静态的这是程序入口 两者的区别就是:静态代码块是自动执行的; 静态方法是被调用的时候才执行的. 静态方法 (1)在Java里,可以定义一个不需要创建对象的方法,这种方法就是静态方法。要实现这样的效果,只需要在类中定义的方法前加上static关键字。例如: public static int maximum(int n1,int n2) 使用类的静态方法时,注意: a在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。 b 静态方法不能以任何方式引用this和super关键字,因为静态方法在使用前不用创建任何实例对象,当静态方法调用时,this所引用的对象根本没有产生。 (2)静态变量是属于整个类的变量而不是属于某个对象的。注意不能把任何方法体内的变量声明为静态,例如: fun() { static int i=0;//非法。 } (3)一个类可以使用不包含在任何方法体中的静态代码块,当类被载入时,静态代码块被执行,且只被执行一次,静态块常用来执行类属性的初始化。例如: static { }
四:StringBuilder与 StringBuffer
1. 在执行速度方面的比较:StringBuilder > StringBuffer 2. StringBuffer与StringBuilder,他们是字符串变量,是可改变的对象,每当我们用它们对字符串做操作时,实际上是在一个对象 上操作的,不像String一样创建一些对象进行操作,所以速度就快了。 3. StringBuilder:线程非安全的 ; StringBuffer:线程安全的 当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证 StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而 不用StringBuffer的,就是速度的原因。 对于三者使用的总结: 1.如果要操作少量的数据用 = String 2.单线程操作字符串缓冲区下操作大量数据 = StringBuilder 3.多线程操作字符串缓冲区下操作大量数据 = StringBuffer
五:正则表达式的应用
指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建 Matcher对象,依照正则表达式,该对象可以与任意字符序列匹配。执行匹配所涉及的所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。
因此,典型的调用顺序是
p后的为正则表达式
String regex="正则表达式"
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher("aaaaab");
while(m.find()){}在仅使用一次正则表达式时,可以方便地通过此类定义 matches方法。此方法编译表达式并在单个调用中将输入序列与其匹配。语句
六:获取指定的文件名称
关于绝对路径和相对路径: 绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:C:xyz est.txt 代表了test.txt文件的绝对路径 http://www.sun.com/index.htm也代表了一个URL绝对路径。 相对路径:相对与某个基准目录的路径。包含Web的相对路径(HTML中的相对目录), 例如:在Servlet中,"/"代表Web应用的跟目录。和物理路径的相对表示。例如:"./" 代表当前目录,"../"代表上级目录。这种类似的表 示,也是属于相对路径。另外关于URI,URL,URN等内容,请参考RFC相关文档标准。 RFC 2396: Uniform Resource Identifiers (URI): Generic Syntax,(http://www.ietf.org/rfc/rfc2396.txt)2.关于JSP/Servlet中的相对路径和 绝对路径。2.1服务器端的地址服务器端的相对地址指的是相对于你的web应用的地址,这个地址是在服务器端解析的 (不同于html和javascript中的相对地址,他们是由客户端浏览器解析的) 第一种: File f = new File(this.getClass().getResource("/").getPath()); System.out.println(f); 结果: C:\Documents%20and%20Settings\Administrator\workspace\projectName\bin 获取当前类的所在工程路径; 如果不加“/” File f = new File(this.getClass().getResource("").getPath()); System.out.println(f); 结果: C:\Documents%20and%20Settings\Administrator\workspace\projectName\bin\com\test 获取当前类的绝对路径; 第二种: File directory = new File("");//参数为空 String courseFile = directory.getCanonicalPath() ; System.out.println(courseFile); 结果: C:\Documents and Settings\Administrator\workspace\projectName 获取当前类的所在工程路径; 第三种: URL xmlpath = this.getClass().getClassLoader().getResource("selected.txt"); System.out.println(xmlpath); 结果: file:/C:/Documents%20and%20Settings/Administrator/workspace/projectName/bin/selected.txt 获取当前工程src目录下selected.txt文件的路径 第四种: System.out.println(System.getProperty("user.dir")); 结果: C:\Documents and Settings\Administrator\workspace\projectName 获取当前工程路径 第五种: System.out.println( System.getProperty("java.class.path")); 结果: C:\Documents and Settings\Administrator\workspace\projectName\bin 获取当前工程路径
第七:dom解析
文档根节点:document.documentElement
子节点集合:childNodes
子节点数目:childNodes.length,如 document.documentElement.childNodes.length
节点值:nodeValue
document.documentElement.childNodes[1].nodeValue
判断是否存在子节点:hasChildNodes()...
document.getDocumentElement().getChildNodes().getLength();应该是取这个xml文件中节点的总个数;
getDocumentElement()是获得xml文件的节点;
document.getElementsByTagName("book"),getLength();是取<book>节点的个数,得到的值当然就是1了。
1.获取所有节点的集合NodeList nodelist=element.getChildNodes();
2.用Node cnode=nodelist.item(i);遍历节点的集合获得每一个节点;
3. cnode.getNodeName()获得节点名字;
4. cnode.getChildNodes()获得子节点;
5. cnode.getNodeValue()获得节点的值
6. NamedNodeMap nameAttrMap = connectors.item(0).getFirstChild().getAttributes();
返回的是键值对 以map形式存放,可以通过key值取!
第八:所谓的开辟缓存;
所谓的开辟缓存,是开辟一个静态的空间,存放数据供后续使用,在方法入口处就将数据准备好存入
在action中将页面的元素信息传入manger中的一个方法,该方法为封装页面的元素的静态方法,这样在该action方法被调用后,
后续的manger中要用到页面元素都可以从封装的静态map中取值!
第九:单例的用法
直接把一个类设计成单例,加入单例的特定模式就可以。其它的方法照常编码!
第十:将一个类放入session中
十二:代码提交的几种样式
1.window.location.href="nmssave.action";
2.$("#userform").attr("action","<%=request.getContextPath()%>/usersave.action?time="+new Date());
document.getElementById("nmsform").submit();
3. varuserform=document.getElementById("userform");
userform.action="<%=request.getContextPath()%>/usersave.action?time="+new Date();
userform.submit();
本文深入讲解Java中的静态方法特性、StringBuilder与StringBuffer的区别、正则表达式的应用等核心技术,并介绍了DOM解析方法及单例模式的使用。

被折叠的 条评论
为什么被折叠?



