??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
研究了半天发现其实很单,人家已经做的很好了;只需要加jpda 4个字母就可以了;
修改startup.bat 扑ֈcall "%EXECUTABLE%" start %CMD_LINE_ARGS% 改ؓ(f)call "%EXECUTABLE%" jpda start %CMD_LINE_ARGS% 卛_Q这样在java的方法里面修改代码就不需要费时费力的重新加蝲上下文,也不需要重新登录?/span>
如果需要修改debug端口Q(默认8000Q,改catalina.bat 中set JPDA_ADDRESS=8000 处;
启动命o(h)方式如下Q?/span>
echo Usage: catalina ( commands ... )
echo commands:
echo debug Start Catalina in a debugger
echo debug -security Debug Catalina with a security manager
echo jpda start Start Catalina under JPDA debugger
echo run Start Catalina in the current window
echo run -security Start in the current window with security manager
echo start Start Catalina in a separate window
echo start -security Start in a separate window with security manager
echo stop Stop Catalina
echo version What version of tomcat are you running?
]]>
]]>
2、下载页面右侧的“Eclipse Preferences(EPF)-for Eclipse Import”。直接右键另存ؓ(f)Q就可以下蝲到这个配色方案的epf文g?/span>
3、将该epf文g存放在系l某目录下,我放在了E:\eclipse-color-themes?/span>
打开myeclipse->File->Import->General->Preferences.打开?nbsp;E:\eclipse-color-themes\theme-1.epf写入Q其他项默认。点d成就ok了!
------------------------------------------------------------------------
Eclipse默认配色的恢复方法:(x)
Ҏ(gu)1Q?/strong>
?nbsp;myeclipse的工作空间目录,也就是workspaceQ找到这个目录下“.metadata\.plugins\org.eclipse.core.runtime”Q这里也?setting文g夹,把里面文件全部删除;换成同事的默认的配色Ҏ(gu)?setting文g夏V?/span>
Ҏ(gu)2Q?/strong>
如果你在workspace中没有什么重要的东西Q可以切换workspace或者将整个workspace 下的.metadata删除Q就可以恢复?/span>
原文地址Q?a >http://blog.csdn.net/jkunzhang/article/details/8027778
对于q个pd里的问题Q每个学Java的h都应该搞懂。当?dng)如果只是学Java玩玩无所谓了。如果你认ؓ(f)自己已经越初学者了Q却不很懂这些问题,请将你自己重归初学者行列。内容均来自于CSDN的经典老脓(chung)?nbsp;
问题一Q我声明了什么!
String s = "Hello world!";
许多人都做过q样的事情,但是Q我们到底声明了什么?回答通常是:(x)一个StringQ内Ҏ(gu)“Hello world!”。这hp的回答通常是概念不清的Ҏ(gu)。如果要准确的回{,一半的人大概会(x)回答错误?nbsp;
q?个语句声明的是一个指向对象的引用Q名?#8220;s”Q可以指向类型ؓ(f)String的Q何对象,目前指向"Hello world!"q个Stringcd的对象。这是真正发生的事情。我们ƈ没有声明一个String对象Q我们只是声明了一个只能指向String对象?引用变量。所以,如果在刚才那句语句后面,如果再运行一句:(x)
String string = s;
我们是声明了另外一个只能指向String对象的引用,名ؓ(f)stringQƈ没有W二个对象生,stringq是指向原来那个对象Q也是Q和s指向同一个对象?nbsp;
问题二:(x)"=="和equalsҎ(gu)I竟有什么区别?
==操作W专门用来比较变量的值是否相{。比较好理解的一Ҏ(gu)Q?nbsp;
int a=10;
int b=10;
则a==b是true?nbsp;
但不好理解的地方是:(x)
String a=new String("foo");
String b=new String("foo");
则a==b返回false?nbsp;
?据前一帖说q,对象变量其实是一个引用,它们的值是指向对象所在的内存地址Q而不是对象本w。a和b都用了new操作W,意味着在内存中生两个内??foo"的字W串Q既然是“两个”Q它们自然位于不同的内存地址。a和b的值其实是两个不同的内存地址的|所以?=="操作W,l果?x)?false。诚?dng)a和b所指的对象Q它们的内容都是"foo"Q应该是“相等”Q但?=操作Wƈ不涉?qing)到对象内容的比较?nbsp;
对象内容的比较,正是equalsҎ(gu)做的事?nbsp;
看一下Object对象的equalsҎ(gu)是如何实现的Q?nbsp;
boolean equals(Object o){
return this==o;
}
Object 对象默认使用?=操作W。所以如果你自创的类没有覆盖equalsҎ(gu)Q那你的cM用equals和?=?x)得到同L(fng)l果。同样也可以?出,Object的equalsҎ(gu)没有辑ֈequalsҎ(gu)应该辑ֈ的目标:(x)比较两个对象内容是否相等。因为答案应该由cȝ创徏者决定,所?Object把这个Q务留l了cȝ创徏者?nbsp;
看一下一个极端的c:(x)
Class Monster{
private String content;
...
boolean equals(Object another){ return true;}
}
我覆盖了equalsҎ(gu)。这个实C(x)D无论Monster实例内容如何Q它们之间的比较永远q回true?nbsp;
所 以当你是用equalsҎ(gu)判断对象的内Ҏ(gu)否相{,请不要想当然。因为可能你认ؓ(f)相等Q而这个类的作者不q样认ؓ(f)Q而类的equalsҎ(gu)的实现是׃ 掌握的。如果你需要用equalsҎ(gu)Q或者用Q何基于散列码的集合(HashSet,HashMap,HashTableQ,请察看一下java doc以确认这个类的equals逻辑是如何实现的?nbsp;
问题三:(x)String到底变了没有Q?nbsp;
没有。因为String被设计成不可?immutable)c,所以它的所有对象都是不可变对象。请看下列代码:(x)
String s = "Hello";
s = s + " world!";
s 所指向的对象是否改变了呢?从本pdW一的l论很容易导个结论。我们来看看发生了什么事情。在q段代码中,s原先指向一个String对象Q内??Hello"Q然后我们对sq行?操作Q那么s所指向的那个对象是否发生了改变呢?{案是没有。这Ӟs不指向原来那个对象了Q而指向了另一?String对象Q内容ؓ(f)"Hello world!"Q原来那个对象还存在于内存之中,只是sq个引用变量不再指向它了?nbsp;
通过上面的说 明,我们很容易导出另一个结论,如果l常对字W串q行各种各样的修改,或者说Q不可预见的修改Q那么用String来代表字W串的话?x)引起很大的内存开 销。因为String对象建立之后不能再改变,所以对于每一个不同的字符Ԍ都需要一个String对象来表C。这Ӟ应该考虑使用 StringBufferc,它允怿改,而不是每个不同的字符串都要生成一个新的对象。ƈ且,q两U类的对象{换十分容易?nbsp;
同时Q我们还可以知道Q如果要使用内容相同的字W串Q不必每ơ都new一个String。例如我们要在构造器中对一个名叫s的String引用变量q行初始化,把它讄为初始|应当q样做:(x)
public class Demo {
private String s;
...
public Demo {
s = "Initial Value";
}
...
}
而非
s = new String("Initial Value");
?者每ơ都?x)调用构造器Q生成新对象Q性能低下且内存开销大,q且没有意义Q因为String对象不可改变Q所以对于内容相同的字符Ԍ只要一?String对象来表C就可以了。也pQ多ơ调用上面的构造器创徏多个对象Q他们的Stringcd属性s都指向同一个对象?nbsp;
上面的结Zq样一个事实:(x)对于字符串常量,如果内容相同QJava认ؓ(f)它们代表同一个String对象。而用关键字new调用构造器QL?x)创Z个新的对象,无论内容是否相同?nbsp;
?于ؓ(f)什么要把Stringc设计成不可变类Q是它的用途决定的。其实不只StringQ很多Java标准cd中的c都是不可变的。在开发一个系l的时候, 我们有时候也需要设计不可变c,来传递一l相关的|q也是面向对象思想的体现。不可变cL一些优点,比如因ؓ(f)它的对象是只ȝQ所以多U程q发讉K也不 ?x)有M问题。当然也有一些缺点,比如每个不同的状态都要一个对象来代表Q可能会(x)造成性能上的问题。所以Java标准cdq提供了一个可变版本,?StringBuffer?nbsp;
问题四:(x)final关键字到底修C什么?
final使得被修饰的变量"不变"Q但是由于对象型变量的本质是“引用”Q?#8220;不变”也有了两U含义:(x)引用本n的不变,和引用指向的对象不变?nbsp;
引用本n的不变:(x)
final StringBuffer a=new StringBuffer("immutable");
final StringBuffer b=new StringBuffer("not immutable");
a=b;//~译期错?nbsp;
引用指向的对象不变:(x)
final StringBuffer a=new StringBuffer("immutable");
a.append(" broken!"); //~译通过
?见,final只对引用?#8220;?#8221;(也即它所指向的那个对象的内存地址)有效Q它q引用只能指向初始指向的那个对象,改变它的指向?x)导致编译期错误。至?它所指向的对象的变化Qfinal是不负责的。这很类?=操作W:(x)==操作W只负责引用?#8220;?#8221;相等Q至于这个地址所指向的对象内Ҏ(gu)否相{,==操作 W是不管的?nbsp;
理解final问题有很重要的含义。许多程序漏z都Z?---final只能保证引用永远指向固定?象,不能保证那个对象的状态不变。在多线E的操作?一个对象会(x)被多个线E共享或修改Q一个线E对对象无意识的修改可能?x)导致另一个用此对象的线E崩 溃。一个错误的解决Ҏ(gu)是在此对象新徏的时候把它声明ؓ(f)finalQ意图得它“永远不变”。其实那是徒劳的?nbsp;
问题五:(x)到底要怎么样初始化Q?nbsp;
本问题讨论变量的初始化,所以先来看一下Java中有哪些U类的变量?nbsp;
1. cȝ属性,或者叫值域
2. Ҏ(gu)里的局部变?nbsp;
3. Ҏ(gu)的参?nbsp;
对于W一U变量,Java虚拟Z(x)自动q行初始化。如果给Z初始|则初始化初始倹{如果没有给出,则把它初始化cd变量的默认初始倹{?nbsp;
intcd变量默认初始gؓ(f)0
floatcd变量默认初始gؓ(f)0.0f
doublecd变量默认初始gؓ(f)0.0
booleancd变量默认初始gؓ(f)false
charcd变量默认初始gؓ(f)0(ASCII?
longcd变量默认初始gؓ(f)0
所有对象引用类型变量默认初始gؓ(f)nullQ即不指向Q何对象。注意数l本w也是对象,所以没有初始化的数l引用在自动初始化后其g是null?nbsp;
?于两U不同的cd性,static属性与instance属性,初始化的时机是不同的。instance属性在创徏实例的时候初始化Qstatic属性在 cd载,也就是第一ơ用到这个类的时候初始化Q对于后来的实例的创建,不再ơ进行初始化。这个问题会(x)在以后的pd中进行详l讨论?nbsp;
?于第二种变量Q必L地q行初始化。如果再没有初始化之前就试图使用它,~译器会(x)抗议。如果初始化的语句在try块中或if块中Q也必须要让它在W一?使用前一定能够得到赋倹{也是_(d)把初始化语句攑֜只有if块的条g判断语句中编译器也会(x)抗议Q因为执行的时候可能不W合if后面的判断条Ӟ如此一?初始化语句就不会(x)被执行了Q这p反了局部变量用前必须初始化的规定。但如果在else块中也有初始化语句,可以通过~译Q因为无论如何,L臛_一 条初始化语句?x)被执行Q不?x)发生用前未被初始化的事情。对于try-catch也是一P如果只有在try块里才有初始化语句,~译部通过。如果在 catch或finally里也有,则可以通过~译。MQ要保证局部变量在使用之前一定被初始化了。所以,一个好的做法是在声明他们的时候就初始化他 们,如果不知道要Z化成什么值好Q就用上面的默认值吧Q?nbsp;
其实W三U变量和W二U本质上是一L(fng)Q都是方法中的局部变量。只不过作ؓ(f)参数Q肯定是被初始化q的Q传入的值就是初始|所以不需要初始化?nbsp;
问题六:(x)instanceof是什么东东?
instanceof是Java的一个二元操作符Q和==Q?gt;Q?lt;是同一cM东。由于它是由字母l成的,所以也是Java的保留关键字。它的作用是试它左边的对象是否是它双的类的实例,q回booleancd的数据。D个例子:(x)
String s = "I AM an Object!";
boolean isObject = s instanceof Object;
我们声明了一个String对象引用Q指向一个String对象Q然后用instancof来测试它所指向的对象是否是Objectcȝ一个实例,昄Q这是真的,所以返回trueQ也是isObject的gؓ(f)True?nbsp;
instanceof有一些用处。比如我们写了一个处理̎单的pȝQ其中有q样三个c:(x)
public class Bill {//省略l节}
public class PhoneBill extends Bill {//省略l节}
public class GasBill extends Bill {//省略l节}
在处理程序里有一个方法,接受一个Billcd的对象,计算金额。假设两U̎单计方法不同,而传入的Bill对象可能是两U中的Q何一U,所以要用instanceof来判断:(x)
public double calculate(Bill bill) {
if (bill instanceof PhoneBill) {
//计算?sh)话账?nbsp;
}
if (bill instanceof GasBill) {
//计算燃气账单
}
...
}
q样可以用一个方法处理两U子cR?nbsp;
然而,q种做法通常被认为是没有好好利用面向对象中的多态性。其实上面的功能要求用方法重载完全可以实玎ͼq是面向对象变成应有的做法,避免回到l构化编E模式。只要提供两个名字和q回值都相同Q接受参数类型不同的Ҏ(gu)可以了Q?nbsp;
public double calculate(PhoneBill bill) {
//计算?sh)话账?nbsp;
}
public double calculate(GasBill bill) {
//计算燃气账单
}
所以,使用instanceof在绝大多数情况下q不是推荐的做法Q应当好好利用多态?/span>
java方向?qing)学习(fn)方?/span>
java分成J2MEQ移动应用开发)(j)QJ2SEQ桌面应用开发)(j)QJ2EE(Web企业U应?Q所以javaq不是单机版的,只是面向对象语言。徏议如果学?fn)java体系的话可以q样d?fn)?x)
*W一阶段QJava基础Q包括java语法Q面向对象特征,常见APIQ集合框Ӟ
*W二阶段Qjava界面~程Q包括AWTQ事件机ӞSWINGQ这个部分也可以跌Q用的时候再看都能来?qing)?nbsp;
*W三阶段Qjava APIQ输入输出,多线E,|络~程Q反注解等Qjava的精华部分;
*W四阶段Q数据库SQL基础Q包括增删改查操作以?qing)多表查询?nbsp;
*W五阶段QJDBC~程Q包括JDBC原理QJDBCq接库,JDBC APIQ虽然现在Hibernate比JDBC要方便许多,但是JDBC技术仍然在使用QJDBC思想ؓ(f)重要Q?nbsp;
*W六阶段QJDBC深入理解高Ҏ(gu):(x)包括数据库连接池Q存储过E,触发器,CRM思想Q?nbsp;
*W七阶段QHTML语言学习(fn)Q包括HTML标签Q表单标{以?qing)CSSQ这是Web应用开发的基础Q?nbsp;
*W八阶段QJavaScript脚本语言Q包括javaScript语法和对象,p两个斚w的内容;
*W九(ji)阶段QDOM~程Q包括DOM原理Q常用的DOM元素以及(qing)比较重要的DOM~程思想Q?nbsp;
*W十阶段QServlet开发,从此开始踏入java开发的重要一步,包括XMLQTomcat服务器的安装使用操作QHTTP协议单理解,Servlet API{,q个是java web开发的基础?nbsp;
*W十一阶段QJSP开发:(x)JSP语法和标{,自定义标{,EL,JSTL库了解以?qing)MVC三层架构的设计模式理念;
*W十二阶D:(x)AJAX开发:(x)AJAX原理Q请求响应处理,AJAX开发库Q?nbsp;
*W十三阶D:(x)轻量U框Ӟ三大框架之一Struts框架的学?fn),自此t入java web开发的_֍部分Q包括Struts体系架构Q各U组Ӟ标签库和扩展性的学习(fn)Q?nbsp;
*W十四阶D:(x)Hibernate框架学习(fn)Q三大框架之一Q包括检索映技术,多表查询技术,~存技术以?qing)性能斚w的优化;
*W十五阶D:(x)Spring框架的学?fn),三大框架之一Q包括了IOC,AOP,DataSourceQ事务,SSH集成以及(qing)JPA集成Q?nbsp;
*最后呢Q还有些java的技术,包括EJB3.0{,可以选择学习(fn)Q与三大轻量U框架相比,EJB是当之无愧的重量?br />一般大安知道ArrayList和LinkedList的大致区别:(x)
1.ArrayList是实CZ动态数l的数据l构QLinkedListZ链表的数据结构?/span>
2.对于随机讉Kget和setQArrayList觉得优于LinkedListQ因为LinkedList要移动指针?/span>
3.对于新增和删除操作add和removeQLinedList比较占优势,因ؓ(f)ArrayList要移动数据?/span>
ArrayList和LinkedList 是两个集? c,用于存储一pd的对象引?references)。例如我们可以用ArrayList来存储一pd的String或者Integer。那? ArrayList和LinkedList在性能上有什么差别呢Q什么时候应该用ArrayList什么时候又该用LinkedList呢?
一Q时间复 杂度
首先一点关键的是,ArrayList的内 部实现是Z基础的对象数l的Q因此,它用getҎ(gu)讉K列表中的L一个元素时 (random access)Q它的速度要比LinkedList快。LinkedList中的getҎ(gu)是按照顺序从列表的一端开始检查,直到另外一端。对 LinkedList而言Q访问列表中的某个指定元素没有更快的Ҏ(gu)了?/span>
假设我们有一个很大的列表Q它里面的元素已 l排好序了,q个列表可能是ArrayListcd 的也可能是LinkedListcd的,现在我们对这个列表来q行二分查找(binary search)Q比较列表是ArrayList和LinkedList时的查询速度Q看下面的程序:(x)
我得到的输出 是:(x)ArrayList消耗时_(d)(x)15
LinkedList消耗时_(d)(x)2596
q个l果不是固定的,但是基本?ArrayList? 旉要明昑ְ于LinkedList的时间。因此在q种情况下不宜用LinkedList。二分查找法使用的随?random access){略Q而LinkedList是不支持快速的随机讉K的。对一个LinkedList做随问所消耗的旉与这个list的大是成比? 的。而相应的Q在ArrayList中进行随问所消耗的旉是固定的?
q是否表明ArrayListL?LinkedList性能要好呢?qƈ不一定,在某些情? 下LinkedList的表现要优于ArrayListQ有些算法在LinkedList中实现时效率更高。比方说Q利? Collections.reverseҎ(gu)对列表进行反转时Q其性能p好些?
看这样一个例子,加入我们有一个列表,要对其进行大量的插入和删除操作,在这U情况下 LinkedList是一个较好的选择。请看如下一个极端的例子Q我们重复的在一个列表的开端插入一个元素:(x)
q时我的输出l果是:(x)ArrayList耗时Q?463
LinkedList耗时Q?5
q和前面一个例子的l果截然相反Q当一个元 素被加到ArrayList的最开端时Q所有已l存在的元素都会(x)? U,q就意味着数据Ud和复制上的开销。相反的Q将一个元素加到LinkedList的最开端只是简单的未这个元素分配一个记录,然后调整两个q接。在 LinkedList的开端增加一个元素的开销是固定的Q而在ArrayList的开端增加一个元素的开销是与ArrayList的大成比例的?/span>
二.I间?杂度
在LinkedList中有一个私有的内部c,定义如下Q?/span>
每个Entry对象 reference列表中的一个元素,同时q有在LinkedList中它的上一个元素和下一个元素。一个有1000个元素的LinkedList对象? ?000个链接在一L(fng)Entry对象Q每个对象都对应于列表中的一个元素。这L(fng)话,在一个LinkedListl构中将有一个很大的I间开销Q因? 它要存储q?000个Entity对象的相关信息?/span>
ArrayList使用一个内|的数组来存 储元素,q个数组的v始容量是10.当数l需要增长时Q新的容量按 如下公式获得Q新定w=(旧容?3)/2+1Q也是说每一ơ容量大概会(x)增长50%。这意味着Q如果你有一个包含大量元素的ArrayList对象Q? 那么最l将有很大的I间?x)被费掉,q个费是由ArrayList的工作方式本w造成的。如果没有够的I间来存放新的元素,数组不得不被重新进行分 配以便能够增加新的元素。对数组q行重新分配Q将?x)导致性能急剧下降。如果我们知道一个ArrayList会(x)有多个元素Q我们可以通过构造方法来指定 定w。我们还可以通过trimToSizeҎ(gu)在ArrayList分配完毕之后L费掉的I间?/span>
三.ȝ
ArrayList和LinkedList在性能上各 有优~点Q都有各自所适用的地方,ȝ说来可以描述如下Q?/span>
1Q对ArrayList?LinkedList而言Q在列表末尾增加一个元素所q开销都是固定的。对 ArrayList而言Q主要是在内部数l中增加一,指向所d的元素,偶尔可能?x)导致对数组重新q行分配Q而对LinkedList而言Q这个开销? l一的,分配一个内部Entry对象?/span>
2Q在ArrayList?中间插入或删除一个元素意味着q个列表中剩余的元素都会(x)被移动;而在LinkedList的中间插入或删除一个元素的开销是固定的?/span>
3QLinkedList?支持高效的随机元素访问?/span>
4QArrayList的空 间浪费主要体现在在list列表的结N留一定的定wI间Q而LinkedList的空间花费则体现在它的每一个元素都需要消耗相当的I间
可以q样_(d)(x)当操作是在一?数据的后面添加数据而不是在前面或中?q且需要随机地讉K其中的元素时,使用ArrayList?x)提供比较好的性能Q当你的操作是在一列数据的前面或中 间添加或删除数据,q且按照序讉K其中的元素时,应该用LinkedList了?/span>