手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>Java技术>列表

Java FAQ(新手必看)

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!

Bb=(B)a;
}
如果a实际上并不是B的实例,会抛出ClassCastException。所以请确保a确实是B的实
例。


Q5.13其实我不确定a是不是B的实例,能不能分情况处理?
答:可以使用instanceof操作符。例如
if(ainstanceofB)
{
Bb=(B)a;
}
else
{
...
}

Q5.14我在方法里修改了一个对象的值,但是退出方法后我发现这个对象的值没变!
答:很可能你把传入参数重赋了一个新对象,例如下列代码就会造成这种错误:
publicvoidfun1(Aa)//a是局部参数,指向了一个外在对象。
{
a=newA();//a指向了一个新对象,和外在对象脱钩了。如果你要让a作为
传出变量,
不要写这一句。
a.setAttr(attr);//修改了新对象的值,外在对象没有被修改。
}
基本类型也会出现这种情况。例如:
publicvoidfun2(inta)
{
a=10;//只作用于本方法,外面的变量不会变化。
}

六、java.util篇

Q6.1java能动态分配数组吗?
答:可以。例如intn=3;Language[]myLanguages=newLanguage[n];

Q6.2我怎么知道数组的长度?
答:用length属性。如上例中的myLanguages.length就为3。

Q6.3我还想让数组的长度能自动改变,能够增加/删除元素。
答:用顺序表--java.util.List接口。
你可以选择用ArrayList或是LinkedList,前者是数组实现,后者是链表实现。
例如:Listlist=newArrayList();或是Listlist=newLinkedList();。

Q6.4什么是链表?为什么要有ArrayList和LinkedList两种List?
答:请补习数据结构。

Q6.5我想用队列/栈。
答:用java.util.LinkedList。

Q6.6我希望不要有重复的元素。
答:用集合--java.util.Set接口。例如:Setset=newHashSet()。

Q6.7我想遍历集合/Map。
答:用java.util.Iterator。参见API。

Q6.8我还要能够排序。
答:用java.util.TreeSet。例如:Setset=newTreeSet()。放进去的元素会自动排


你需要为元素实现Comparable接口,还可能需要提供equals()方法,compareTo()方法,
h
ashCode()方法。

Q6.9但是我想给数组排序。
答:java.util.Arrays类包含了sort等实用方法。

Q6.10我想按不同方式排序。
答:为每种方式定义一个实现了接口Comparator的排序类并和Arrays或TreeSet综合运
用。


Q6.11Map有什么用?
答:存储key-value的关键字-值对,你可以通过关键字来快速存取相应的值。

Q6.12set方法没问题,但是get方法返回的是Object。
答:强制类型转换成你需要的类型。参见Q5.12。

Q6.13ArrayList和Vector有什么不同?HashMap和Hashtable有什么不同?
答:ArrayList和HashMap是多线程不安全的,在多个线程中访问同一个ArrayList对象可

会引起冲突并导致错误。
而Vector和Hashtable是多线程安全的,即使在多个线程中同时访问同一个Vector对象也

会引起差错。
看起来我们更应该使用Vector和Hashtable,但是实际上Vector和Hashtable的性能太
差,
所以如果你不在多线程中使用的话,还是应该用ArrayList和HashMap。

Q6.14我要获得一个随机数。
答:使用java.util.Random类。

Q6.15我比较两个String总是false,但是它们明明都是"abc"!
答:比较String一定要使用equals或equalsIgnoreCase方法,不要使用==!
==比较的是两个引用(变量)是否指向了同一个对象,而不是比较其内容。

Q6.16我想修改一个String但是在String类中没找到编辑方法。
答:使用StringBuffer类。
Stringstr=".......";//待处理的字符串
StringBufferbuffer=newStringBuffer(str);//使用该字符串初始化一个
StringBuf
fer
buffer.append("...");//调用StringBuffer的相关API来编辑字符串
Stringstr2=buffer.toString();//获得编辑后的字符串。
另外,如果你需要将多个字符串连接起来,请尽量避免使用 号直接连接,而是使用
Strin
gBuffer.append()方法。

Q6.17我想处理日期/时间。
答:使用java.util.Date类。你可以使用java.text.SimpleDateFormat类来在String和
Da
te间互相转换。
SimpleDateFormatformatter=newSimpleDateFormat("yyyy-MM-ddHH:mm:ss");//

定日期格式
Datedate=formatter.parse("2003-07-2618:30:35");//将符合格式的String转换

Date
Strings=formatter.format(date);//将Date转换为符合格式的String
关于定义日期格式的详细信息请参见API。

上一篇: Java类的初始化顺序很重要
下一篇: SQL 优化之 oracle物化视图

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!