??xml version="1.0" encoding="utf-8" standalone="yes"?>
我的理解QCLASSPATH是针?class文g的,它是一个\径,能够让系l自动的L个目录下d找你所要运行的.class文g..
讄CLASSPATHQ可以在pȝ下电脑属性里的环境变量里直接dQ也可以自己创徏一?bat文gQ输入set classpath=d:\javatest;.;q里可以讄多个路径Q?’代表当前目?然后在DOC下执行这?bat文gOK了。这h?class文g攑֜d:\javatest下,无论我在哪JAVAq个.class文gQ它都能够被正常执行.
再有Q关于packageQ如果一个a.java文g定义了一个package javatestQ?当然a.java在javatestq个目录?
~译的时候需要在javatest的目录下执行JAVAC指o。此时会在当前目录生成一个a.class文g(假设只有一个ac?Q但是此时这个文件的名字不再是AQ而是多了一个姓Q姓javatestQ也是_我直接在当前目录下执行java apȝ会提C找不到目标文g。所以在q行q个a.class的时候需要这h行java javatest.a..
q个时候需要注意的是,pȝ同样会在CLASSPATH的目录下Ljavatestq个目录.如果CLASSPATH此时被设|ؓset classpath=d:\javatest;.;那么在当前目录下Qd:\javatestQ下执行java javatest.aQ系l会报错Q因为在当前目录Qd:\javatestQ和d:\javatest目录下找不到目标文gQ正的做法是在d:\下执行java javatest.a..
呵呵Q原来接触的时候很乱,现在l于有了那么一Ҏ\Q还有待慢慢学习...
当执行?/span> java XXX.class ”时Q?/span> java.exe 首先扑ֈ JRE Q?/span> Java Runtime Environment Q,接着扑ֈ位于 JRE 之中?/span> jvm.dll Q最后蝲?/span> jvm.dll q启动虚拟机?/span>
虚拟Z启动Q先做一些初始化动作Q如获取pȝ参数{,然后产生
BL
?/span>
BL
加蝲
Java
基础c,q些c都存放?/span>
JRE
中的
lib
目录下,可由
System.getProperty(“sun.boot.class.path?
列出?br />
jvm建立->初始化动?>产生W一个ClassLoader,即bootstrap loader->bootstrap loader在sum.misc.Launcherc里面的ExtClassLoader,q设定其Parent为null->bootstrap loader载入sun.misc.Launcher$AppClassLoader,q设定其parent为ExtClassLoader(但是AppClassLoader也是由bootstrap loader所载入?->AppClassLoader载入各个xx.class,xx.class也有可能被ExtclassLoader或者bootstrap loader载入.
Javac装载体pȝ?/strong>
装蝲cȝq程非常单:查找cL在位|,q将扑ֈ的Javacȝ字节码装入内存,生成对应的Class对象。Java的类装蝲器专门用来实现这Lq程QJVMq不止有一个类装蝲器,事实上,如果你愿意的话,你可以让JVM拥有无数个类装蝲器,当然q除了测试JVM外,我想不出q有其他的用途。你应该已经发现Cq样一个问题,c装载器自n也是一个类Q它也需要被装蝲到内存中来,那么q些c装载器p来装载呢Qd有个根吧Q没错,实存在q样的根Q它是龙见首不见Bootstrap ClassLoader. Z么说它神龙见首不见尾呢,因ؓ你根本无法在Java代码中抓住哪怕是它的一点点的尾_管你能时时d体会到它的存在,因ؓjava的运行环境所需要的所有类库,都由它来装蝲Q而它本n是C++写的E序Q可以独立运?可以说是JVM的运行v?伟大吧。在Bootstrap完成它的d后,会生成一个AppClassLoader(实际上之前系l还会用扩展类装蝲器ExtClassLoaderQ它用于装蝲Javaq行环境扩展包中的类),q个c装载器才是我们l常使用的,可以调用ClassLoader.getSystemClassLoader() 来获得,我们假定E序中没有用类装蝲器相x作设定或者自定义新的c装载器Q那么我们编写的所有javac通通会由它来装载,值得敬吧。AppClassLoader查找cȝ区域是耳熟能详的ClasspathQ也是初学者必跨q的门槛Q有没有灵光一闪的感觉Q我们按照它的类查找范围l它取名为类路径c装载器。还是先前假定的情况Q当Java中出现新的类QAppClassLoader首先在类传递给它的父类c装载器Q也是Extion ClassLoaderQ询问它是否能够装蝲该类Q如果能Q那AppClassLoader׃q这zMQ同样Extion ClassLoader在装载时Q也会先问问它的父类装蝲器。我们可以看出类装蝲器实际上是一个树状的l构图,每个c装载器有自q父亲Q类装蝲器在装蝲cLQL先让自己的父c装载器装蝲(多么敬长辈),如果父类装蝲器无法装载该cLQ自己就会动手装载,如果它也装蝲不了Q那么对不vQ它会大喊一壎ͼExceptionQclass not found。有必要提一句,当由直接使用c\径装载器装蝲cd败抛出的是NoClassDefFoundException异常。如果用自定义的类装蝲器loadClassҎ或者ClassLoader的findSystemClassҎ装蝲c,如果你不d意改变,那么抛出的是ClassNotFoundException?br />
cd载器是什么?
Java和其他语a不同的是QJava是运行于Java虚拟?JVM)。这意味着~译后的代码是以
一U和q_无关的格式保存的Q而不是某U特定的机器上运行的格式。这U格式和传统的可
执行代码格式有很多重要的区别。具体来_不同于C或者E++E序QJavaE序不是一个独
立的可执行文Ӟ而是由很多分开的类文gl成Q每个类文g对应一个JavacR?另外Q这
些类文gq不是马上加载到内存Q而是当程序需要的时候才加蝲?cd载器是Java虚拟
Z用来把类加蝲到内存的工具。而且QJavacd载器也是用Java实现的。这样你׃需?br />对Java虚拟机有深入的理解就可以很容易创qcd载器了?br />
Z么要创徏cd载器?
既然Java虚拟金已l有了类加蝲器,我们q要自己创徏其他的呢?问得好。默认的cd载器
只知道如何从本地pȝ加蝲cR当你的E序完全在本机编译的话,默认的类加蝲器一般都?br />作的很好。但是Java中最Ȁ动h心的地方之一是很容易的从网l上而不只是本地加蝲cR?br />举个例子Q浏览器可以通过自定义的cd载器加蝲cR?q有
很多加蝲cȝ方式。除了简单的从本地或者网l外Q你q可以通过自定义Java中最Ȁ动h?br />的地方之一:
* 执行非信M码前自动验证数字{
* Ҏ用户提供的密码解密代?br />* Ҏ用户的需要动态的创徏c?br />你关心的M东西都能方便的以字节码的形式集成C的应用中
-----------------------------------------------------------------------------------
以上大都是别人的文字Q我选取了一些保存下来。用于以后的l箋学习?
如果哪位朋友研究q这斚w的内容,很乐意向您请教学习?br />
1、Out对象
主要用来向客L输出各种格式的数据,q且理应用服务器上的输出缓冲区QOut对象的基cLjavax.servlet.jsp.JspWritercR?
Out的主要方法:
out.println(DataType);或out.print(DataType);
实例Q?
<%@page language="java"
contentType="text/html;charset=gb2312"
import="java.util.*"
%>
<HTML>
<HEAD>
<TITLE> out对象使用实例</TITLE>
</HEAD>
<BODY>
<%
out.println(new Date().toLocaleString());
out.print("<BR>");
out.print("试成功");
%>
</BODY>
</HTML>
2、Request对象
Request.setAttribute()与Request.getAttribute()Ҏ实例Q也可以使用forward建立h关系Q:
引入面Q?
<%@page language="java"
contentType="text/html;charset=gb2312"
%>
<%@ include file="1.jsp" %>
你刚才输入的内容是:
<%=request.getAttribute("gr")%>
主页面:
< %@page language="java"
contentType="text/html;charset=gb2312"
import="java.util.*"
%>
<HTML>
<HEAD>
<TITLE> request对象使用实例</TITLE>
</HEAD>
<BODY>
<%
request.setAttribute("gr","123333");
%>
</FORM>
</BODY>
</HTML>
Request.getParameter()Ҏ实例
主页?
<%@page language="java"
contentType="text/html;charset=gb2312"
import="java.util.*"
%>
<HTML>
<HEAD>
<TITLE> request.getParameter()Ҏ使用实例</TITLE>
</HEAD>
<BODY>
<FORM METHOD=POST ACTION="2.jsp">
<INPUT TYPE="text" NAME="gr1"><BR>
<INPUT TYPE="text" NAME="gr2"><BR>
<INPUT TYPE="text" NAME="gr3"><BR>
<INPUT TYPE="submit" NAME="submit" value="提交">
<INPUT TYPE="reset" NAME="reset" value="清除">
</FORM>
</FORM>
</BODY>
</HTML>
引入面
<%@page language="java"
contentType="text/html;charset=gb2312"
%>
你刚才输入的内容是:<BR>
<%=request.getParameter("gr1")%><BR>
<%=request.getParameter("gr2")%><BR>
<%=request.getParameter("gr3")%><BR>
Request.getParameterName()Ҏ实例
主页?
<%@page language="java"
contentType="text/html;charset=gb2312"
%>
<HTML>
<HEAD>
<TITLE> request.getParameterName()Ҏ使用实例</TITLE>
</HEAD>
<BODY>
<FORM METHOD=post ACTION="2.jsp">
<INPUT TYPE="text" NAME="gr1"><BR>
<INPUT TYPE="text" NAME="gr2"><BR>
<INPUT TYPE="text" NAME="gr3"><BR>
<INPUT TYPE="submit" value="提交">
<INPUT TYPE="reset" value="清除">
</FORM>
</FORM>
</BODY>
</HTML>
指向面
<%@page language="java"
contentType="text/html;charset=gb2312"
import="java.util.*"
%>
你刚才输入的内容是:<BR>
<%
Enumeration e=request.getParameterNames();
while(e.hasMoreElements()){
String parameterName=(String)e.nextElement();
String parameterValue=(String)request.getParameter(parameterName);
out.print("参数名称Q?+parameterName+"<BR>");
out.print("参数内容Q?+parameterValue+"<BR>");
}
%>
PSQEnumeration接口的APIQ?br />实现 Enumeration 接口的对象,它生成一pd元素Q一ơ生成一个。连l调?nextElement Ҏ返回一pd的连l元素?br />hasMoreElements ()
试此枚举是否包含更多的元素?br />nextElement ()
如果此枚丑֯象至还有一个可提供的元素,则返回此枚D的下一个元素?/p>
Request.getAttributeName()Ҏ实例
主页面:
<%@page language="java"
contentType="text/html;charset=gb2312"
import="java.util.*"
%>
<HTML>
<HEAD>
<TITLE> request.getAttributeName()Ҏ使用实例</TITLE>
</HEAD>
<BODY>
<jsp:include page="2.jsp" flush="true"/>
<%
Enumeration e=request.getAttributeNames();
while(e.hasMoreElements()){
String attributeName=(String)e.nextElement();
String attributeValue=(String)request.getAttribute(attributeName);
out.print("变量名称Q?+attributeName);
out.print("变量内容Q?+attributeValue+"<BR>");
}
%>
</FORM>
</FORM>
</BODY>
</HTML>
转向面
<%@page language="java"
contentType="text/html;charset=gb2312"
%>
<%
request.setAttribute("gr1","111");
request.setAttribute("gr2","222");
request.setAttribute("gr3","333");
%>
request.getRemoteAddr()Ҏ实例Q?
<%@page language="java"
contentType="text/html;charset=gb2312"
%>
<HTML>
<HEAD>
<TITLE> request.getRemoteAddr()Ҏ使用实例</TITLE>
</HEAD>
<BODY>
<B>你的IP地址Q?lt;/B>
<B><%=request.getRemoteAddr()%></B>
</FORM>
</FORM>
</BODY>
</HTML>
3、Response对象
response.setHeader()Ҏ|页自动h实例Q?
<%@page language="java"
contentType="text/html;charset=gb2312"
import="java.util.*"
%>
<HTML>
<HEAD>
<TITLE> responseh面实例</TITLE>
</HEAD>
<BODY>
<%
response.setHeader("refresh","3");
out.println(new Date().toLocaleString());
%>
</BODY>
</HTML>
response.sendRedirect();Ҏ实现面的蟩?
<%@page language="java"
contentType="text/html;charset=gb2312"
import="java.util.*"
%>
<HTML>
<HEAD>
<TITLE> response面跌{实例</TITLE>
</HEAD>
<BODY>
<%
response.sendRedirect("login.jsp");
%>
</BODY>
</HTML>
4、Application对象
在JSP服务器运行时刻,仅有一个Application对象Q它由服务器创徏Q也由服务器自动清除,
不能被用户创建和清除。我们只能创个Appliation对象的同步拷贝?
setAttribute(),getAttribute()和removeAttribute()Ҏ实例Q?
<%@page language="java"
contentType="text/html;charset=gb2312"
%>
<HTML>
<HEAD>
<TITLE> Application对象Ҏ实例</TITLE>
</HEAD>
<BODY>
<%
String username="rossini";
String password="126263";
application.setAttribute("username",username);
application.setAttribute("password",password);
out.println(application.getAttribute("username")+"<BR>");
out.println(application.getAttribute("password")+"<BR>");
application.removeAttribute("password");
out.println(application.getAttribute("password")+"<BR>");
%>
</BODY>
</HTML>
getAttributeNames()Ҏ实例Q?
<%@page language="java"
contentType="text/html;charset=gb2312"
import="java.util.*"
%>
<HTML>
<HEAD>
<TITLE> Application对象Ҏ实例</TITLE>
</HEAD>
<BODY>
<%
String username="rossini";
String password="126263";
application.setAttribute("username",username);
application.setAttribute("password",password);
Enumeration enum=application.getAttributeNames();
while(enum.hasMoreElements()){
String attrName=(String)enum.nextElement();
out.println(attrName+"----"+application.getAttribute(attrName)+"<BR>");
}
%>
</BODY>
</HTML>
5、Session对象
当用L陆网站,pȝؓ他生成一个独一无二的Session对象Q用以记录改用户的个Z?
Q一旦该用户退出网站,那么该Session对象会注销。Session对象可以l定若干个h信息?
者Java对象Q不同Session对象的同名变量是不会怺q扰的?
getValue(String name)、putValue(String name)、removeValue(String name)、getValueNames()
、getCreationTime()、getId()、getLastAccessedTime()、getMaxInactiveInterval()?
setMaxInactiveInterval()ҎQ?
LӞ
<%@page language="java"
contentType="text/html;charset=gb2312"
%>
<HTML>
<HEAD>
<TITLE> Session主页?lt;/TITLE>
</HEAD>
<BODY>
<%
String username="rossini";
String password="126263";
session.putValue("username",username);
session.putValue("password",password);
%>
<A HREF="2.jsp">指向W二?lt;/A>
</BODY>
</HTML>
转向面1
<%@page language="java"
contentType="text/html;charset=gb2312"
%>
<HTML>
<HEAD>
<TITLE> Session转向面1</TITLE>
</HEAD>
<BODY>
<%
String usr=(String)session.getValue("username");
String pwd=(String)session.getValue("password");
%>
<%=usr%><BR>
<%=pwd%><BR>
<%out.println("session create:"+session.getCreationTime());%><BR>
<%out.println("session id:"+session.getId());%><BR>
<%out.println("session last access:"+session.getLastAccessedTime());%><BR>
<%out.println("session 原来最大休眠时?"+session.getMaxInactiveInterval());%><BR>
<%session.setMaxInactiveInterval(session.getMaxInactiveInterval()+1);%><BR>
<%out.println("session 最新最大休眠时?"+session.getMaxInactiveInterval());%><BR
<%
String []name=session.getValueNames();
out.println("--------------"+"<BR>");
for(int i=0;i<name.length;i++)
{
out.println(session.getValue(name[i])+"<BR>");
}
%>
<%
session.removeValue("username");
%>
<A HREF="3.jsp">指向W三?lt;/A>
</BODY>
</HTML>
转向面2
<%@page language="java"
contentType="text/html;charset=gb2312"
%>
<HTML>
<HEAD>
<TITLE> Session转向面2</TITLE>
</HEAD>
<BODY>
<%
String usr=(String)session.getValue("username");
String pwd=(String)session.getValue("password");
%>
<%=usr%><BR>
<%=pwd%>
</BODY>
</HTML>
invalidate()Ҏ会会清除当前的session对象解除它和M参数或者JAVA对象的绑定关p?
1?/span>configureQ)Ҏ默认会在classpath下面Lhibernatev.cfg.xml
2?/span>支持带参数的讉KQ可以指?/span>hbm.xmlQ如Q?/span>
File file = new File(“d:\\cfg\\hibernate.xml”);
Configuration config = new Configuration().config(file);
Session的缓存:
1Q、充当蓄水池的作用,减少E序讉K数据库的ơ数?/span>
2Q、保证缓存中的数据与数据库同步,同步的具体情늜FlushMode是什?/span>
清理~存是指查看~存中的数据与数据库是否同步Q不同步发送更新语?/span>
FlushMode.AUTOQ?/span>Hibernate判断对象属性有没有改变Q是默认的清理模?/span>
FlushMode.COMMITQ在事务l束之前清理Session的缓存,其他M时候都不清理缓?/span>
FlushMode.NEVERQ除非强制调?/span>Session.flush()Q或则永不清理缓存。所作的修改只限与内?/span>
FlushMode.ALWAYSQ在每一个查询语句前都调?/span>flush()q行~存理Q这U模式经怸必要q且低效的?/span>
Hibernate定义q支持下列对象状?span lang="EN-US">(state):
· 瞬时(Transient) - ?tt>new操作W创建,且尚未与Hibernate Session 兌的对象被认定为瞬?span lang="EN-US">(Transient)
的。瞬?span lang="EN-US">(Transient)对象不会被持久化到数据库中,也不会被赋予持久化标?span lang="EN-US">(identifier)?如果瞬时(Transient)对象在程序中没有被引用,它会被垃圑֛收器(garbage collector)销毁?使用Hibernate Session可以其变ؓ持久(Persistent)状态?span lang="EN-US">(Hibernate会自动执行必要的SQL语句)· 持久(Persistent) - 持久(Persistent)的实例在数据库中有对应的记录Qƈ拥有一个持久化标识(identifier)。持?span lang="EN-US">(Persistent)的实例可能是刚被保存的,或刚被加载的Q无论哪一U,按定义,它存在于相关联的Session作用范围内?span lang="EN-US"> Hibernate会检到处于持久(Persistent)状态的对象的Q何改动,在当前操作单?span lang="EN-US">(unit of work)执行完毕时将对象数据(state)与数据库同步(synchronize)?开发者不需要手动执?tt>UPDATE。将对象从持?span lang="EN-US">(Persistent)状态变成瞬?span lang="EN-US">(Transient)状态同样也不需要手动执?tt>DELETE语句?span lang="EN-US">
· q(Detached) - 与持?span lang="EN-US">(Persistent)对象兌?tt>Session被关闭后Q对象就变ؓq(Detached)的?对脱?span lang="EN-US">(Detached)对象的引用依然有效,对象可l被修改。脱?span lang="EN-US">(Detached)对象如果重新兌到某个新?tt>Session上,会再ơ{变ؓ持久(Persistent)?span lang="EN-US">(?span lang="EN-US">Detached光的改动将被持久化到数据库)?q个功能使得一U编E模型,即中间会l用h考时?span lang="EN-US">(user think-time)的长旉q行的操作单?span lang="EN-US">(unit of work)的编E模型成为可能。我们称之ؓ应用E序事务Q即从用戯点看是一个操作单?span lang="EN-US">(unit of work)?span lang="EN-US">
立即索:
立即索的配置文g标识Wؓlazy=”false”Q表C?/span>Hibernate在数据库中取得字D值组装好一个对象后Q会立即再从数据库此对象多关联的对象Q如果这个关联的对象q有兌对象Q则再组装此兌对象?/span>
一对多和多对一兌对象则不适合立即索?/span>
延迟索:
立即索的配置文g标识Wؓlazy=”true”Q就是需要用到时才会d被关联的对象?/span>
预先抓取指的?/span>Hibernate通过select语句使用outer join来获得对象的兌实例或者关联集合?/span>
Hibernate2.x版本Q?/span>outer-join=”true”Q?/span>
Hibernate3.x版本Q?/span>fetch=”join”Q?/span>
<one-to-one name="cer" class="com.kissjava.Certificate" fetch="join" cascade="all"></one-to-one>Q?/span>1Q?/span>
<many-to-one name="team" column="team_id" class="com.kissjava.Team" fetch="join"></many-to-one>Q?/span>2Q?/span>
Q?/span>1Q一个一对一兌的对象属性,名ؓcerQ在得到Student对象Ӟ采用预先抓取得到cer对象Qƈ且联ؓallQ说?/span>Student的增加、删除及修改操作都会影响?/span>cer对象?/span>
Q?/span>2Q一个多对一兌的对象属性,名ؓteamQ在Student表中通过team_id?/span>team对象发生兌Q?/span>team的实体类?/span>TeamQ在取得Student实例Ӟ使用预先抓取得到team对象?/span>
1. 要看书?/strong>
在成千上万的
2. M码?br />
q也是我很喜Ƣ的一U方式。如果我q没有几q的专业~程
3. 写代码?/strong>
谨记Q要写大量的代码。从Ҏ上来Ԍ最好的
4. 与其他开发者交?br /> ?AppleQ微软,Google {大公司一L新闻描述的一P(与其他开发者交?可以让你解决一些复杂的问题。虽然这q不能让你感觉到自己已经成一个团队或是社区的成员Q但是这U方法可以让你接触到更多不同的想法?br /> 不同cd的项目要求不同的设计ҎQ代码技术,开发流E和设计思想。如果你工作在一个小团队里,你不必与太多的h接触Q只要在用户会议中扑ֈ一些h(来讨?卛_。如果这栯不行的话Q参与到在线论坛中与其他?q时你需要更努力地寻N质量的讨论内??/font>
6. 教会别h?br /> 相对于仅仅读代码之类的工作,教其他h学习可以让你更深入地学习某个技术,q种Ҏ有着非凡的效果。教会别人某个技术,同样也会让你更专注于q种技术,q且可以比别人更深层ơ地理解它。同样你也会面对一些问题?br /> “如果你不能向一个六岁的儿童解析清楚一个概念,那么其实是你q没有完全理解它?#8221;Albert Einstein说?br /> 教学场景可以是无Ih的Q与工作搭档一对一交流Q休息碰面,非正式周会,学习茶会Q教室,讨论发表会,{等。每周在相同理念开发者之间D办一?0分钟的非正式会议怎么P每周Q让几个人来׃们想要更深入了解话题Q向大家传授q些技术知识,q且展开讨论。如果你知道你将要向团队成员们传授正学学习的知识Q你是不是更惌了解q项技术的每个l节呢?
6. 收听|络电台?br /> 如果你有I闲的时_可以订阅|络电台节目。我现在最喜欢的编E节目就?.Net Rocks。这个节目还会做一些视频节目,叫做 dnrTV 。这样会让你x捕捉到最新最好的技术。一个h是不能学习到所有知识的Q而网l电台刚是一个学习了解广泛知识的途径?/font>
7. 阅读博客?br /> 博客q远比阅读者要多,但是其中有一些却是极其优U的。我q里不ƈ不是要推荐博客,因ؓ|络上已l有了够多的博客。这是与真正在开发你所喜欢和用的软g的开者联pȝ好方法?/font>
8. 学习新的语言?br />
即你已l在 C(++,#) / JAVA {语a上有很好的造诣Q仍然有很多其他可以解决问题的编E语a。学习新的语aQ是对你已有思维方式的挑战。这不仅仅是另一U语aQ更是对思维的重新架构。的,所有的语言最后都会被~译成汇~程序,但是qƈ不意味着
9. 学习不正的方式?br /> ?/font>了要学习应该怎么做,q要学习不应该怎么做。经帔R?Dailywtf.com Q学习你q不知道的经验与教训。学习适当的面向对象设计方式,代码写作方式Q和必须要写的代码等Q是很好的方式,但是如果不细心的话也ҎL不良习惯。学习认识不正确的思\是负责项目开发至关重要的一环?br /> l基癄对很多觉的不正确方式有十分透彻的分cR?/font>
10. 要谦虚?/strong>
学习Q意味着Q?br />
1、用更好的知识代替不完美的知识;
2、增长你所不知道的知识Q?br />
只有承认自己有所不Q才能有学习的动力。归根到底,是谦虚Q不对吗Q如果你开始认Z已经掌握了所有需要的知识Q那么你危险了。真正的学习是如饥似渴地q逐知识ƈ使其内在化,q需要很大的努力。我们都知道q一点,但是要必L怸断地提醒自己?br />
来自Qhttp://news.csdn.net/n/20080408/115015.html