70个JAVA问答!

1. 问:在JAVA与JSP中要调用一个LINUX上的脚本程序,或WINDOWS上的脚本程序,该怎么写?
答:System.getRuntime().exec("bash < aaa.sh");
2. 问:java中用什么表示双引号 
答:"/""
3. 问:如何在JSP程序里另起一个线程?
答:
JSP本身就是独立线程运行而不象CGI都是独立进程.
一般:
Thread t = new Thread("你的对象//");
t.start();就可以了.
要求你这个对象要实现runnable接口或继承thread.
4. 问:jsp如何获得客户端的IP地址? 
答:
request.getRemoteAddr()
看看各个webserver的API文档说明,一般都有自带的,resin和tomcat都有
5. 问:程序终止与输出终止
答:
程序中止:return;
输出中止:out.close();这一句相当于ASP的response.end
6. 问:jsp中如何得到上页的URL?
答:request.getHeader("referer");
7. 问:提交网页的网页过期功能是怎么做的?
答:response.setHader("Expires","0");
8. 问:在JSP网页中如何知道自已打开的页面的名称
答:
request.getRequestURI() ;//文件名/r
request.getRequestURL() ;//全部URL
9. 问:提交表单后验证没有通过,返回提交页面,如何使原提交页面中的数据保留?
答:javascript的go(-1)可以把上页的表单内容重新显示出来,但password域没有
10. 问:如何取得http的头信息?
答:request.getHader(headerName);
11. 问:&&和&的区别?
答:
&&是短路的与操作,也就是当地一个条件是false的时候,第二个条件不用执行
&相反,两个条件总是执行。
12. 问:将*以正弦曲线的一个周期显示出来
答:

public void paint(Graphics g)
 {
 for(int i=0;i<200;i++)
 g.drawString("*",i,(int)(Math.sin(i)*20)+50);
 }
 }


13. 问:浮点数相乘后结果不精确如100.0 * 0.6 结果等于 60.0004
答:
这不叫错误,float和double是这样实现的.如果要精确计算,java提供了一个/r
strictfp,它的计算遵循IEEE 754标准.而普通的float和double是由地平台浮点格式或硬件提/r
供的额外精度或表示范围。
14. 问:如何获得当前用的cursors的位置?
答:
int row = rs.getRow()就是当前指针行数,还有
isFrist();isBeforeFist();isLast();isAfterLast();可以测试是不是在方法名所说的位置
15. 问:表单成功提交了,点后退显示网页过期
答:
在<head></head>里面加以下代码/r

<META HTTP-EQUIV="Pragma" CONTENT="no-cache">
 <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache">
 <META HTTP-EQUIV="Expires" CONTENT="0">


或者
在表单页中加上

<%
 response.setHeader("Pragma","no-cache");
 response.setHeader("Cache-Control","no-cache");
 response.setDateHeader("Expires",0);
 %>


