| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 23353 人关注过本帖, 1 人收藏
标题:初学者请进!
只看楼主 加入收藏
vienna
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2005-3-6
收藏
得分:0 
支持!
2005-03-06 14:19
Brothong
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2004-11-17
收藏
得分:0 
感谢你的辛苦写作!
我是新手,看了你的东西觉得很受用!
再次谢谢你!
希望以后还有精彩的文章!
支持你!
2005-03-08 08:40
kingarden
Rank: 2
等 级:论坛游民
威 望:1
帖 子:517
专家分:40
注 册:2004-12-8
收藏
得分:0 
下面这些是整理大家的发言因为这些比较基础也很常见所以先整理出来希望新人来后查看,如果觉得这些有错误的地方请留言,我会修改这个帖子,第一次发布可能有很多不好的地方,希望大家给予帮助,谢谢拉

1.小弟我是个新手,用java编译时经常遇见一些看不懂的错误信息,谁可以告诉我该怎么办啊..谢谢了.... ? 答:碰到不懂的出错消息,就贴上来。 2.那位大侠能介绍一两本对Java初学者来说值得一看的书?? 答:Java大学教程,thinking in java,Java How to Program,Java核心技术等 3.请问高手,从哪里可以下载到比较好用的J2EE的开发环境 答:jboss www.jboss.org 3.*版本 4.* 4.Java里面如何将字符串转化为数字? 答:int temp=Integer.parseInt("12345");这样就ok了。 5.帮帮忙看我的这个applet为什么不能正常显示? import java.awt.*; import java.awt.event.*; import javax.swing.*; public class MathFloorTest extends JApplet implements ActionListener{ JLabel promptLabel,infoLabel; JTextField inputField,infoField; public void init(){ Container container = getContentPane(); container.setLayout(new FlowLayout()); promptLabel = new JLabel("Enter the number :"); inputField = new JTextField(10); inputField.addActionListener(this); container.add(promptLabel); container.add(inputField); infoLabel = new JLabel("The int that closed to number is :"); infoField = new JTextField(10); infoField.setEditable(false); container.add(promptLabel); container.add(inputField); } public void actionPerformed(ActionEvent actionEvent){ String numberStr = inputField.getText(); double number = Double.parseDouble(numberStr); int z = closedToNumber(number); infoField.setText(Integer.toString(z)); } public int closedToNumber(double x){ //int y = Double.valueOf(Math.floor(x + 0.5)).intValue(); int y = new Double(Math.floor(x + 0.5)).intValue(); return y; } } 运行这个applet只能显示 promptLabel和inputField,infoLabel和infoField却不能显示,请帮忙指出错误,先谢过了! 答: package demo; import java.awt.*; import java.awt.event.*; import javax.swing.*; public class MathFloorTest extends JApplet implements ActionListener { JLabel promptLabel,infoLabel; JTextField inputField,infoField; public void init() { Container container = getContentPane(); infoLabel = new JLabel("The int that closed to number is :"); promptLabel = new JLabel("Enter the number :"); inputField = new JTextField(10); infoField = new JTextField(10); container.setLayout(new FlowLayout()); inputField.addActionListener(this); infoField.setEditable(false); container.add(promptLabel); container.add(inputField); container.add(infoLabel); container.add(infoField); } public void actionPerformed(ActionEvent actionEvent) { String numberStr = inputField.getText(); double number = Double.parseDouble(numberStr); int z = closedToNumber(number); infoField.setText(Integer.toString(z)); } public int closedToNumber(double x) { //int y = Double.valueOf(Math.floor(x + 0.5)).intValue(); int y = new Double(Math.floor(x + 0.5)).intValue(); return y; } } 6.安装了j2ee1.4.2, javac可以编译源代码,但用java命令执行时提示以下错误: Error: could not open `C:\Program Files\Java\j2re1.4.1_02\lib\i386\jvm.cfg' 但是,用Jcreator可以运行。 答:不是XP对JAVA的支持问题,而是安装了JBuilder留下的一个问题!! 解决办法:注册表->HKEY_LOCAL_MACHINE->SOFTWARE\JAVASOFT\ 子目录下所有的JavaHome键值从JBuilder目录改到安装的JDK目录下即可。 7.建立一个简单的EJB来了解他的过程: 首先让我们来看一下,开发框架 这是一个非常简单的框架(别笑啊,简单也是框架啊!) servlet通过调用接口来访问实现了该接口的访问代理,访问代理与EJB进行了绑定 通过访问代理来访问EJB(类似与WebSphere的AccessBean的作用) 然后就建立工程吧,并配置服务器到开发环境(具体配置就不说了,很简单) 建立一个Bean类: package demo; import javax.ejb.SessionBean; import javax.ejb.SessionContext; import javax.ejb.CreateException; public class HelloBean implements SessionBean { SessionContext sessionContext; /*这是默认继承来的一些方法,用来创建,删除,激活,钝化用的 你要在这四个阶段内进行操作的话,可以在这里面写代码或间 接或直接的调用方法,来完成生命周期. */ public void ejbCreate() throws CreateException { //创建 } public void ejbRemove() { //删除 } public void ejbActivate() { //激活 } public void ejbPassivate() { //钝化 } /*用来设置会话上下文的*/ public void setSessionContext(SessionContext sessionContext) { this.sessionContext = sessionContext; } /*唯一的业务方法*/ public String helloWord() { return "hello world"; } } 建立远程访问接口: package demo; import javax.ejb.EJBObject; import java.rmi.RemoteException; public interface Hello extends EJBObject { /*用来给客户端调用的远程方法,所以要抛远程异常(rmi的原因)*/ public String helloWord() throws RemoteException; } 建立Home接口: package demo; import javax.ejb.EJBHome; import javax.ejb.CreateException; import java.rmi.RemoteException; public interface HelloHome extends EJBHome { /*用来创建Hello这个远程对象的,所以当然要抛创建异常和远程异常*/ public Hello create() throws CreateException, RemoteException; } 编写ejb-jar.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd"> <ejb-jar> <display-name>EJBModule</display-name> <enterprise-beans> <session> <display-name>Hello</display-name> .........显示名字 <ejb-name>Hello</ejb-name> .........ejb名字 <home>demo.HelloHome</home> .........home接口的完整路径名称 <remote>demo.Hello</remote> .........远程接口的完整路径名称 <ejb-class>demo.HelloBean</ejb-class> .........ejb类的完整路径名称 <session-type>Stateless</session-type> .........会话类型:无会话 <transaction-type>Container</transaction-type> .........容器管理的(也可以有bean来管理) </session> </enterprise-beans> <assembly-descriptor> <container-transaction> <method> <ejb-name>Hello</ejb-name> <method-name>*</method-name> </method> <trans-attribute>Required</trans-attribute> </container-transaction> </assembly-descriptor> </ejb-jar> 编写weblogic-ejb-jar.xml: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE weblogic-ejb-jar PUBLIC "-//BEA Systems, Inc.//DTD WebLogic 8.1.0 EJB//EN" "http://www.bea.com/servers/wls810/dtd/weblogic-ejb-jar.dtd"> <weblogic-ejb-jar> <weblogic-enterprise-bean> <ejb-name>Hello</ejb-name> .......ejb的名字 <jndi-name>Hello</jndi-name> .......jndi名字(很重要的靠他来找EJB) </weblogic-enterprise-bean> </weblogic-ejb-jar> 编写一个接口用来访问代理: package demo; public interface IHello { /*给前台用的接口*/ public String helloWorld(); } 编写访问代理: package demo; import javax.naming.Context; import javax.rmi.PortableRemoteObject; import java.util.Properties; import javax.naming.InitialContext; import javax.ejb.CreateException; import java.rmi.RemoteException; /*用来访问后台的访问代理*/ public class HelloImp implements IHello { private HelloHome helloHome = null; private String str = new String(""); /*通过构造方法来完成一些初始化操作*/ public HelloImp() { inint(); } /*初始化的方法*/ public void inint() { try { Context context = getInitialContext(); //获得上下文 Object ref = context.lookup("Hello"); //定位EJB /*获得Home对象*/ helloHome = (HelloHome) PortableRemoteObject.narrow(ref, HelloHome.class); } catch (Exception ex) { System.out.println("发生异常在:inint()类型为:" + ex); ex.printStackTrace(); } } private Context getInitialContext() throws Exception { String url = "t3://localhost:7001"; //访问地址 String user = null; //用户名 String password = null; //密码 Properties properties = null; //属性 try { properties = new Properties(); /*设置属性从上下文中获得的绑定值,地址等属性*/ properties.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory"); properties.put(Context.PROVIDER_URL, url); if (user != null) { properties.put(Context.SECURITY_PRINCIPAL, user); properties.put(Context.SECURITY_CREDENTIALS, password == null ? "" : password); } return new InitialContext(properties); } catch (Exception e) { System.out.println("发生异常的位置:getInitialContext()异常类型为:" + e); throw e; } } public HelloHome getHome() { return helloHome; //返回helloHome对象 } public String helloWorld() { try { /*调用ejb中的唯一业务方法helloWord()方法来完成业务*/ str = helloHome.create().helloWord(); return str; } catch (CreateException ex) { System.out.println("创建对象时发生异常"); ex.printStackTrace(); } catch (RemoteException ex) { System.out.println("访问远程调用时发生异常"); ex.printStackTrace(); } catch (Exception ex) { System.out.println("其他错误"); } return str; } } 编写测试servlet用来访问测试: package demo; import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class TestServlet extends HttpServlet { private static final String CONTENT_TYPE = "text/html; charset=GBK"; public void init() throws ServletException { } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType(CONTENT_TYPE); PrintWriter out = response.getWriter(); /*通过暴露给前台的接口来访问代理已调用映射的EJB方法*/ IHello service=new HelloImp(); String hello=service.helloWorld(); //调用接口中方法 out.print(hello); //输出测试结果,如果能在浏览器看到结果就代表访问EJB成功了 } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } public void destroy() { } }

〖ΦγЙ┅给梦一把梯子,现实与梦想之间的距离即可忽略,不可跨越的迢迢银河举步便可迈过Й┅Φ〗
2005-03-17 14:21
kingarden
Rank: 2
等 级:论坛游民
威 望:1
帖 子:517
专家分:40
注 册:2004-12-8
收藏
得分:0 
编写web.xml:
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.
&lt;web-app&gt;
  &lt;display-name&gt;WebModule&lt;/display-name&gt;
  &lt;servlet&gt;
    &lt;servlet-name&gt;testservlet&lt;/servlet-name&gt;              .....servlet名字
    &lt;servlet-class&gt;demo.TestServlet&lt;/servlet-class&gt;       .....servlet的完整路径名
  &lt;/servlet&gt;
  &lt;servlet-mapping&gt;
    &lt;servlet-name&gt;testservlet&lt;/servlet-name&gt;              .....servlet名字
    &lt;url-pattern&gt;/testservlet&lt;/url-pattern&gt;               .....servlet映射名字
  &lt;/servlet-mapping&gt;
&lt;/web-app&gt;
编写weblogic.xml:
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN" "http://www.
&lt;weblogic-web-app&gt;
  &lt;context-root&gt;WebModule&lt;/context-root&gt;                  ......web模型的名称
&lt;/weblogic-web-app&gt;
接下来启动服务器(下面时控制台信息):
G:\bea\user_projects\mydomain&gt;echo off
&lt;2005-2-26 下午23时47分05秒 CST&gt; &lt;Info&gt; &lt;WebLogicServer&gt; &lt;BEA-000377&gt; &lt;Starting WebLogic Server with Java HotSpot(TM) Client VM Version 1.4.1_02-er-20030219 from Sun Microsystems Inc.&gt;
&lt;2005-2-26 下午23时47分05秒 CST&gt; &lt;Info&gt; &lt;Configuration Management&gt; &lt;BEA-150016&gt; &lt;This server is being started as the administration server.&gt;
&lt;2005-2-26 下午23时47分05秒 CST&gt; &lt;Info&gt; &lt;Management&gt; &lt;BEA-141107&gt; &lt;Version: WebLogic Server 8.1  Thu Mar 20 23:06:05 PST 2003 246620
WebLogic XMLX Module 8.1  Thu Mar 20 23:06:05 PST 2003 246620 &gt;
&lt;2005-2-26 下午23时47分06秒 CST&gt; &lt;Notice&gt; &lt;Management&gt; &lt;BEA-140005&gt;
&lt;Loading domain configuration from configuration repository at G:\bea\user_projects\mydomain\.\config.xml.&gt;
&lt;2005-2-26 下午23时47分13秒 CST&gt; &lt;Notice&gt; &lt;Security&gt; &lt;BEA-090082&gt; &lt;Security initializing using security realm myrealm.&gt;
&lt;2005-2-26 下午23时47分14秒 CST&gt; &lt;Notice&gt; &lt;WebLogicServer&gt; &lt;BEA-000327&gt; &lt;Starting WebLogic Admin Server "myserver" for domain "mydomain"&gt;
&lt;2005-2-26 下午23时47分25秒 CST&gt; &lt;Notice&gt; &lt;WebLogicServer&gt; &lt;BEA-000331&gt; &lt;Started WebLogic Admin Server "myserver" for domain "mydomain" running in Development Mode&gt;
&lt;2005-2-26 下午23时47分25秒 CST&gt; &lt;Notice&gt; &lt;WebLogicServer&gt; &lt;BEA-000355&gt; &lt;Thread "ListenThread.Default" listening on port 7001, ip address 127.0.0.1&gt;
&lt;2005-2-26 下午23时47分25秒 CST&gt; &lt;Notice&gt; &lt;WebLogicServer&gt; &lt;BEA-000365&gt; &lt;Server state changed to RUNNING&gt;
&lt;2005-2-26 下午23时47分25秒 CST&gt; &lt;Notice&gt; &lt;WebLogicServer&gt; &lt;BEA-000360&gt; &lt;Server started in RUNNING mode&gt;                                                                                                                                       
然后部署EJB模型:(下面时控制台信息):
G:\bea\jdk141_02\bin\javaw  -classpath G:\bea\weblogic81\server\lib\weblogic_sp.jar;G:\bea\weblogic81\server\lib\weblogic.jar;G:\bea\weblogic81\server\lib\webservices.jar; weblogic.Deployer  -user system  -adminurl http://localhost:7001  -password 12345678  -activate  -name EJBModule -upload  -source G:/jbprojct/Demo/EJBModule.jar -targets myserver
Initiated Task: [0] [Deployer:149026]Deploy application EJBModule on myserver.

Task 0 completed: [Deployer:149026]Deploy application EJBModule on myserver.

Deployment completed on Server myserver
运行测试用servlet看看是否成功的调用了EJB:(下面时运行结果):
hello world
8.我在下载完j2sdk-1_4_2_07-windows-i586-p.exe后为什么无法安装,请问要用什么程序才能打开安装此文件
答:或者你没有下载完,或者你下载的有问题,sun的那个是会转发到其他的地方的,而且用flashget下载后是一个很奇怪的文件而不是那个规则的文件名。看一下你下载的文件名是什么。可能要改一下名字把最后改成.exe结尾的文件!
9.JSP连接数据大全
一、jsp连接Oracle8/8i/9i数据库(用thin模式)

testoracle.jsp如下:
&lt;%@ page contentType="text/html;charset=gb2312"%&gt;
&lt;%@ page import="java.sql.*"%&gt;
&lt;html&gt;
&lt;body&gt;
&lt;%Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
String url="jdbc:oracle:thin:@localhost:1521:orcl";
//orcl为你的数据库的SID
String user="scott";
String password="tiger";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%&gt;
您的第一个字段内容为:&lt;%=rs.getString(1)%&gt;
您的第二个字段内容为:&lt;%=rs.getString(2)%&gt;
&lt;%}%&gt;
&lt;%out.print("数据库操作成功,恭喜你\");%&gt;
&lt;%rs.close();
stmt.close();
conn.close();
%&gt;
&lt;/body&gt;
&lt;/html&gt;

二、jsp连接Sql Server7.0/2000数据库

testsqlserver.jsp如下:
&lt;%@ page contentType="text/html;charset=gb2312"%&gt;
&lt;%@ page import="java.sql.*"%&gt;
&lt;html&gt;
&lt;body&gt;
&lt;%Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=pubs";
//pubs为你的数据库的
String user="sa";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%&gt;
您的第一个字段内容为:&lt;%=rs.getString(1)%&gt;
您的第二个字段内容为:&lt;%=rs.getString(2)%&gt;
&lt;%}%&gt;
&lt;%out.print("数据库操作成功,恭喜你\");%&gt;
&lt;%rs.close();
stmt.close();
conn.close();
%&gt;
&lt;/body&gt;
&lt;/html&gt;

三、jsp连接DB2数据库

testdb2.jsp如下:
&lt;%@ page contentType="text/html;charset=gb2312"%&gt;
&lt;%@ page import="java.sql.*"%&gt;
&lt;html&gt;
&lt;body&gt;
&lt;%Class.forName("com.ibm.db2.jdbc.app.DB2Driver ").newInstance();
String url="jdbc:db2://localhost:5000/sample";
//sample为你的数据库名
String user="admin";
String password="";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%&gt;
您的第一个字段内容为:&lt;%=rs.getString(1)%&gt;
您的第二个字段内容为:&lt;%=rs.getString(2)%&gt;
&lt;%}%&gt;
&lt;%out.print("数据库操作成功,恭喜你\");%&gt;
&lt;%rs.close();
stmt.close();
conn.close();
%&gt;
&lt;/body&gt;
&lt;/html&gt;

四、jsp连接Informix数据库

testinformix.jsp如下:
&lt;%@ page contentType="text/html;charset=gb2312"%&gt;
&lt;%@ page import="java.sql.*"%&gt;
&lt;html&gt;
&lt;body&gt;
&lt;%Class.forName("com.informix.jdbc.IfxDriver").newInstance();
String url =
"jdbc:informix-sqli://123.45.67.89:1533/testDB:INFORMIXSERVER=myserver;
user=testuser;password=testpassword";
//testDB为你的数据库名
Connection conn= DriverManager.getConnection(url);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%&gt;
您的第一个字段内容为:&lt;%=rs.getString(1)%&gt;
您的第二个字段内容为:&lt;%=rs.getString(2)%&gt;
&lt;%}%&gt;
&lt;%out.print("数据库操作成功,恭喜你\");%&gt;
&lt;%rs.close();
stmt.close();
conn.close();
%&gt;
&lt;/body&gt;
&lt;/html&gt;

五、jsp连接Sybase数据库

testmysql.jsp如下:
&lt;%@ page contentType="text/html;charset=gb2312"%&gt;
&lt;%@ page import="java.sql.*"%&gt;
&lt;html&gt;
&lt;body&gt;
&lt;%Class.forName("com.sybase.jdbc.SybDriver").newInstance();
String url =" jdbc:sybase:Tds:localhost:5007/tsdata";
//tsdata为你的数据库名
Properties sysProps = System.getProperties();
SysProps.put("user","userid");
SysProps.put("password","user_password");
Connection conn= DriverManager.getConnection(url, SysProps);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%&gt;
您的第一个字段内容为:&lt;%=rs.getString(1)%&gt;
您的第二个字段内容为:&lt;%=rs.getString(2)%&gt;
&lt;%}%&gt;
&lt;%out.print("数据库操作成功,恭喜你\");%&gt;
&lt;%rs.close();
stmt.close();
conn.close();
%&gt;
&lt;/body&gt;
&lt;/html&gt;

六、jsp连接MySQL数据库

testmysql.jsp如下:
&lt;%@ page contentType="text/html;charset=gb2312"%&gt;
&lt;%@ page import="java.sql.*"%&gt;
&lt;html&gt;
&lt;body&gt;
&lt;%Class.forName("org.gjt.mm.mysql.Driver").newInstance();
String url ="jdbc:mysql://localhost/softforum?user=soft&amp;password=soft1234&amp;useUnicode=true&amp;characterEncoding=8859_1"
//testDB为你的数据库名
Connection conn= DriverManager.getConnection(url);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%&gt;
您的第一个字段内容为:&lt;%=rs.getString(1)%&gt;
您的第二个字段内容为:&lt;%=rs.getString(2)%&gt;
&lt;%}%&gt;
&lt;%out.print("数据库操作成功,恭喜你\");%&gt;
&lt;%rs.close();
stmt.close();
conn.close();
%&gt;
&lt;/body&gt;
&lt;/html&gt;

七、jsp连接PostgreSQL数据库

testmysql.jsp如下:
&lt;%@ page contentType="text/html;charset=gb2312"%&gt;
&lt;%@ page import="java.sql.*"%&gt;
&lt;html&gt;
&lt;body&gt;
&lt;%Class.forName("org.postgresql.Driver").newInstance();
String url ="jdbc:postgresql://localhost/soft"
//soft为你的数据库名
String user="myuser";
String password="mypassword";
Connection conn= DriverManager.getConnection(url,user,password);
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String sql="select * from test";
ResultSet rs=stmt.executeQuery(sql);
while(rs.next()) {%&gt;
您的第一个字段内容为:&lt;%=rs.getString(1)%&gt;
您的第二个字段内容为:&lt;%=rs.getString(2)%&gt;
&lt;%}%&gt;
&lt;%out.print("数据库操作成功,恭喜你\");%&gt;
&lt;%rs.close();
stmt.close();
conn.close();
%&gt;
&lt;/body&gt;
&lt;/html&gt;
10.请问win98下jdk环境变量如何设置??
答;  Windows下JAVA用到的环境变量主要有3个,JAVA_HOME、CLASSPATH、PATH。下面逐个分析。

JAVA_HOME指向的是JDK的安装路径,如x:\JDK_1.4.2,在这路径下你应该能够找到bin、lib等目录。值得一提的是,JDK的安装路径可以选择任意磁盘目录,不过建议你放的目录层次浅一点,如果你放的目录很深,比如x:\XXXXXX\xxxxx\XXXX\xxxx\XXXX\xxxx\XXXX\xxx……
那么,下面的步骤和以后的应用你都要受累了,呵呵。设置方法:
JAVA_HOME=x:\JDK_1.4.2

PATH环境变量原来Windows里面就有,你只需修改一下,使他指向JDK的bin目录,这样你在控制台下面编译、执行程序时就不需要再键入一大串路径了。设置方法是保留原来的PATH的内容,并在其中加上%JAVA_HOME%\bin (注,如果你对DOS批处理不了解,你可能不明白%%引起来的内容是什么意思;其实这里是引用上一步设定好的环境变量JAVA_HOME,你写成x:\JDK_1.4.2也是可以的;你可以打开一个控制台窗口,输入echo %JAVA_HOME%来看一下你的设置结果) :
PATH=%JAVA_HOME%\bin;%PATH%
同样,%PATH%是引用以前你设置的PATH环境变量,你照抄以前的值就行了。

CLASSPATH环境变量我放在最后面,是因为以后你出现的莫名其妙的怪问题80%以上都可能是由于CLASSPATH设置不对引起的,所以要加倍小心才行。
CLASSPATH=.;%JAVA_HOME%\lib\tools.jar
首先要注意的是最前面的".;",如果你看不清,我给你念念??句点分号。这个是告诉JDK,搜索CLASS时先查找当前目录的CLASS文件??为什么这样搞,这是由于LINUX的安全机制引起的,LINUX用户很明白,WINDOWS用户就很难理解(因为WINDOWS默认的搜索顺序是先搜索当前目录的,再搜索系统目录的,再搜索PATH环境变量设定的) ,所以如果喜欢盘根究底的朋友不妨研究一下LINUX。
为什么CLASSPATH后面指定了tools.jar这个具体文件?不指定行不行?显然不行,行的话我还能这么罗索嘛!:) 这个是由java语言的import机制和jar机制决定的,你可以查资料解决。


呵呵,具体的设定方法: win2k\xp用户右键点击我的电脑-&gt;属性-&gt;高级-&gt;环境变量,修改下面系统变量那个框里的值就行了。
win9x用户修改autoexec.bat文件,在其末尾加入:
set JAVA_HOME=x:\JDK_1.4.2
set PATH=%JAVA_HOME%\bin;%PATH%
set CLASSPATH=.;%JAVA_HOME%\lib\tools.jar
就可以了。
11.为什么VJ++不好啊?
答:VJ++是微软版本的java,很多地方根本不符合java规范
12.请教:怎么在,命令提示符下将*.jar文件打开?
答:jar -xvf yourfile.jar
13.请教:jdk/bin下的javaw,javap都是干什么用的?
答;http://www.

http://www.
14.问各位大侠一个很菜的问题:
class Drawing
{
    Drawing()
    {
        System.out.println("Drawing constructed!");
    }
}

public class Cartoon extends Drawing
{
    Cartoon()
    {
        System.out.println("Cartoon constructed!");
    }
   
    public static void main(String [] args)
    {
        Cartoon c=new Cartoon();
        System.out.println(c);
    }
}

〖ΦγЙ┅给梦一把梯子,现实与梦想之间的距离即可忽略,不可跨越的迢迢银河举步便可迈过Й┅Φ〗
2005-03-17 14:22
kingarden
Rank: 2
等 级:论坛游民
威 望:1
帖 子:517
专家分:40
注 册:2004-12-8
收藏
得分:0 
结果能出来,但是最后还会生成一行:Cartoon@12498b5 这是为什么啊? 答:System.out.println(c); 如果c为Stirng,int,float,...等类型,则会直接打印 如果c为对象的话,则会先调用这个对象的toString()方法得到一个String,再打印这个String. 所以上句相当于: String temp = c.toString(); System.out.println(temp); 对于任何一个我们自己编写的类,如果我们没有让它继承某个别的类,那么它就会默认的继承java.lang.Object类(实际上java里的所有类、不管是我们自己写的还是java语言自带的,都直接或者间接的继承了java.lang.Object)。 由于你写的类里没有覆写toString()方法,那么打印的时候就会调用java.lang.Object的方法,打印当前的对象的内存地址 15.如何实现贯穿整个系统的全局变量.例如:一个用户登录了,需要把用户及权限名放入变量内,当用户访问其他程序时需要检测该用户的权限.请名位高手指点! 答:使用静态成员变量,如 public class Test { public static String uid; } (注明:以上是转帖)

〖ΦγЙ┅给梦一把梯子,现实与梦想之间的距离即可忽略,不可跨越的迢迢银河举步便可迈过Й┅Φ〗
2005-03-17 14:24
mazzyboy
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2005-3-18
收藏
得分:0 
要是JAVAC 后生成CLASS文件了

就说明没出错误吧!
为什么有时不能执行呢?

我是木子!
2005-03-18 16:00
kingarden
Rank: 2
等 级:论坛游民
威 望:1
帖 子:517
专家分:40
注 册:2004-12-8
收藏
得分:0 
JAVAC表示编译成功。编译成功而不显示结果,我认为可能有以下两种情况:
一 .有可能是你输出结果为空,这样的话实际已执行,结果即为什么都不做。
二 ..若你的是APPLET程序,那么用JAVAC生成*.class文件后,运行JAVA  *.class也不会有结果的。

〖ΦγЙ┅给梦一把梯子,现实与梦想之间的距离即可忽略,不可跨越的迢迢银河举步便可迈过Й┅Φ〗
2005-03-21 14:10
kingarden
Rank: 2
等 级:论坛游民
威 望:1
帖 子:517
专家分:40
注 册:2004-12-8
收藏
得分:0 
对于这个系列里的问题,每个学Java的人都应该搞懂。当然,如果只是学Java玩玩就无所谓了。如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重归初学者行列。内容均来自于CSDN的经典老贴。 问题一:我声明了什么! String s = "Hello world!"; 许多人都做过这样的事情,但是,我们到底声明了什么?回答通常是:一个String,内容是“Hello world!”。这样模糊的回答通常是概念不清的根源。如果要准确的回答,一半的人大概会回答错误。 这个语句声明的是一个指向对象的引用,名为“s”,可以指向类型为String的任何对象,目前指向"Hello world!"这个String类型的对象。这就是真正发生的事情。我们并没有声明一个String对象,我们只是声明了一个只能指向String对象的引用变量。所以,如果在刚才那句语句后面,如果再运行一句: String string = s; 我们是声明了另外一个只能指向String对象的引用,名为string,并没有第二个对象产生,string还是指向原来那个对象,也就是,和s指向同一个对象。 问题二:"=="和equals方法究竟有什么区别? ==操作符专门用来比较变量的值是否相等。比较好理解的一点是: int a=10; int b=10; 则a==b将是true。 但不好理解的地方是: String a=new String("foo"); String b=new String("foo"); 则a==b将返回false。 根据前一帖说过,对象变量其实是一个引用,它们的值是指向对象所在的内存地址,而不是对象本身。a和b都使用了new操作符,意味着将在内存中产生两个内容为"foo"的字符串,既然是“两个”,它们自然位于不同的内存地址。a和b的值其实是两个不同的内存地址的值,所以使用"=="操作符,结果会是false。诚然,a和b所指的对象,它们的内容都是"foo",应该是“相等”,但是==操作符并不涉及到对象内容的比较。 对象内容的比较,正是equals方法做的事。 看一下Object对象的equals方法是如何实现的: boolean equals(Object o){ return this==o; } Object对象默认使用了==操作符。所以如果你自创的类没有覆盖equals方法,那你的类使用equals和使用==会得到同样的结果。同样也可以看出,Object的equals方法没有达到equals方法应该达到的目标:比较两个对象内容是否相等。因为答案应该由类的创建者决定,所以Object把这个任务留给了类的创建者。 看一下一个极端的类: Class Monster{ private String content; ... boolean equals(Object another){ return true;} } 我覆盖了equals方法。这个实现会导致无论Monster实例内容如何,它们之间的比较永远返回true。 所以当你是用equals方法判断对象的内容是否相等,请不要想当然。因为可能你认为相等,而这个类的作者不这样认为,而类的equals方法的实现是由他掌握的。如果你需要使用equals方法,或者使用任何基于散列码的集合(HashSet,HashMap,HashTable),请察看一下java doc以确认这个类的equals逻辑是如何实现的。 问题三:String到底变了没有? 没有。因为String被设计成不可变(immutable)类,所以它的所有对象都是不可变对象。请看下列代码: String s = "Hello"; s = s + " world!"; s所指向的对象是否改变了呢?从本系列第一篇的结论很容易导出这个结论。我们来看看发生了什么事情。在这段代码中,s原先指向一个String对象,内容是"Hello",然后我们对s进行了+操作,那么s所指向的那个对象是否发生了改变呢?答案是没有。这时,s不指向原来那个对象了,而指向了另一个String对象,内容为"Hello world!",原来那个对象还存在于内存之中,只是s这个引用变量不再指向它了。 通过上面的说明,我们很容易导出另一个结论,如果经常对字符串进行各种各样的修改,或者说,不可预见的修改,那么使用String来代表字符串的话会引起很大的内存开销。因为String对象建立之后不能再改变,所以对于每一个不同的字符串,都需要一个String对象来表示。这时,应该考虑使用StringBuffer类,它允许修改,而不是每个不同的字符串都要生成一个新的对象。并且,这两种类的对象转换十分容易。 同时,我们还可以知道,如果要使用内容相同的字符串,不必每次都new一个String。例如我们要在构造器中对一个名叫s的String引用变量进行初始化,把它设置为初始值,应当这样做: public class Demo { private String s; ... public Demo { s = "Initial value"; } ... } 而非 s = new String("Initial value"); 后者每次都会调用构造器,生成新对象,性能低下且内存开销大,并且没有意义,因为String对象不可改变,所以对于内容相同的字符串,只要一个String对象来表示就可以了。也就说,多次调用上面的构造器创建多个对象,他们的String类型属性s都指向同一个对象。 上面的结论还基于这样一个事实:对于字符串常量,如果内容相同,Java认为它们代表同一个String对象。而用关键字new调用构造器,总是会创建一个新的对象,无论内容是否相同。 至于为什么要把String类设计成不可变类,是它的用途决定的。其实不只String,很多Java标准类库中的类都是不可变的。在开发一个系统的时候,我们有时候也需要设计不可变类,来传递一组相关的值,这也是面向对象思想的体现。不可变类有一些优点,比如因为它的对象是只读的,所以多线程并发访问也不会有任何问题。当然也有一些缺点,比如每个不同的状态都要一个对象来代表,可能会造成性能上的问题。所以Java标准类库还提供了一个可变版本,即StringBuffer。 问题四:final关键字到底修饰了什么? final使得被修饰的变量"不变",但是由于对象型变量的本质是“引用”,使得“不变”也有了两种含义:引用本身的不变,和引用指向的对象不变。 引用本身的不变: final StringBuffer a=new StringBuffer("immutable"); final StringBuffer b=new StringBuffer("not immutable"); a=b;//编译期错误 引用指向的对象不变: final StringBuffer a=new StringBuffer("immutable"); a.append(" broken!"); //编译通过 可见,final只对引用的“值”(也即它所指向的那个对象的内存地址)有效,它迫使引用只能指向初始指向的那个对象,改变它的指向会导致编译期错误。至于它所指向的对象的变化,final是不负责的。这很类似==操作符:==操作符只负责引用的“值”相等,至于这个地址所指向的对象内容是否相等,==操作符是不管的。 理解final问题有很重要的含义。许多程序漏洞都基于此----final只能保证引用永远指向固定对象,不能保证那个对象的状态不变。在多线程的操作中,一个对象会被多个线程共享或修改,一个线程对对象无意识的修改可能会导致另一个使用此对象的线程崩溃。一个错误的解决方法就是在此对象新建的时候把它声明为final,意图使得它“永远不变”。其实那是徒劳的。 问题五:到底要怎么样初始化! 本问题讨论变量的初始化,所以先来看一下Java中有哪些种类的变量。 1. 类的属性,或者叫值域 2. 方法里的局部变量 3. 方法的参数 对于第一种变量,Java虚拟机会自动进行初始化。如果给出了初始值,则初始化为该初始值。如果没有给出,则把它初始化为该类型变量的默认初始值。 int类型变量默认初始值为0 float类型变量默认初始值为0.0f double类型变量默认初始值为0.0 boolean类型变量默认初始值为false char类型变量默认初始值为0(ASCII码) long类型变量默认初始值为0 所有对象引用类型变量默认初始值为null,即不指向任何对象。注意数组本身也是对象,所以没有初始化的数组引用在自动初始化后其值也是null。 对于两种不同的类属性,static属性与instance属性,初始化的时机是不同的。instance属性在创建实例的时候初始化,static属性在类加载,也就是第一次用到这个类的时候初始化,对于后来的实例的创建,不再次进行初始化。这个问题会在以后的系列中进行详细讨论。 对于第二种变量,必须明确地进行初始化。如果再没有初始化之前就试图使用它,编译器会抗议。如果初始化的语句在try块中或if块中,也必须要让它在第一次使用前一定能够得到赋值。也就是说,把初始化语句放在只有if块的条件判断语句中编译器也会抗议,因为执行的时候可能不符合if后面的判断条件,如此一来初始化语句就不会被执行了,这就违反了局部变量使用前必须初始化的规定。但如果在else块中也有初始化语句,就可以通过编译,因为无论如何,总有至少一条初始化语句会被执行,不会发生使用前未被初始化的事情。对于try-catch也是一样,如果只有在try块里才有初始化语句,编译部通过。如果在catch或finally里也有,则可以通过编译。总之,要保证局部变量在使用之前一定被初始化了。所以,一个好的做法是在声明他们的时候就初始化他们,如果不知道要出事化成什么值好,就用上面的默认值吧! 其实第三种变量和第二种本质上是一样的,都是方法中的局部变量。只不过作为参数,肯定是被初始化过的,传入的值就是初始值,所以不需要初始化。 问题六:instanceof是什么东东? instanceof是Java的一个二元操作符,和==,>,<是同一类东东。由于它是由字母组成的,所以也是Java的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据。举个例子: String s = "I AM an Object!"; boolean isObject = s instanceof Object; 我们声明了一个String对象引用,指向一个String对象,然后用instancof来测试它所指向的对象是否是Object类的一个实例,显然,这是真的,所以返回true,也就是isObject的值为True。 instanceof有一些用处。比如我们写了一个处理账单的系统,其中有这样三个类: public class Bill {//省略细节} public class PhoneBill extends Bill {//省略细节} public class GasBill extends Bill {//省略细节} 在处理程序里有一个方法,接受一个Bill类型的对象,计算金额。假设两种账单计算方法不同,而传入的Bill对象可能是两种中的任何一种,所以要用instanceof来判断: public double calculate(Bill bill) { if (bill instanceof PhoneBill) { //计算电话账单 } if (bill instanceof GasBill) { //计算燃气账单 } ... } 这样就可以用一个方法处理两种子类。 然而,这种做法通常被认为是没有好好利用面向对象中的多态性。其实上面的功能要求用方法重载完全可以实现,这是面向对象变成应有的做法,避免回到结构化编程模式。只要提供两个名字和返回值都相同,接受参数类型不同的方法就可以了: public double calculate(PhoneBill bill) { //计算电话账单 } public double calculate(GasBill bill) { //计算燃气账单 } 所以,使用instanceof在绝大多数情况下并不是推荐的做法,应当好好利用多态。

〖ΦγЙ┅给梦一把梯子,现实与梦想之间的距离即可忽略,不可跨越的迢迢银河举步便可迈过Й┅Φ〗
2005-03-31 17:37
kingarden
Rank: 2
等 级:论坛游民
威 望:1
帖 子:517
专家分:40
注 册:2004-12-8
收藏
得分:0 
以下是测试代码:

public class ceshiString{
static  String a="abc";
static  String b="abc";
static   String c=new String("abc");
public static void main(String args[ ])
    {
        if(a==b)System.out.println("a==b");
        if(a.equals(b)) System.out.println("a equals b");
        if(a.equals(c)) System.out.println("a equals c");
        if(a==c)        System.out.println("a==c");
    }
}

结果:
a==b
a equals b
a equals c

运行结果说明 a和b 是指向同一个对象“abc”,这说明“先程序在运行的时候会创建一个字符串缓冲池,当用这种方法:String s="abc"的时候。他会首先在缓冲池中找有没有相同的值,要是有的话就就将这个s指向已有的值。”是有道理的,而c 是另外一个对象

〖ΦγЙ┅给梦一把梯子,现实与梦想之间的距离即可忽略,不可跨越的迢迢银河举步便可迈过Й┅Φ〗
2005-03-31 17:39
kingarden
Rank: 2
等 级:论坛游民
威 望:1
帖 子:517
专家分:40
注 册:2004-12-8
收藏
得分:0 
正则表达式的总结: 匹配中文字符的正则表达式: [\u4e00-\u9fa5] 匹配双字节字符(包括汉字在内):[^\x00-\xff] 应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1) String.prototype.len=function(){return this.replace([^\x00-\xff]/g,"aa").length;} 匹配空行的正则表达式:\n[\s| ]*\r 匹配HTML标记的正则表达式:/<(.*)>.*<\/\1>|<(.*) \/>/ 匹配首尾空格的正则表达式:(^\s*)|(\s*$) 应用:javascript中没有像vbscript那样的trim函数,我们就可以利用这个表达式来实现,如下: String.prototype.trim = function() { return this.replace(/(^\s*)|(\s*$)/g, ""); } 利用正则表达式分解和转换IP地址: 下面是利用正则表达式匹配IP地址,并将IP地址转换成对应数值的javascript程序: function IP2V(ip) { re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g //匹配IP地址的正则表达式 if(re.test(ip)) { return RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1 } else { throw new Error("Not a valid IP address!") } } 不过上面的程序如果不用正则表达式,而直接用split函数来分解可能更简单,程序如下: var ip="10.100.20.168" ip=ip.split(".") alert("IP值是:"+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1)) 匹配Email地址的正则表达式:\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)* 匹配网址URL的正则表达式:http://([\w-]+\.)+[\w-]+(/[\w- ./?%&=]*)? 我原来在CSDN上发贴寻求一个表达式来实现去除重复字符的方法,最终没有找到,这是我能想到的最简单的实现方法。思路是使用后向引用取出包括重复的字符,再以重复的字符建立第二个表达式,取到不重复的字符,两者串连。这个方法对于字符顺序有要求的字符串可能不适用。 得用正则表达式从URL地址中提取文件名的javascript程序,如下结果为page1 s="http://www.9499.net/page1.htm"; s=s.replace(/(.*\/){0,}([^\.]+).*/ig,"$2") alert(s) 利用正则表达式限制网页表单里的文本框输入内容: 用正则表达式限制只能输入中文:onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))" 用正则表达式限制只能输入全角字符: onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')" onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))" 用正则表达式限制只能输入数字:onkeyup="value=value.replace(/[^\d]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))" 用正则表达式限制只能输入数字和英文:onkeyup="value=value.replace(/[\W]/g,'') "onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"

〖ΦγЙ┅给梦一把梯子,现实与梦想之间的距离即可忽略,不可跨越的迢迢银河举步便可迈过Й┅Φ〗
2005-03-31 17:59
快速回复:初学者请进!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022602 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved