javaGrowing

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            92 隨筆 :: 33 文章 :: 49 評論 :: 0 Trackbacks
          <2006年2月>
          2930311234
          567891011
          12131415161718
          19202122232425
          2627281234
          567891011

          常用鏈接

          留言簿(12)

          隨筆分類(84)

          隨筆檔案(92)

          文章分類(32)

          文章檔案(33)

          相冊

          收藏夾(1)

          ajax

          java

          java專家論壇

          linux

          Oracle

          PHP

          sap

          xml

          其他

          好站鏈接

          英語學習

          軟件下載

          電子書

          搜索

          積分與排名

          最新隨筆

          最新評論

          閱讀排行榜

          評論排行榜

          代碼與編程題
          135
          、寫一個Singleton出來
          Singleton模式主要作用是保證在Java應用程序中,一個類Class只有一個實例存在。
          一般Singleton模式通常有幾種種形式:
          第一種形式定義一個類,它的構造函數為private的,它有一個staticprivate的該類變量,在類初始化時實例話,通過一個publicgetInstance方法獲取對它的引用,繼而調用其中的方法。

          public class Singleton {
          private Singleton(){}
                //在自己內部定義自己一個實例,是不是很奇怪?
                //注意這是private 只供內部調用
                private static Singleton instance = new Singleton();
                //這里提供了一個供外部訪問本class的靜態方法,可以直接訪問  

                public static Singleton getInstance() {
                  return instance;   

                } 
              } 
              
          第二種形式

          public class Singleton { 
            
          private static Singleton instance = null;
            
          public static synchronized Singleton getInstance() {
            //這個方法比上面有所改進,不用每次都進行生成對象,只是第一次     

            //使用時生成實例,提高了效率!
            if (instance==null)
              instance
          new Singleton();
          return instance; 
            


          其他形式
          :
          定義一個類,它的構造函數為private的,所有方法為static的。

          一般認為第一種形式要更加安全些 
          136、繼承時候類的執行順序問題,一般都是選擇題,問你將會打印出什么?
          :父類:
          package test;
          public class  FatherClass
          {
              public FatherClass()
           {
            System.out.println("FatherClass Create");
           }
          }
          子類:
          package test;
          import test.FatherClass;
          public class  ChildClass extends FatherClass
          {
           public ChildClass()
           {
            System.out.println("ChildClass Create");
           }
           public static void main(String[] args)
           {
            FatherClass fc = new FatherClass();
            ChildClass cc = new ChildClass();
           }
          }
          輸出結果:

          C:\>java test.ChildClass
          FatherClass Create
          FatherClass Create
          ChildClass Create

          137、內部類的實現方式?
          答:示例代碼如下:
          package test;
          public class  OuterClass
          {
           private class InterClass
           {
            public InterClass()
            {
             System.out.println("InterClass Create");
            }
           }
           public OuterClass()
           {
            InterClass ic = new InterClass();
            System.out.println("OuterClass Create");
           }
           public static void main(String[] args)
           {
            OuterClass oc = new OuterClass();
           }
          }
          輸出結果:
          C:\>java test/OuterClass
          InterClass Create
          OuterClass Create
          再一個例題:

          public class OuterClass {
            private double d1 = 1.0;
              //insert code here
          }
          You need to insert an inner class declaration at line 3. Which two inner class declarations are

          valid?(Choose two.)
          A. class InnerOne{
               public static double methoda() {return d1;}
             }
          B. public class InnerOne{
               static double methoda() {return d1;}
             }
          C. private class InnerOne{
               double methoda() {return d1;}
             }
          D. static class InnerOne{
               protected double methoda() {return d1;}
             }
          E. abstract class InnerOne{
               public abstract double methoda();
             }
          說明如下:

          .靜態內部類可以有靜態成員,而非靜態內部類則不能有靜態成員。 AB
          .靜態內部類的非靜態成員可以訪問外部類的靜態變量,而不可訪問外部類的非靜態變量;return d1 出錯。

          D
          .非靜態內部類的非靜態成員可以訪問外部類的非靜態變量。 C 正確
          .答案為CE

          138Java 的通信編程,編程題(或問答),用JAVA SOCKET編程,讀服務器幾個字符,再寫入本地顯示?
          :Server端程序:
          package test;
          import java.net.*;
          import java.io.*;

          public class Server
          {
           private ServerSocket ss;
           private Socket socket;
           private BufferedReader in;
           private PrintWriter out;
           public Server()
           {
            try
            {
             ss=new ServerSocket(10000);
             while(true)
             {
              socket = ss.accept();
              String RemoteIP = socket.getInetAddress().getHostAddress();
              String RemotePort = ":"+socket.getLocalPort();
              System.out.println("A client come in!IP:"+RemoteIP+RemotePort);
              in = new BufferedReader(new

          InputStreamReader(socket.getInputStream()));
              String line = in.readLine();
              System.out.println("Cleint send is :" + line);
              out = new PrintWriter(socket.getOutputStream(),true);
              out.println("Your Message Received!");
              out.close();
              in.close();
              socket.close();
             }
            }catch (IOException e)
            {
             out.println("wrong");
            }
           }
           public static void main(String[] args)
           {
            new Server();
           }
          };
          Client
          端程序
          :
          package test;
          import java.io.*;
          import java.net.*;

          public class Client
          {
           Socket socket;
           BufferedReader in;
           PrintWriter out;
           public Client()
           {
            try
            {
             System.out.println("Try to Connect to 127.0.0.1:10000");
             socket = new Socket("127.0.0.1",10000);
             System.out.println("The Server Connected!");
             System.out.println("Please enter some Character:");
             BufferedReader line = new BufferedReader(new

          InputStreamReader(System.in));
             out = new PrintWriter(socket.getOutputStream(),true);
             out.println(line.readLine());
             in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
             System.out.println(in.readLine());
             out.close();
             in.close();
             socket.close();
            }catch(IOException e)
            {
             out.println("Wrong");
            }
           }
           public static void main(String[] args)
           {
            new Client();
           }
          };

          139、用JAVA實現一種排序,JAVA類實現序列化的方法(二種) 如在COLLECTION框架中,實現比較要實現什么樣的接口?
          :用插入法進行排序代碼如下
          package test;
          import java.util.*;
          class  InsertSort
          {
           ArrayList al;
           public InsertSort(int num,int mod)
           {
            al = new ArrayList(num);
            Random rand = new Random();
            System.out.println("The ArrayList Sort Before:");
            for (int i=0;i<num ;i++ )
            {
             al.add(new Integer(Math.abs(rand.nextInt()) % mod + 1));
             System.out.println("al["+i+"]="+al.get(i));
            }
           }
           public void SortIt()
           {
            Integer tempInt;
            int MaxSize=1;
            for(int i=1;i<al.size();i++)
            {
                 tempInt = (Integer)al.remove(i);
              if(tempInt.intValue()>=((Integer)al.get(MaxSize-1)).intValue())
              {
               al.add(MaxSize,tempInt);
               MaxSize++;
               System.out.println(al.toString());
              } else {
               for (int j=0;j<MaxSize ;j++ )
               {
                if

          (((Integer)al.get(j)).intValue()>=tempInt.intValue())
                {
                 al.add(j,tempInt);
                 MaxSize++;
                 System.out.println(al.toString());
                 break;
                }
               }
              }
            }
            System.out.println("The ArrayList Sort After:");
            for(int i=0;i<al.size();i++)
            {
             System.out.println("al["+i+"]="+al.get(i));
            }
           }
           public static void main(String[] args)
           {
            InsertSort is = new InsertSort(10,100);
            is.SortIt();
           }
          }
          140
          、編程:編寫一個截取字符串的函數,輸入為一個字符串和字節數,輸出為按字節截取的字符串。 但是要保證漢字不被截半個,如ABC”4,應該截為AB”,輸入ABCDEF”6,應該輸出為ABC”而不是ABC+漢的半個

          答:代碼如下:
          package test;

          class  SplitString
          {
           String SplitStr;
           int SplitByte;
           public SplitString(String str,int bytes)
           {
            SplitStr=str;
            SplitByte=bytes;
            System.out.println("The String is:'"+SplitStr+"';SplitBytes="+SplitByte);
           }
           public void SplitIt()
           {
            int loopCount;
            

          loopCount=(SplitStr.length()%SplitByte==0)?(SplitStr.length()/SplitByte):(SplitStr.length()/Split

          Byte+1);
            System.out.println("Will Split into "+loopCount);
            for (int i=1;i<=loopCount ;i++ )
            {
             if (i==loopCount){
              

          System.out.println(SplitStr.substring((i-1)*SplitByte,SplitStr.length()));
             } else {
              

          System.out.println(SplitStr.substring((i-1)*SplitByte,(i*SplitByte)));
             }
            }
           }
           public static void main(String[] args)
           {
            SplitString ss = new SplitString("test
          dddsaf中男大3443n中國43中國人

          0ewldfls=103",4);
            ss.SplitIt();
           }
          }

          141JAVA多線程編程。 JAVA寫一個多線程程序,如寫四個線程,二個加1,二個對一個變量減一,輸出。
          希望大家補上,謝謝

          142、可能會讓你寫一段JdbcOracle的程序,并實現數據查詢.
          :程序如下:
          package hello.ant;
          import java.sql.*;
          public class  jdbc
          {
           String dbUrl="jdbc:oracle:thin:@127.0.0.1:1521:orcl";
           String theUser="admin";
           String thePw="manager";
           Connection c=null;
           Statement conn;
           ResultSet rs=null;
           public jdbc()
           {
            try{
              Class.forName("oracle.jdbc.driver.OracleDriver").newInstance();
                    c = DriverManager.getConnection(dbUrl,theUser,thePw);
              conn=c.createStatement();
            }catch(Exception e){
             e.printStackTrace();
            }
           }
           public boolean executeUpdate(String sql)
           {
             try
             {
               conn.executeUpdate(sql);
               return true;
             }
             catch (SQLException e)
             {
               e.printStackTrace();
               return false;
             }
           }
           public ResultSet executeQuery(String sql)
           {
             rs=null;
             try
             {
               rs=conn.executeQuery(sql);
             }
             catch (SQLException e)
             {
               e.printStackTrace();
             }
             return rs;
           }
           public void close()
           {
             try
             {
               conn.close();
               c.close();
             }
             catch (Exception e)
             {
               e.printStackTrace();
             }
           }
           public static void main(String[] args)
           {
            ResultSet rs;
            jdbc conn = new jdbc();
            rs=conn.executeQuery("select * from test");
            try{
            while (rs.next())
            {
             System.out.println(rs.getString("id"));
             System.out.println(rs.getString("name"));
            }
            }catch(Exception e)
            {
             e.printStackTrace();
            }
           }
          }

          143ORACLE大數據量下的分頁解決方法。一般用截取ID方法,還有是三層嵌套方法。
          :一種分頁方法
          <%
            int i=1;
            int numPages=14;
            String pages = request.getParameter("page") ;
            int currentPage = 1;
            currentPage=(pages==null)?(1):{Integer.parseInt(pages)}
            sql = "select count(*) from tables";
            ResultSet rs = DBLink.executeQuery(sql) ;
            while(rs.next()) i = rs.getInt(1) ;
            int intPageCount=1;
            intPageCount=(i%numPages==0)?(i/numPages):(i/numPages+1);
            int nextPage ;
            int upPage;
            nextPage = currentPage+1;
            if (nextPage>=intPageCount) nextPage=intPageCount;
            upPage = currentPage-1;
            if (upPage<=1) upPage=1;
            rs.close();
            sql="select * from tables";
            rs=DBLink.executeQuery(sql);
            i=0;
            while((i<numPages*(currentPage-1))&&rs.next()){i++;}
          %>
          //
          輸出內容
          //
          輸出翻頁連接
          合計:<%=currentPage%>/<%=intPageCount%><a href="List.jsp?page=1">第一頁</a><a

          href="List.jsp?page=<%=upPage%>">上一頁</a>
          <%
            for(int j=1;j<=intPageCount;j++){
            if(currentPage!=j){
          %>
            <a href="list.jsp?page=<%=j%>">[<%=j%>]</a>
          <%
            }else{
            out.println(j);
            }
            }
          %>
          <a href="List.jsp?page=<%=nextPage%>">
          下一頁</a><a href="List.jsp?page=<%=intPageCount%>">最后頁

          </a>

          144、用jdom解析xml文件時如何解決中文問題?如何解析?
          :看如下代碼,用編碼方式加以解決
          package test;
          import java.io.*;
          public class DOMTest
          {
           private String inFile = "c:\\people.xml";
           private String outFile = "c:\\people.xml"; 
           public static void main(String args[])
           {
               new DOMTest();
              }
           public DOMTest()
           {
            try
               { 
                javax.xml.parsers.DocumentBuilder builder =
                 

          javax.xml.parsers.DocumentBuilderFactory.newInstance().newDocumentBuilder();
                org.w3c.dom.Document doc = builder.newDocument();
                org.w3c.dom.Element root = doc.createElement("
          老師
          ");
                org.w3c.dom.Element wang = doc.createElement("
          ");
             org.w3c.dom.Element liu = doc.createElement("
          ");
                wang.appendChild(doc.createTextNode("
          我是王老師
          "));
                root.appendChild(wang);
                doc.appendChild(root);
                javax.xml.transform.Transformer transformer =
                 javax.xml.transform.TransformerFactory.newInstance().newTransformer();
                transformer.setOutputProperty(javax.xml.transform.OutputKeys.ENCODING, "gb2312");
                transformer.setOutputProperty(javax.xml.transform.OutputKeys.INDENT, "yes");  

             
                transformer.transform(new javax.xml.transform.dom.DOMSource(doc),
                      new

          javax.xml.transform.stream.StreamResult(outFile));
               }
               catch (Exception e)
               {
                System.out.println (e.getMessage());
               }
              }
          }

          145、編程用JAVA解析XML的方式.
          :SAX方式解析XMLXML文件如下:
          <?xml version="1.0" encoding="gb2312"?>
          <person>
            <name>
          王小明</name>
            <college>
          信息學院
          </college>  
            <telephone>6258113</telephone>
            <notes>
          ,1955年生,博士,95年調入海南大學
          </notes>
           </person>
           
          事件回調類
          SAXHandler.java
           import java.io.*;
          import java.util.Hashtable;
          import org.xml.sax.*;
          public class SAXHandler extends HandlerBase
            {
            private Hashtable table = new Hashtable();
            private String currentElement = null;
            private String currentValue = null;
            public void setTable(Hashtable table)
              {
              this.table = table;
              }
            public Hashtable getTable()
              {
              return table;
              }
            public void startElement(String tag, AttributeList attrs)
            throws SAXException
              {
              currentElement = tag;
              }
            public void characters(char[] ch, int start, int length)
            throws SAXException
              {
              currentValue = new String(ch, start, length);
              }
            public void endElement(String name) throws SAXException
              {
              if (currentElement.equals(name))
                table.put(currentElement, currentValue);
              }
            }
          JSP
          內容顯示源碼
          ,SaxXml.jsp:
          <HTML>
          <HEAD>
          <TITLE>
          剖析XML文件
          people.xml</TITLE>
          </HEAD>
          <BODY>
          <%@ page errorPage="ErrPage.jsp"
          contentType="text/html;charset=GB2312" %>
          <%@ page import="java.io.*" %>
          <%@ page import="java.util.Hashtable" %>
          <%@ page import="org.w3c.dom.*" %>
          <%@ page import="org.xml.sax.*" %>
          <%@ page import="javax.xml.parsers.SAXParserFactory" %>
          <%@ page import="javax.xml.parsers.SAXParser" %>
          <%@ page import="SAXHandler" %>
          <%
          File file = new File("c:\\people.xml");
          FileReader reader = new FileReader(file);
          Parser parser;
          SAXParserFactory spf = SAXParserFactory.newInstance();
          SAXParser sp = spf.newSAXParser();
          SAXHandler handler = new SAXHandler();
          sp.parse(new InputSource(reader), handler);
          Hashtable hashTable = handler.getTable();
          out.println("<TABLE BORDER=2><CAPTION>
          教師信息表
          </CAPTION>");
          out.println("<TR><TD>
          姓名
          </TD>" + "<TD>" +
            (String)hashTable.get(new String("name")) + "</TD></TR>");
          out.println("<TR><TD>
          學院
          </TD>" + "<TD>" +
            (String)hashTable.get(new String("college"))+"</TD></TR>");
          out.println("<TR><TD>
          電話
          </TD>" + "<TD>" +
            (String)hashTable.get(new String("telephone")) + "</TD></TR>");
          out.println("<TR><TD>
          備注
          </TD>" + "<TD>" +
            (String)hashTable.get(new String("notes")) + "</TD></TR>");
          out.println("</TABLE>");
          %>
          </BODY>
          </HTML>

          146EJB的基本架構
          :一個EJB包括三個部分:
            Remote Interface
          接口的代碼

            package Beans;
            import javax.ejb.EJBObject;
            import java.rmi.RemoteException;
            public interface Add extends EJBObject
            {
             //some method declare
            }
            Home Interface
          接口的代碼
            package Beans;
            import java.rmi.RemoteException;
            import jaax.ejb.CreateException;
            import javax.ejb.EJBHome;
            public interface AddHome extends EJBHome
            {
              //some method declare
            }
            EJB
          類的代碼
            package Beans;
            import java.rmi.RemoteException;
            import javax.ejb.SessionBean;
            import javx.ejb.SessionContext;
            public class AddBean Implements SessionBean
            {
              //some method declare
            } 

          147、如何校驗數字型?
          var re=/^\d{1,8}$|\.\d{1,2}$/;
          var str=document.form1.all(i).value;
          var r=str.match(re);
          if (r==null)
          {
             sign=-4;
             break;
          }
          else{
             document.form1.all(i).value=parseFloat(str);
          }

          148將一個鍵盤輸入的數字轉化成中文輸出
          (例如:輸入:1234567     輸出:一百二拾三萬四千五百六拾七)
          用java語言實現,,請編一段程序實現!
           public class Reader {
            private String strNum;
            private String strNumChFormat;
            private String strNumTemp;
            private int intNumLen;
            private String strBegin;
            public Reader(String strNum) {
              this.strNum = strNum;
            }
            public boolean check(String strNum) {
              boolean valid = false;
              
              if (strNum.substring(0,1).equals("0")){
               this.strNum = strNum.substring(1);
              }
              try {
                new Double(strNum);
                valid = true;
              }
              catch (NumberFormatException ex) {
                System.out.println("Bad number format!");
              }
              return valid;
            }
            public void init() {
              strNumChFormat = "";
              intNumLen = strNum.length();
              strNumTemp = strNum;
              strNumTemp = strNumTemp.replace('1', '一');
              strNumTemp = strNumTemp.replace('2', '二');
              strNumTemp = strNumTemp.replace('3', '三');
              strNumTemp = strNumTemp.replace('4', '四');
              strNumTemp = strNumTemp.replace('5', '五');
              strNumTemp = strNumTemp.replace('6', '六');
              strNumTemp = strNumTemp.replace('7', '七');
              strNumTemp = strNumTemp.replace('8', '八');
              strNumTemp = strNumTemp.replace('9', '九');
              strNumTemp = strNumTemp.replace('0', '零');
              strNumTemp = strNumTemp.replace('.', '點');
              strBegin = strNumTemp.substring(0, 1);
            }
            public String readNum() {
              if (check(strNum)) {
                init();
                try {
                  for (int i = 1, j = 1, k = 1; i < intNumLen; i++) {
                    if (strNumTemp.charAt(intNumLen - 1) == '零' && i == 1) {
                      strNumChFormat = "位";
                    }
                    else if (strNumTemp.charAt(intNumLen - i) == '零' && j == 1) {
                      strNumChFormat = "位" + strNumChFormat;
                    }
                    else if (strNumTemp.charAt(intNumLen - i) == '點') {
                      j = 1;
                      k = 1;
                      strNumChFormat = strNumTemp.charAt(intNumLen - i) + strNumChFormat;
                      continue;
                    }
                    else {
                      strNumChFormat = strNumTemp.charAt(intNumLen - i) + strNumChFormat;
                    }
                    if (strNumTemp.charAt(intNumLen - i - 1) != '位' &&
                        strNumTemp.charAt(intNumLen - i - 1) != '零') {
                      if (j == 1 && i < intNumLen) {
                        strNumChFormat = '拾' + strNumChFormat;
                      }
                      else if (j == 2 && i < intNumLen) {
                        strNumChFormat = '百' + strNumChFormat;
                      }
                      else if (j == 3 && i < intNumLen) {
                        strNumChFormat = '千' + strNumChFormat;
                      }
                    }
                    if (j == 4 && i < intNumLen) {
                      j = 0;
                    }
                    if (k == 4 && i < intNumLen) {
                      strNumChFormat = '萬' + strNumChFormat;
                    }
                    else if (k == 8 && i < intNumLen) {
                      k = 0;
                      strNumChFormat = '億' + strNumChFormat;
                    }
                    j++;
                    k++;
                  }
                  while (strNumChFormat.indexOf("位") != -1) {
                    strNumChFormat = strNumChFormat.replaceAll("位", " ");
                  }
                  if (strNumChFormat.substring(0, 2) == "一拾") {
                    strNumChFormat = strNumChFormat.substring(1, strNumChFormat.length());
                  }
                  if (strNumChFormat.indexOf("點") >= 0) {
                    String rebegin = strNumChFormat.substring(0,
                        strNumChFormat.indexOf("點"));
                    String relast = strNumChFormat.substring(strNumChFormat.indexOf("點"),
                        strNumChFormat.length());
                    for (int i = 1; i <= relast.length(); i++) {
                      relast = relast.replaceAll("拾", "");
                      relast = relast.replaceAll("百", "");
                      relast = relast.replaceAll("千", "");
                      relast = relast.replaceAll("萬", "");
                      relast = relast.replaceAll("億", "");
                    }
                    strNumChFormat = rebegin + relast;
                  }
                }
                catch (ArrayIndexOutOfBoundsException ex) {
                  ex.printStackTrace();
                }
                catch (Exception ex) {
                  ex.printStackTrace();
                }
                int off = strNumChFormat.indexOf("點");
                strNumChFormat = strBegin + strNumChFormat.substring(0);
              }
              else {
                strNumChFormat = "";
              }
              return strNumChFormat;
            }
            public static void main(String args[]) {
              try {
                String number = args[0].toString();
                System.out.println("The number is: " + number);
                Reader reader = new Reader(number);
                System.out.println("Output String: " + reader.readNum());
              }
              catch (Exception ex) {
                System.out.println("Please input like that: javac Reader <number>");
              }
            }
          }

          149JAVA代碼查錯
          1.
          abstract class Name {
             private String name;
             public abstract boolean isStupidName(String name) {}
          }
          大俠們,這有何錯誤
          ?
          答案錯。abstract method必須以分號結尾,且不帶花括號。

          2.
          public class Something {
             void doSomething () {
                 private String s = "";
                 int l = s.length();
             }
          }
          有錯嗎?
          答案錯。局部變量前不能放置任何訪問修飾符 (privatepublic,和protected)final可以用來修飾局部變量

          (final
          如同abstractstrictfp,都是非訪問修飾符,strictfp只能修飾classmethod而非variable)
          3.
          abstract class Something {
             private abstract String doSomething ();
          }
          這好像沒什么錯吧?
          答案錯。abstractmethods不能以private修飾。abstractmethods就是讓子類implement(實現)具體細節的,怎么可以用private
          abstract
          method
          封鎖起來呢? (同理,abstract method前不能加final)

          4.
          public class Something {
             public int addOne(final int x) {
                 return ++x;
             }
          }
          這個比較明顯。
          答案錯。int x被修飾成final,意味著x不能在addOne method中被修改。
          5.
          public class Something {
             public static void main(String[] args) {
                 Other o = new Other();
                 new Something().addOne(o);
             }
             public void addOne(final Other o) {
                 o.i++;
             }
          }
          class Other {
             public int i;
          }
          和上面的很相似,都是關于final的問題,這有錯嗎?
          答案正確。在addOne method中,參數o被修飾成final。如果在addOne method里我們修改了o
          reference
          (
          比如: o = new Other();),那么如同上例這題也是錯的。但這里修改的是o
          member vairable
          (
          成員變量),而oreference并沒有改變。

          6.
          class Something {
              int i;
              public void doSomething() {
                  System.out.println("i = " + i);
              }

          有什么錯呢看不出來啊。
          答案正確。輸出的是"i = 0"int i屬於instant variable (實例變量,或叫成員變量)instant variabledefault valueintdefault value0
          7.
          class Something {
              final int i;
              public void doSomething() {
                  System.out.println("i = " + i);
              }
          }
          和上面一題只有一個地方不同,就是多了一個final。這難道就錯了嗎?
          答案錯。final int i是個finalinstant variable (實例變量,或叫成員變量)finalinstant variable沒有default value,必須在constructor (構造器)結束之前被賦予一個明確的值。可以修改為"final int i = 0;"

          8.
          public class Something {
               public static void main(String[] args) {
                  Something s = new Something();
                  System.out.println("s.doSomething() returns " + doSomething());
              }
              public String doSomething() {
                  return "Do something ...";
              }
          }
           
          看上去很完美。
          答案錯。看上去在maincall doSomething沒有什么問題,畢竟兩個methods都在同一個class里。但仔細看,mainstatic的。static method不能直接call non-static methods。可改成"System.out.println("s.doSomething() returns " + s.doSomething());"。同理,static method不能訪問non-static instant variable
          9.
          此處,Something類的文件名叫OtherThing.java
          class Something {
              private static void main(String[] something_to_do) {        
                  System.out.println("Do something ...");
              }
          }
           
          這個好像很明顯。

          答案正確。從來沒有人說過JavaClass名字必須和其文件名相同。但public class的名字必須和文件名相同。
          10

          interface  A{
             int x = 0;
          }
          class B{
             int x =1;
          }
          class C extends B implements A {
             public void pX(){
                System.out.println(x);
             }
             public static void main(String[] args) {
                new C().pX();
             }
          }
          答案:錯誤。在編譯時會發生錯誤(錯誤描述不同的JVM有不同的信息,意思就是未明確的x調用,兩個x都匹配(就象在同時import java.utiljava.sql兩個包時直接聲明Date一樣)。對于父類的變量,可以用super.x來明確,而接口的屬性默認隱含為 public static final.所以可以通過A.x來明確。
          11.
          interface Playable {
              void play();
          }
          interface Bounceable {
              void play();
          }
          interface Rollable extends Playable, Bounceable {
              Ball ball = new Ball("PingPang");
          }
          class Ball implements Rollable {
              private String name;
              public String getName() {
                  return name;
              }
              public Ball(String name) {
                  this.name = name;        
              }
             public void play() {
                  ball = new Ball("Football");
                  System.out.println(ball.getName());
              }
          }
          這個錯誤不容易發現。
          答案錯。"interface Rollable extends Playable, Bounceable"沒有問題。interface可繼承多個interfaces,所以這里沒錯。問題出在interface Rollable里的"Ball ball = new Ball("PingPang");"。任何在interface里聲明的interface variable (接口變量,也可稱成員變量),默認為public static final。也就是說"Ball ball = new Ball("PingPang");"實際上是"public static final Ball ball = new Ball("PingPang");"。在Ball類的Play()方法中,"ball = new Ball("Football");"改變了ballreference,而這里的ball來自Rollable interfaceRollable interface里的ballpublic static final的,finalobject是不能被改變reference的。因此編譯器將在"ball = new Ball("Football");"這里顯示有錯。
          28、設計4個線程,其中兩個線程每次對j增加1,另外兩個線程對j每次減少1。寫出程序。
          以下程序使用內部類實現線程,對j增減的時候沒有考慮順序問題。
          public class ThreadTest1{
            private int j;
            public static void main(String args[]){
          ThreadTest1 tt=new ThreadTest1();
          Inc inc=tt.new Inc();
          Dec dec=tt.new Dec();
          for(int i=0;i<2;i++){
          Thread t=new Thread(inc);
          t.start();
          t=new Thread(dec);
          t.start();
          }
          }
            private synchronized void inc(){
          j++;
          System.out.println(Thread.currentThread().getName()+"-inc:"+j);
            }
            private synchronized void dec(){
          j--;
          System.out.println(Thread.currentThread().getName()+"-dec:"+j);
            }
            class Inc implements Runnable{
          public void run(){
          for(int i=0;i<100;i++){
          inc();
          }
          }
            }
            class Dec implements Runnable{
          public void run(){
          for(int i=0;i<100;i++){
          dec();
          }
           }
            }
          }

          posted on 2006-02-28 11:01 javaGrowing 閱讀(1616) 評論(0)  編輯  收藏 所屬分類: java面試試題
          主站蜘蛛池模板: 南木林县| 集贤县| 巴彦淖尔市| 商河县| 新野县| 平和县| 洛浦县| 全南县| 嘉峪关市| 郧西县| 万宁市| 金川县| 交口县| 满洲里市| 阳春市| 阳江市| 铜鼓县| 甘南县| 阳高县| 阿勒泰市| 延安市| 班戈县| 鄂州市| 铁力市| 德钦县| 合作市| 太白县| 浏阳市| 新干县| 改则县| 南乐县| 正定县| 武陟县| 邯郸市| 安平县| 潼南县| 沙湾县| 汽车| 上高县| 滨州市| 余江县|