16. 问:接口的简单理解/r
答:接口为了规范,比如我在接口中定义了一个方法:
getData()
这是用来从不同的数据库中取数据的,就是JDBC的实现
对于用户,我不要知道每种数据库是如何做的,但我知道如何它们要实现这个接口就一定有这个方法可以供我调/r
用.这样SUN就把这个接口给各个数据库开发商,让他们自己实现.
但为什么不用继承而用接口哩,因为继承只能从一个你类继承,而接口可以实现多个,就是说我实现的子类有多/r
个规定好的接口中的功能.
这只是简单的理解,等你深入理解抽象的时候就知道抽象到抽象类时为什么还要再抽象到接口.
17. 问:怎样编写一个取消按钮(怎样返回上一个页面,象工具栏的后退按钮)?
答: 
javascript把每次浏览过的location都压到了一个栈中,这个栈就是
history,然后你如果要回到第几个页面它就做几次POP操作,把最后POP出来的那个LOCATION给你.
这就是JAVASCRIPT在实现history.go(-x)的原理.
18. 问:什么是回调?
答:
简单说,回调用不是让你去监听谁做完了什么事,而是谁做完了什么事就报告给你.
这就是回调用的思想.例子太多了,AWT的事件,SWING事件模型都是这样有.
还有多线程中,如果要控制线程数,不能总是查询每个线程是否结束,要在每个线程结束时让线程自己告诉主线
程我结束了,你可以开新的线程了.
19. 问:简要介绍一下compareTo方法
答:
compareTo方法是Comparable 接口必需实现的方法,只要实现Comparable 就可以用Arrays.srot()排序就象实
现Runnable接口的run就能Thread()一样.
20. 问:如何可以从别的Web服务器检索页, 然后把检索到的网页的HTML代码储存在一个变量中返回过来
答:这是一个简单的WEB ROBOT实现,用URL类实现从网页中抓内容,然后自己写一个分析程序从中找出新的URL,不断递归下去就行了. 
21. 问:applet中如何获得键盘的输入/r
答:application的System.in是当前系统的标准输入,applet因为安全的原因不可能读取当前系统(客户端)的标准输入,只能从它的ROOT组件的事件中,比如键盘事件中取得键值.
22. 问:怎样计算代码执行所花费的时间?
答:
代码开始取时间,结束后取时间,相减/r

long t1 = System.currentTimeMillis(); 
 / your code 
 long t2 = System.currentTimeMillis() ; 
 long time = t2-t1;


23. 问:如何获在程序中获得一个文件的ContentType?
答:

URL u = new URL("file:///aaa.txt");
 URLConnection uc = u.openConnection();
 String s = uc.getContentType();


24. 问:连接池的使用是建立很多连接池,还是一个连接池里用多个连接?
答:
只有在对象源不同的情况下才会发生多个池化,如果你只连一结一个数据源,永远不要用多个连结池.
所以连结池的初始化一定要做成静态的,而且应该在构造对象之前,也就是只有在类LOAD的时候,别的时候不应该有任何生成新的连结池的时候。
25. 问:JavaMail要怎么安装?
答:下载两个包,一个是javamail包,另一个是jaf包。下载完直接把这两个包不解压加到CLASSPATH。
26. 问:怎样把地址栏里的地址锁定?
答:把你的服务器的可访问目录索引选项关闭就行了,任何服务器都有一个conf文件,里面都有这个选项。
27. 问:在JAVA中怎么取得环境变量啊。比如: TEMP = C:/TEMP ?
答:String sss = System.getProperty(key)。
28. 问:怎样实现四舍五入,保留小数点后两位小数?
答:

import java.text.*;
 ...
 NumberFormat nf=NumberFormat.getNumberInstance();
 nf.setMaximumFractionDigits(2);
 nf.setMinimumFractionDigits(2);
 nf.format(numb);


29. 问:Applet和form如何通信?
答:
取得的参数传到param里面/r

<%
 String xxx = request.getParameter("xxx");
 %>
 <applet>
 <param value="<%=xxx%>">
 </applet>


