javaGrowing

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            92 隨筆 :: 33 文章 :: 49 評論 :: 0 Trackbacks

          代碼與編程題
          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 閱讀(1617) 評論(0)  編輯  收藏 所屬分類: java面試試題
          主站蜘蛛池模板: 安远县| 巫山县| 积石山| 宜兰市| 广河县| 名山县| 苗栗市| 武川县| 灌南县| 枣阳市| 罗城| 定安县| 广南县| 绿春县| 柏乡县| 慈溪市| 遂川县| 石棉县| 凤台县| 宜城市| 开平市| 凤凰县| 安义县| 伊川县| 股票| 玛纳斯县| 海南省| 屏东县| 高雄县| 岳阳县| 花莲市| 安丘市| 新乡县| 万载县| 香河县| 宜川县| 南昌市| 汉寿县| 上思县| 汝州市| 屯昌县|