30. 问:java-plug-in是什么?
答:Java Runtime Environment的插件。用来运行java程序。不需要什么特别的设置。等于你的机器里面有了jvm。
31. 问:WEB上面怎么样连接上一个EXCEL表格?
答:
定义页面得contentType="application/vnd.ms-excel",让页面以excel得形式打开。
同样也可以以word得形式打开:application/msword。
32. 问:怎样才能避免textarea字数限制?
答:是使用了FORM的默认方法的缘故,如果什么也不写默认是GET改用Post即可,在Form中定义mothod="post"。
33. 问:为什么加了<%@page contentType="text/html;charset=gb2312" %>插入数据库的中文,依然是乱码?
答:
这要从环境看,能显示说明你的JSP引擎没有问题,但写入数据库时你的JDBC能不能处理中文,同
一公司不同版本的JDBC都有支持中文和不支持中文的情况,RESIN自带的MYSQL JDBC就不支持,MM
的就支持,还有你的数据库类型是否支持中文?CHAR的一般支持,但是否用binary存储双字节码/r
34. 问:对于JFrame,hide(),show()与setVisibel()有什么区别吗?
答:
setVisible()从Component继承过来,而hide(),show()从Window里面继承过来。
Makes the Window visible. If the Window and/or its owner are not yet displayable, both are made 
displayable. The Window will be validated prior to being made visible. If the Window is already 
visible, this will bring the Window to the front.
区别在这。
36. 问:sendRedirect为什么不可以转到mms协议的地址的?response.sendRedirect("mms://missiah.adsldns.org:9394");
答:java平台目前实现的protocol中并没有mms,你可以取系统属性java.protocol.handler.pkgs看看它的值中有没有 mms,所以如果要想重定向到mms://host这样和URL,只有生成客户端的JAVASCRIPT让它来重定向/r
37. 问:JTable中怎样定义各个Columns和Width和怎样设置表格的内容靠做靠右或居中?
答:

TableColumn tc = table.getColumn("Name");//取得列名为“Name”的列Handle
 int currentWidth = tc.getPreferredWidth(); //取得该列当前的宽度
 tc.setPreferredWidth(200); //设置当前列宽/r
 tc.setMaxWidth(200); //设置该列最大宽度
 tc.setMinWidth(50); //设置该列最小宽度


38. 问:批操作是否可用于select语句?
答:批操作其实是指成批理更新的操作,绝对不可能用于select操作。
39. 问:为什么jsp路径太深文件名太长就无法读取文件?
答:path不能超过255长度,不然就找不到了.这是作业系统的事。
40. 问:如何让页面不保留缓存?
答:

<% 
 response.setHeader("Pragma","No-cache"); 
 response.setHeader("Cache-Control","no-cache"); 
 response.setDateHeader("Expires", 0); 
 %>

41. 问:我的applet code 中用到jbutton 时就出错是否由于ie不支持swing package 请问应怎么办?
答:JBUTTON是SWING基本包啊,只要把jdk/jre/lib/rt.jar放在classpath就行了.不要加载任何别的库。
42. 问:不知道java是否支持midi格式,如果支持,应该怎么把wave格式转换成midi格式?
答:目前还不行,可以看一下JMF三个版中对MIDI的格式支持是read only,而WAVE是read/write,MIDI只能播放,不能生成。
43. 问:在jsp里面防止用户直接输入url进去页面,应该怎么做呢?
答:
一是从web服务器控制,对某一目录的所有访问要通过验证.
二是在要访问的页面中加入控制.这个一般用session,也可以用请求状态码实现
44. 问:
例如后台有一计算应用程序(此程序运算起来很慢,可持续几分钟到几小时,这不管,主要是能激活它),客户机讲任务提交后,服务器对任务进行检测无误后将向服务器后台程序发送信息,并将其激活。要求如下:
1)首先将后台程序激活,让它执行此任务(比如,前台将计算的C代码提交上后,后台程序程序能马上调用,并将其运行)
2)要在前台JSP页面中显示运行过程信息(由于运行时间长,希望让客户看到运行过程中产生的信息)如何完成?
答:
活是可以的,运行一个shell让它去运行后台就行,但不可能取出运行信息,因为HTTP的超时限制不可能永远等你后台运行的,而且信息如果要动态实时推出来就得用SERVER PUSH技术。
45. 问:数据库是datetime 型 ,插入当前时间到数据库?
答:

java.sql.Date sqlDate = new java.sql.Date();
 PreparedStatement pstmt = conn.prepareStatement("insert into foo(time) values(?)");
 pstmt.setDate(1,sqlDate);
 pstmt.executeUpdate();


46. 问:怎样去掉字符串前后的空格。
答:String.trim()。
47. 问:session怎样存取int类型的变量?
答:

session.setAttribute("int", i+"");
 int i = Integer.parseInt(session.getAttribute("int"));


48. 问:在javascript中如何使输出的float类型的数据保留两位小数。
答:Math.round(aaaaa*100)/100。
49. 问:在bean种如何调用session。
答:
你可把session对象作为一个参数传给bean
在BEAN中定义HttpServletRequest request;HttpSession session;
然后 
session = request.getSession(false);
false为如果session为空,不建立新的session
将session作为参数传入.其实只要将request传入就可以
50. 问:如何把txt或word文件按原格式显示在jsp页面或servlet上?
答:
其实一个非常简单的解决方法就是在服务器的MIME中指点定TEXT和WORD的解释方式,然后用JSP或SERVLET生成它就行了,客户端就会自动调用相应程序打开你的文档。
如果是希望按原格式的显示在页面上,而不是调用其他程序打开那么你可以试试用WEBDEV协议,可以说这是MS的一个亮点.它是在WEB方式下打开文档,和共享一样.完全符合的要求。
51. 问:object的clone方法为什么不能直接调用?
答:
这个方法在object中是protected
为什么要把这个方法定义为protected,这是一个折中,它的目的是想知道你这个方法在Object里只是一个标记,而不是一个实现,比如/r

public class Object
 {
 .............
 protected Object clone()
 {}
 }


所以直接继承的clone()方法并不能做任何时,你要使用这个方法就要重载这个方法并放宽访问权限为public,或实现cloneable接口.
但它没法这样告诉你它没有真的实现,只好用protected 方法加以警示
52. 问:一个页面中如何刷新另外一个页面?
答:
要求是这些面页必须有关联,一是它们都有一个共同的顶层帧,也就是说是一个帧内的分级页面,当然可以是任意级,帧内再分帧也可以,另一个可能是当前窗口弹出的窗口,如果没有联系,那就不可能用一个页面刷新另一个页面.
帧内只要一级一级引用就行了.
比如在左帧中一个页面中写
top.right.location.reload();那么名为right的右帧中的页面就会刷新.
弹出的一样,用open时的名称刷新子窗口,子窗口用opener刷新主窗口
53. 问:如何在jsp中怎么样向客户端写cookies?
答:

Cookie coo = new Cookie(name, value);
 HttpServletResponse.addCookie(name);


54. 问:为什么jTextField1.setText("aaabbb");jTextField2.setText("AAABBB"); 得到的字体宽度不一样?
答:就是说如果不是指定为等宽字体,每个字体的宽度都是不一样的.因此JAVA中用FontMetrics 类来取字符宽度。
55. 问:String kk=application/octet-stream; name="G:/SMBCrack.exe";如何得到SMBCrack.exe?
答:
这应该是解析上传时候的二进制流得到的
这一行里面格式是固定的,取到name="后面的字符串,然后把";去掉。
然后取最后一个/后面的所有字符组成一个新字符串就行了。
56. 问:如何传值并不刷新页面?
答:
弹出一个页面进行值的选择或者输入,ok后使用将值传给原窗口,使用javascript关闭打开的窗口即可:
window.close();opener.focus();

57. 问:有一个字符串:“EF0C114EA4”,如何变为a[0] = 0xEF a[1] = 0x0C a[2] = 0x11 a[3] = 0x4E a[4] = 0xA4?
答:

String str="EF0C114EA4F";
 out.print(str+"<br>");
 int l=str.length()/2+str.length()%2,j=0,k=0;
 String[] a=new String[l];
 for(int i=0;i<l;i++){
 if(str.length()-j==1)
 k=str.length();
 else
 k=j+2;
 a="0x"+str.substring(j,k);
 out.print("a["+Integer.toString(i)+"]="+a+"<br>");
 j+=2;
 }


58. 问:怎样将一个int转换成一个四字节的byte数组?
答:

int x = 1234567;
 byte[] b = new byte[4];
 for(int i=0;i<b.length;i++)
 {
 b = (x >>( i*8)) & 0xFF;
 }


59. 问:indexOf()的使用需要注意什么?
答:参数是指从第几位(1,2,3,...)开始搜索,而返回值是指搜索到的位置(0,1,2,3.......)注意是从零算起的。
60. 问:在Java应用程序中如何动态的添加一个按钮?
答:
这里涉及一个组件重绘的问题,组件要先于panel被显示之处存在,如果一panel已经显示了,那么加在上面你能看到吗?但如果在同一个panel上, 先有button A,假如按下它加了button B,这时你如果使整个panel重给,那么A本身要重绘,它的事件监听就没有了,当然也就加不成B了,所以如果要先有另一个panel,当按A时把B加在这个panel上并重绘这个paenl,其实更好的方法是先把B加在panel中,同一个也行.把它setVisiable(flase),按A时设为 true。

61. 问:book mybook=new book(bookid);book是servlet,出错。
答:
book是servlet,能book mybook=new book(bookid); 
说明自己实现了servlet容器?不然,servlet能让你自己去调用?
servlet如果调用其实和EJB连1%的区别都没有,它们都是自己继承或实现一些接口,在这些父类或接口中实现了如果和容器/"打交道"的方法,然后容器调用这些方法来管理它,让它生成实例,池化,钝化,销毁,再生等.所以这样写是错误的。
62. 问:给定一个字符串5*(5+9)/7怎样计算出结果?
答:
可有两种方法
1。用堆栈完成
2。最简单的方法,不用编程,如果有任何一个数据库的化,
用select (5*(5+9)/7) from oneTable
63. 问:如何实现递交表单内容的加密解密?
答:
如果你用IE目前只能用SSL协议,这一层不要你考虑,否则只你用你自己的工具加密传输,接收后再解密友,至于如何加解,如果要和公认的系统结合,就用通用的MD5,RAS等公开算法,如果你只是自己传自己解,你随便按你的想法把数据加上一些东西,取回来按规则减掉这些东西,我敢保证除你自己没有任何人能知道解密方法.
64. 问:为什么Integer.parseInt("+1");会抛出NumberFormatException的异常?
答:因为"+"运行算在JAVA中被重载.系统无法确定你用的是算术加还是字符+。
这一点可以在JAVASCRIPT中更好地理解:

<form name="t"><input name=s value=1234></form>
 var a = document.t.s.value+1;


这时a = 12345,因为document.t.s.value作为字符串.
但var a = document.t.s.value-1;
a 就是1233,因为系统知道-运算肯定是算术运行.所以把document.t.s.value
转换成数字.

65. 问:hashCode() 有什么用为什么有时候需要覆盖Object里的hashcode()方法?
答:这就是这个对象的身份证啊,要不如何区分哪个对象。
66. 问:怎样在tomcat中实现一个定时执行的东东?
答:
在应用程序启动时自动运行。servlet2.3中定义了ServletListener,监听Servlet Context的启动或则关闭(可在配置文件中配置),启动时触发一个守护程序的运行(可以实现java.util.Timer或则 javax.swing.Timer).
67. 问:程序可以输出自己吗?
答:孔德悖论这个非常有名的法则.就是说任何程序都不可能输出自己.
68. 问:能够把字符转化成ASCII码?比如将 A 转化成 65?
答:

int a='A';
 out.println(a);


69. 问:如何区分输入的文字中的全角与半角?
答:由于不能分辨出全角和半角字符的值有什么规律,只好把全角符号牧举出来了.
70. 问:用户注册后的自动发信程序该怎么做?
答:
这种发信程序不考虑性能,因为不可能1秒就有一个人注册,我们说的考虑性能的发信程序是指上百万封信在队列里要不停发送的那种,象你这个随便怎么写一个程序都行,没有必要用JAVAMAIL.只要指定一个发信的服务器然后用cocket连它的25口就行了.
自己用SOCKET连SMTP的25口发一封信就好象两个邻居之间送一样东西,直接递过去得了,用JAVAMAIL,消息机制就是你把这个东西从邮局寄给你的邻居了.