隨筆 - 20  文章 - 57  trackbacks - 0
          <2010年10月>
          262728293012
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          常用鏈接

          留言簿(2)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          51CTO

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          MVC

          MVC

          MVC含義

          一種軟件構(gòu)架,簡(jiǎn)單的說就是在做軟件的時(shí)候,可以將軟件分為不同的模塊,不同的模塊實(shí)現(xiàn)了不同功能。

          MVC 組成部分

          Model 模型

          View 視圖

          Controller 控制器 

          MVC就是三種組成部分的縮寫。

          MVC 不同模塊的功能

          Model(模型層) 程序員編寫程序應(yīng)用的功能,數(shù)據(jù)庫設(shè)計(jì)等。屬于后臺(tái)操作。

          View (視圖層) 前臺(tái)界面,也就是用戶可以看到的圖形見面,一般在web中是一些*.jsp*.html。

          Controller(控制器) 處理前臺(tái)和后臺(tái)請(qǐng)求。

          MVC 優(yōu)點(diǎn)

          采用MVC的優(yōu)點(diǎn)太多了,說再多不如你在真正的項(xiàng)目中自己體會(huì),在這里不做太多解釋。

          MVC 包結(jié)構(gòu)




          雖然,這并不能說明所有MVC框架所有的包模式,不過我覺得新手對(duì)于這個(gè)包結(jié)構(gòu)還是比較容易接受的。

          DAO  模式

          DAO層,最主要的作用是:完成數(shù)據(jù)的操作。在這層,你可以完成對(duì)任何表的數(shù)據(jù)操作,不過個(gè)人認(rèn)為DAO層最大的作用是簡(jiǎn)單了編程人員的編程邏輯,簡(jiǎn)單的說就是將一個(gè)大的問題,分成了幾個(gè)比較小的問題,這樣不管在測(cè)試還是在維護(hù)都起著很大的方便。

          Factory  工廠

          Factory 工廠在這里也可以說成是DAO的工廠,這里Factory僅僅產(chǎn)生了DAO。那么Factory工廠模式有什么好處呢?

          MVC中的Factory 層,你完全可以把它想象成現(xiàn)實(shí)中的工廠,生產(chǎn)某些東西,如果在程序中使用工廠模式,你可以簡(jiǎn)化編程代碼,相當(dāng)與現(xiàn)實(shí)中你需要某個(gè)產(chǎn)品不需要自己去生產(chǎn),完全可以去工廠“拿”一個(gè),這樣程序的編程更加符合現(xiàn)實(shí)中的邏輯。

          MVC  總結(jié)

          本節(jié),我僅僅是將MVC的編輯思想簡(jiǎn)單的介紹了一下,我沒有加入一些詳細(xì)的例子,因?yàn)槲矣X得你在接觸MVC的時(shí)候,最好先了解MVC的編程思想,如果你要了解MVC的編程思想之后,你再接觸MVC的編程時(shí),你就會(huì)覺得特別簡(jiǎn)單。

          最后,希望我這篇文章可以讓大家簡(jiǎn)單的了解MVC的編程模式。

          posted @ 2011-01-25 09:30 tovep 閱讀(2197) | 評(píng)論 (9)編輯 收藏
               摘要: ForEach小結(jié)            <c:forEach>標(biāo)簽具有以下一些屬性:              var:迭代參數(shù)的名稱。在迭代體中可以使用...  閱讀全文
          posted @ 2011-01-24 08:37 tovep 閱讀(2370) | 評(píng)論 (0)編輯 收藏

          通過以下Servlet程序和web.xml來說明web.xml的配置以及過程


          創(chuàng)建一個(gè)Login的HTML文件



          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <html>
            <head>
              <title>login.html</title>
             
              <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
              <meta http-equiv="description" content="this is my page">
              <meta http-equiv="content-type" content="text/html; charset=UTF-8">
           
           </head>
            <body>
              <form action="test1" method="post">
                <table border="0" width="379" height="79">
                  <tr>
                    <td>帳號(hào):</td>
                    <td><input type="text" name="username"></td>
                  </tr>
                  <tr>
                    <td>密碼:</td>
                    <td><input type="password" name="password"></td>
                  </tr>
                  <tr>
                    <td colspan="5" align="center"><input type="submit" value="登錄"></td>
                  </tr>
                </table>
              </form>
            </body>
          </html>



          以上HTML標(biāo)簽中要說明的是:
          <form>標(biāo)簽中的 action="test_Web_xml" 和 method="post" 分別定義了Html將登陸的信息發(fā)送給了誰,以及發(fā)送信息的方法!


          創(chuàng)建一個(gè)Servlet程序

          public class LoginServlet extends HttpServlet{
             
              public void doPost(HttpServletRequest request, HttpServletResponse response)
                  throws ServletException, IOException {
                  String username = null;
                  username = request.getParameter("username");
                  String password = null;
                  password = request.getParameter("password");
                 
                  if(username.equals("username")&&password.equals("password")){
                      request.getRequestDispatcher("成功登陸!??!").forward(request,response);
                  }else{
                      request.getRequestDispatcher("登陸失?。。?!").forward(request,response);   
                  }
              }
          }



          web.xml配置


          <?xml version="1.0" encoding="UTF-8"?>
          <web-app version="2.5"
              xmlns="http://java.sun.com/xml/ns/javaee"
              xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
              http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
            
             
              <servlet>
                <servlet-name>
                Login
                </servlet-name>
               
                <servlet-class>
                  com.rise.LoginServlet
                  </servlet-class>
               </servlet>
           
           
               <servlet-mapping>
                <servlet-name>
                 Login
                </servlet-name>
                <url-pattern>
                /test1

                </url-pattern>

               </servlet-mapping>
             
             
             
            <welcome-file-list>
              <welcome-file>index.jsp</welcome-file>
            </welcome-file-list>
          </web-app>



          我理解web.xml的作用就是將頁面和后臺(tái)程序正確連接?。?!



          通過一張圖片說明我理解的web.xml的作用






          以上的內(nèi)容是我自己對(duì)web.xml的理解,我覺得很簡(jiǎn)單,但真正寫程序的時(shí)候部署程序是非常復(fù)雜的!

          posted @ 2010-12-11 20:43 tovep 閱讀(6313) | 評(píng)論 (2)編輯 收藏
             

          什么是JDBC

          JDBC是由一組Java語言編寫的類和接口組成,用來處理關(guān)系數(shù)據(jù)庫!利用JDBC的API,可用Java語法去訪問各種各樣的SQL數(shù)據(jù)庫。
          個(gè)人認(rèn)為:
          把JDBC當(dāng)做是一門連接Java程序連接數(shù)據(jù)庫的技術(shù)不如把JDBC當(dāng)做連接程序和數(shù)據(jù)庫的橋梁。

          以下我要寫的例子是用純Java的Driver來連接數(shù)據(jù)庫的方式。連接的數(shù)據(jù)庫是mysql。


          JDBC編程步驟


                 1.加載數(shù)據(jù)庫驅(qū)動(dòng)(jar文件)
                      //需要下載一個(gè)數(shù)據(jù)庫的jar包,并導(dǎo)入相應(yīng)的JDBC項(xiàng)目中,創(chuàng)建路徑!
                      Class.forName("com.mysql.jdbc.Driver");
                
                 2.獲得數(shù)據(jù)庫連接
                      DriverManager.getConnection("jdbc:mysql://Database_IP:3306/DATABASE","DATAROOT","PASSWORD");//返回Connection————獲得數(shù)據(jù)庫連接
                 
                 3.創(chuàng)建語句
                      String sql = "SQL_TORUNNING";
                      向DATABASE發(fā)送一個(gè)執(zhí)行語句
                      Statement stmt = conn.createStatement();//創(chuàng)建一個(gè) Statement 對(duì)象來將 SQL 語句發(fā)送到數(shù)據(jù)庫.
                           Statement—————SQL_RUNNING!!!
                
                 4.執(zhí)行查詢
                      ResultSet rs = Statement.executeQuery(SQL_RUNNING);//執(zhí)行SQL_RUNNING命令,返回ResultSet
                      //如果執(zhí)行的數(shù)據(jù)庫語句不是對(duì)數(shù)據(jù)庫中的內(nèi)容進(jìn)行修改的話,則用 Statement.executeQuery()
                      //如果執(zhí)行的數(shù)據(jù)庫語句是修改數(shù)據(jù)庫中的內(nèi)容進(jìn)行修改的話,則用 Statement.executeUpdate()
                      //當(dāng)然他們返回值的類型也不同!
                          //根據(jù)命令的不同Statement的方法也不同
                            
                              創(chuàng)建一個(gè)表      
                              Statement.execute(create a table)
                             
                              增刪改查Insert、update、delete...
                              Statement.executeUpdate()
                            
                              查詢語句Select
                              Statement.executeQuery(Select);
                            
                 5.遍歷結(jié)果集
                      while(ResultSet.next()){
                          ResultSet.getInt(int);
                          ResultSet.getString(int);
                          ......
                      }
                 
                 
                 6.關(guān)閉數(shù)據(jù)庫連接
                         Connection.close();
               
                

          步驟分析


          (圖一)


          1.加載數(shù)據(jù)庫驅(qū)動(dòng)

                  
                   我們來看圖一,工廠和幾個(gè)農(nóng)村之間有一條河,不能夠直接進(jìn)行溝通,工廠就相當(dāng)于一個(gè)Java程序,而幾個(gè)農(nóng)村就相當(dāng)于不同的數(shù)據(jù)庫;
                   工廠為B村生產(chǎn)一些材料,但是生產(chǎn)出來之后并不能直接交給B村,然后工廠的廠長(zhǎng)就想在工廠和B村之間架設(shè)一座橋梁來運(yùn)送生產(chǎn)出來的材料——我們大可把數(shù)據(jù)庫驅(qū)動(dòng)加載當(dāng)做這個(gè)架設(shè)橋梁的想法。


                   在程序中我們要怎么做呢?   
                   在加載數(shù)據(jù)庫驅(qū)動(dòng)的時(shí)候,必須要將相應(yīng)的mysql-connector-java-5.0.4-bin.jar包,然后將jar包導(dǎo)入相應(yīng)的項(xiàng)目中如下圖
                  
                   在mysql-connector-java-5.0.4-bin.jar右擊建立路徑,就相當(dāng)于import的過程——我不確定這么說對(duì)不對(duì),但我是這么理解的。
                   建立路徑后,你的項(xiàng)目將出現(xiàn)一個(gè)新的文件,如下圖
                  
                   這樣的話,你就可以順利加載數(shù)據(jù)庫驅(qū)動(dòng),否則當(dāng)你在運(yùn)行的時(shí)候會(huì)出現(xiàn)找不到Driver.class的異常,也就是無法加載數(shù)據(jù)庫驅(qū)動(dòng)。
                       Class.forName("com.mysql.jdbc.Driver");



          2.獲得數(shù)據(jù)庫連接

                  
                   既然廠長(zhǎng)有想法和B村之間架設(shè)一座橋梁,那就要和B村商量一下啊!然后,廠長(zhǎng)就要去河的對(duì)岸,那條河呢?就是在工廠和B村之間的那條河(這條河就相當(dāng)于Database_IP),然后去找B村的村長(zhǎng)(在這里要明白是B村的村長(zhǎng)不是A村的,所以不能找錯(cuò)了!??!),找到B村村長(zhǎng),“我要在工廠和B村之間建設(shè)一座橋,來運(yùn)輸我們的東西”,下一步談的當(dāng)然是條件了,工廠老板說“我要B村出資90%,剩下的由工廠出??!”村長(zhǎng)當(dāng)然不干了,這橋當(dāng)然也就沒法建設(shè)了!??!所以只有當(dāng)兩者都滿意的情況下才可以建設(shè)橋梁(比如,各處50%)其實(shí)談條件的過程就相當(dāng)于驗(yàn)證數(shù)據(jù)庫的"DATAROOT"和"PASSWORD"!!!只有兩者都正確的情況下才可以進(jìn)行下一步的計(jì)劃——也就是建設(shè)橋梁?。。?br />
                   在程序中的過程如下:
                   Connection conn = null;
                   conn = DriverManager.getConnection("jdbc:mysql://Database_IP:3306/DATABASE","DATAROOT","PASSWORD");
                   //返回Connection————獲得數(shù)據(jù)庫連接


          3.創(chuàng)建語句


                   橋已經(jīng)建好了,然后工廠要準(zhǔn)備一些卡車來運(yùn)輸生產(chǎn)的貨物,然后農(nóng)村需要根據(jù)不同的貨物來處理這些貨物,有些貨物直接卸在B村就可以了,但有些貨物卸在B村之后,B村要做一些處理然后運(yùn)回工廠?。?!
                 
                   這個(gè)過程在程序是怎么體現(xiàn)的呢?
                   String sql = "SQL_TORUNNING";
                   向DATABASE發(fā)送一個(gè)執(zhí)行語句
                   Statement stmt = conn.createStatement();//創(chuàng)建一個(gè) Statement 對(duì)象來將 SQL 語句發(fā)送到數(shù)據(jù)庫.
                   Statement—————SQL_RUNNING!!!


          4.處理數(shù)據(jù)庫發(fā)送來的消息

                   如果工廠運(yùn)輸?shù)紹村的貨物,只要B村的村長(zhǎng)給工廠開一張條就行了;但也會(huì)有一些貨物需要運(yùn)回工廠?。?br />
                   在程序中:
                   ResultSet rs = Statement.executeQuery(SQL_RUNNING);//執(zhí)行SQL_RUNNING命令,返回ResultSet
                   //如果執(zhí)行的數(shù)據(jù)庫語句不是對(duì)數(shù)據(jù)庫中的內(nèi)容進(jìn)行修改的話,則用 Statement.executeQuery()——需要返回一些貨物
                   //如果執(zhí)行的數(shù)據(jù)庫語句是修改數(shù)據(jù)庫中的內(nèi)容進(jìn)行修改的話,則用 Statement.executeUpdate()——開張條就行了
                   //當(dāng)然他們返回值的類型也不同!
                   //根據(jù)命令的不同Statement的方法也不同
                            
                           創(chuàng)建一個(gè)表      
                           Statement.execute(create a table)
                             
                           增刪改查Insert、update、delete...
                           Statement.executeUpdate()
                            
                           查詢語句Select
                           Statement.executeQuery(Select);
                            


          5.處理數(shù)據(jù)庫傳回的內(nèi)容


                  這個(gè)過程由工廠完成,如果是返回的一些貨物的話,工廠要做一些處理。
           
                  處理的過程:
                          while(ResultSet.next()){
                          ResultSet.getInt(int);
                          ResultSet.getString(int);
                          ......
                      }

          6.關(guān)閉數(shù)據(jù)庫

                  這樣的話,工廠和B村的交易就完成,在現(xiàn)實(shí)世界中工廠和B村之間的橋梁不會(huì)被拆除,因?yàn)榻ㄒ蛔鶚虻拇鷥r(jià)很大,但在程序和數(shù)據(jù)庫之間架設(shè)一座橋梁簡(jiǎn)直太簡(jiǎn)單了,所以在這里我們要把這座橋梁拆除。

                  Connection.close();




          簡(jiǎn)單的舉了一個(gè)例子來說明數(shù)據(jù)庫和程序之間是怎么連接的,望對(duì)大家有所幫助。








          posted @ 2010-12-09 18:37 tovep 閱讀(1675) | 評(píng)論 (1)編輯 收藏
          SQL語言是操作數(shù)據(jù)庫的基礎(chǔ)語言,對(duì)于不同的數(shù)據(jù)庫語言產(chǎn)品,SQL語言大多是通用的,本篇博客旨在介紹一些最常用的SQL語句。希望對(duì)大家能有所幫助。
          注:
          本文中的紅色字體黃色背景的內(nèi)容為SQL語句??!
          笨人也是菜鳥,如果我寫的有錯(cuò)誤,大家一定要指出來?。。?!好了,廢話不說了,切入正題:

          首先,使用status查看MySQL當(dāng)前的信息



          1.使用show databases;語句查看當(dāng)前數(shù)據(jù)庫:
              



          2.使用create database DATABASE_NAME;語句來創(chuàng)建DATABASE_NAME數(shù)據(jù)庫



          這樣,我們創(chuàng)建好了一個(gè)名字為database_name的數(shù)據(jù)庫。
          注:數(shù)據(jù)庫語句對(duì)字母大小寫不敏感!


          3.使用use DATABASE_NAME;切換到使用DATABASE_NAME數(shù)據(jù)庫模式。




          4.在database_name數(shù)據(jù)庫創(chuàng)建一個(gè)表:

            create table if not exists table_name      -- 如果表table_name不存在則創(chuàng)建       
               (id int primary key auto_increment,     -- 創(chuàng)建int類型為主鍵,且自動(dòng)增長(zhǎng)      
                name varchar(200) not null,            -- 創(chuàng)建字符類型的列,最大長(zhǎng)度是200字節(jié)
                age int(3),                            -- 創(chuàng)建int類型,長(zhǎng)度為3個(gè)字節(jié)         
                sex varchar(2),                        -- 創(chuàng)建字符類型,長(zhǎng)度是2個(gè)字節(jié)        
                salary float(11,2),                    -- 創(chuàng)建float類型的列,長(zhǎng)度為2個(gè)字節(jié)   

                address varchar(50),                   -- 創(chuàng)建字符類型,長(zhǎng)度為50個(gè)字節(jié)       
                birthday date                          -- 創(chuàng)建日期類型                       
               );                                                                            






          這樣就創(chuàng)建好了一張表,可以用 describe 或則 desc來查看表的結(jié)構(gòu)
          describe table_name;
          desc table_name;   
              



              

          這樣數(shù)據(jù)就創(chuàng)建好了一張表,我們可以用show tables; 來查看數(shù)據(jù)庫中所有表

          然后,我們就可以看見我們創(chuàng)建的表
          ====================================================================================
          數(shù)據(jù)庫最具核心的用法——對(duì)數(shù)據(jù)庫表的數(shù)據(jù)的增刪改查。

          向表中增加數(shù)據(jù)(要了加入表的結(jié)構(gòu),看哪項(xiàng)可以為空)
          insert table_name (name,age,sex) values ('tovep',22,'男');

          向表中加入數(shù)據(jù)的時(shí)候,并不是要把所有的信息都要寫近期,只要表中結(jié)構(gòu)設(shè)置為可以為空的都
          可以不寫?。?br /> id不用寫,因?yàn)樗亲詣?dòng)增長(zhǎng)的!

          要想查看表中的內(nèi)容,可以用select語句———為了說明下面的情況,我加入了多條信息
          select * from table_name;      -- 將table_name表中的所有數(shù)據(jù)都打印出來





          select name from table_name;      --查看所有人的名字



          select * from table_name where id<5;     --將表中id小于100的都打印出來




          在使用select 語句查詢的時(shí),常常用到別名
          select t.name,t.id,t.age from table_name as t;



          select 語句中的where表示查詢的條件
          where中還可以使用like與"%"對(duì)字符類型的列進(jìn)行模糊查詢
          select * from table_name where name like 't%';






          update語句:修改數(shù)據(jù)

          update 表名 set 字段名 =  '修改的值'

          update table_name set name='tvoep1' where id>2;




          刪除用
          delete from 表名 where 判斷信息

          delete from table_name where id=5;


          這樣的話就刪除了id=5的信息


          ====================================================================================


          使用drop 來刪除表或者數(shù)據(jù)庫
          drop table table_name;




          drop database database_name;













          posted @ 2010-12-06 11:04 tovep 閱讀(2318) | 評(píng)論 (2)編輯 收藏

          經(jīng)過一個(gè)多月的Java學(xué)習(xí),我們慢慢深入了解了Java中的一些比較高級(jí)的方法!但這些方法在你調(diào)試的時(shí)候一定要慎重??!不要等待失去了整個(gè)硬盤,才后悔莫及!?。?如果你在編程的時(shí)候多長(zhǎng)個(gè)心眼,這些小的錯(cuò)誤是可以避免的!??!


          下面我們來看一下一個(gè)讓人很崩潰的錯(cuò)誤,這個(gè)錯(cuò)誤讓我感到不可思議?。〈a如下:

          import java.io.File;

          public class KillBackServer {
           
           public static void main(String[] args){
            File f = new File("C:\\");
            fun(f);
           }
           
          //定義一個(gè)靜態(tài)函數(shù),用來實(shí)現(xiàn)對(duì)一盤文件的遍歷
           public static void fun(File f)
              {
             if(f.isDirectory())
              {
                File file[] = f.listFiles();
                try
                {
                  for(int i = 0 ; i <file.length ; i++)
                  {
                       fun(file[i]);
                  }
                }
                       catch(Exception e){}
              }
             else
             {
                  if("我是病毒.exe".equals(f.getName()))                                           
                         System.out.println(f);
                         //僅僅當(dāng)程序找到"我是病毒.exe"的 時(shí)候才執(zhí)行這一句代碼                            
                         //f.delete();                                                   
                         System.out.println("該病毒已被查殺");}  
                         System.out.println(f.getPath() + "***********************");                    
              }
           
           }

          }
           

          大家一定要注意紅色字體的代碼!??!我之所以注釋了,就是怕直接復(fù)制我的代碼,然后運(yùn)行…… 
          如果這樣后果你是知道的……


           本來這段代碼是用來掃描C盤,找到"我是病毒.exe"文件,并把它刪除,判斷一個(gè)文件名,用的是equals這是對(duì)的?。。?br /> 錯(cuò)就錯(cuò)在:if()判斷,大家都明白了吧!
          希望大家以后不要因?yàn)榉噶诉@個(gè)低級(jí)錯(cuò)誤,而把自己的硬盤給了格了= = |||

          其實(shí),有很多方法可以避免這種錯(cuò)誤?。。”热?,你可以在f.delete(); 后面加上一句打印語句,這樣的話,在你測(cè)試的時(shí)候就會(huì)發(fā)現(xiàn),原來if語句后面少一個(gè)大括號(hào)…… 


          這個(gè)錯(cuò)誤寫出來僅僅為了提醒大家規(guī)范的重要性?。。?br />




           


          posted @ 2010-11-17 21:29 tovep 閱讀(2683) | 評(píng)論 (16)編輯 收藏
          /**
               *         Robot類   :
               *
               *             exec 函數(shù)聲明:
               *                 public Process exec (String command) throws IOException ,參數(shù)及功能說明:
               *                     command: 一條指定的系統(tǒng)命令
               *                     功能:在單獨(dú)的進(jìn)程中執(zhí)行指定的字符串命令
               *
               *             keyPress 函數(shù)說明:
               *                 public void keyPress(int keycode),參數(shù)及功能說明:
               *                     keycode:要按下的鍵(例如,KeyEvent.VK_A)
               *                     功能:模擬按下指定鍵
               *
               *             keyRelease 函數(shù)說明:
               *                 public void keyRelease(int keycode),參數(shù)及功能說明:
               *                     keycode:要釋放的鍵
               *                     功能:模擬釋放指定鍵
               *
               * @param tovep
               */
          import java.awt.Robot;
          import java.awt.event.KeyEvent;

          public class Exce {

              public static void main(String[] args) {
                  try{
                      //創(chuàng)建自動(dòng)操作類
                      Robot robot = new Robot();
                     
                     
                      /**
                       *
                       *         利用Runtime類運(yùn)行Word程序的方法為:
                       *             Runtime.getRuntime().exec("cmd /c start winword");
                       *                                         括號(hào)里的是系統(tǒng)命令
                       *
                       */
                     
                      //啟動(dòng)記事本程序
                      Runtime.getRuntime().exec("cmd /c start notepad");
                     
                      //延緩幾秒鐘,等待記事本程序啟動(dòng)成功
                      robot.delay(3000);
                     
                      //模擬按下"Ctrl + Space" 組合鍵,啟動(dòng)輸入法
                      pressKeyWithCtrl(robot,KeyEvent.VK_SPACE);
                     
                      //模擬隨機(jī)按下100個(gè)字母,輸入漢字
                      for(int i=0;i<100;i++){
                          pressKey(robot, (int) (Math.random()* 25) + 'A');
                          pressKey(robot,KeyEvent.VK_SPACE);
                      }
                     
                      //延緩5秒鐘,一共觀察
                      robot.delay(5000);
                     
                      //關(guān)閉記事本
                      //closeApplication(robot);
                  }catch (Exception e){
                      System.out.println(e.getMessage());
                  }
                 
              }
             
              //模擬按下鍵盤字符鍵
              public static void pressKey(Robot robot, int keyvalue){
                  //模擬按下
                  robot.keyPress(keyvalue);
                 
                  //模擬彈起
                  robot.keyRelease(keyvalue);
              }
             
              //模擬同時(shí)按下"Ctrl"鍵和字符鍵
              public static void pressKeyWithCtrl(Robot robot, int keyvalue){
                  //模擬按下
                  robot.keyPress(KeyEvent.VK_CONTROL);
                  robot.keyPress(keyvalue);
                 
                  //模擬彈起
                  robot.keyPress(keyvalue);
                  robot.keyRelease(KeyEvent.VK_CONTROL);
                 
              }
             
              //模擬按下"Alt + F4"組合鍵,關(guān)閉當(dāng)前應(yīng)用程序
              public static void closeApplication(Robot robot){
                  //模擬按下"Alt + F4"組合鍵
                  //模擬按下
                  robot.keyPress(KeyEvent.VK_ALT);
                  robot.keyPress(KeyEvent.VK_F4);
                 
                  //模擬彈起
                  robot.keyRelease(KeyEvent.VK_ALT);
                  robot.keyRelease(KeyEvent.VK_F4);
                 
                  //模擬按下"N",不保存文件退出記事本程序
                  //模擬按下
                  robot.keyPress(KeyEvent.VK_N);
                 
                  //模擬彈起
                  robot.keyRelease(KeyEvent.VK_N);
              }
             

          }


          posted @ 2010-11-17 00:14 tovep 閱讀(5427) | 評(píng)論 (1)編輯 收藏

          在Java中,Everything is Object!所以在文件中,要不例外!

          在Java中,可以用File類來表示一個(gè)文件?。。。ㄗ⒁膺@里的文件可以是所有文件,包括文件夾)


          下面的代碼表示一個(gè)文件:

          public class Demo {

              public static void main(String[] args){
                 
                  File f = new File("e:\\file");
                 
                  if(f.isDirectory()){
                      System.out.println(f.getPath());
                  }
              }
          }

          運(yùn)行結(jié)果是:

          代碼中isDirectory()方法是判斷文件是文件夾還是一個(gè)文件(這里可能有點(diǎn)迷糊),也可以這么理解,我所說的文件夾就是一個(gè)目錄,
          getPath()方法是打印文件(這里指的是file文件夾)的路徑!!!


          看看下面的代碼還有注釋:

          /**
           *
           *          File.speparator的作用是判斷在不同的系統(tǒng)中斜杠的方向
           *
           * 在windows中斜杠的方向是向右斜的\\
           * 在Linux  中斜杠的方向是向左斜的//
           *
           *
           *         File中createNewFile方法:
           *          當(dāng)且僅當(dāng)不存在具有此抽象路徑名指定名稱的文件時(shí),不可分地創(chuàng)建一個(gè)新的空文件。
           *          檢查文件是否存在,若不存在則創(chuàng)建該文件,這是單個(gè)操作,對(duì)于其他所有可能影響該文件的文件系統(tǒng)活動(dòng)來說,該操作是不可分的。
           *   
           *            注:此方法不應(yīng)該 用于文件鎖定,因?yàn)樗脜f(xié)議可能無法可靠地工作。應(yīng)該使用 FileLock 機(jī)制替代。
           *
           *
           */


          import java.io.File;


          public class Demo01 {
              public static void main(String[] args) throws Exception{
                 
                  File f;
                 
                  f = new File("e:" + File.separator + "file" + File.separator + "io.txt");
                  System.out.println(f.createNewFile());
              }

          }
          ===================================
          運(yùn)行結(jié)果是:




          大家注意,如果你的直接復(fù)制這些代碼的話,可能會(huì)出現(xiàn)以下異常


          看看大家都明白了吧! 系統(tǒng)找不到指定的文件,就是在e盤下新建一個(gè)file文件夾就可以啦!!!

          下面代碼詳細(xì)的介紹了File類中的createNewFile()方法:

          /**
          *
          *         File中createNewFile方法:
          *          當(dāng)且僅當(dāng)不存在具有此抽象路徑名指定名稱的文件時(shí),不可分地創(chuàng)建一個(gè)新的空文件。
          *          檢查文件是否存在,若不存在則創(chuàng)建該文件,這是單個(gè)操作,對(duì)于其他所有可能影響該文件的文件系統(tǒng)活動(dòng)來說,該操作是不可分的。
          *   
          *            注:此方法不應(yīng)該 用于文件鎖定,因?yàn)樗脜f(xié)議可能無法可靠地工作。應(yīng)該使用 FileLock 機(jī)制替代。
          *         返回:是布爾型
          *
          */

          import java.io.File;

          public class Demo02 {
              public static void main(String[] args) throws Exception{
                  File f = new File("f:\\demo.txt");
                  System.out.println(f.createNewFile());
              }

          }


          運(yùn)行結(jié)果如下:




          下面介紹一下File類中delete()方法,代碼如下:

          /**
           *
           *             要操作一個(gè)文件,必須要找到這個(gè)文件
           *             在Java中,只有File類能表示一個(gè)文件,所有用File表示一個(gè)文件
           *             File的屬性就是文件的路徑,虛擬機(jī)會(huì)根據(jù)File類的參數(shù)找到指定的文件
           *             找到問及那后可以用File類的方法進(jìn)行操作!
           *
           *             delete()方法可以刪除一個(gè)文件或者一個(gè)整個(gè)文件夾(整個(gè)目錄),返回結(jié)果是布爾類型!!
           *
           * */



          import java.io.File;

          public class Demo11 {

              public static void main(String[] args) {
                 
                  File f = new File("f:\\demo.txt");
                 
                  f.delete();
                  if(boo){
                      System.out.println("成功刪除文件");
                  }
              }
          }

          這個(gè)程序運(yùn)行的結(jié)果:



          下面的代碼是介紹查看一個(gè)文件的目錄,以及判斷這個(gè)文件是否是文件夾,代碼如下:

          /**
           *
           *         File的一個(gè)方法File.getPath()
           *                     是將此抽象路徑名轉(zhuǎn)換為一個(gè)路徑名字符串。
           *
           *         File的exists方法
           *                     是測(cè)試此抽象路徑名表示的文件或目錄是否存在。
           *
           *
           *         File的getParent()方法
           *                     是返回此抽象路徑名父目錄的路徑名字符串;如果此路徑名沒有指定父目錄,則返回 null
           *
           * */

          import java.io.File;

          public class Demo21 {

              public static void main(String[] args) {

                  File f = new File("f:" + File.separator + "demo.txt");
                  System.out.println(f.getPath());
                  System.out.println(f.getParent());
                  if(f.exists()){
                      f.delete();
                  }
                  else{
                      try{
                          System.out.println(f.createNewFile());
                      }catch(Exception e){}
                  }

              }

          }
          運(yùn)行結(jié)果:


          再看一個(gè)判斷目錄的方法:


          /**
           *
           *         File的一個(gè)方法File.getPath()
           *                     是將此抽象路徑名轉(zhuǎn)換為一個(gè)路徑名字符串。
           *
           *         File的isDirectory()的方法
           *                     是測(cè)試此抽象路徑名表示的文件是否是一個(gè)目錄。
           *         當(dāng)且僅當(dāng)此抽象路徑名表示的文件存在且 是一個(gè)目錄時(shí),返回 true;否則返回 false。   
           *
           *
           * */

           
          import java.io.File;

          public class Demo51 {
             
              public static void main(String[] args){
                  File f = new File("f:" + File.separator + "aa");
                  System.out.println(f.getPath());
                  System.out.println(f.isDirectory());
              }

          }

          運(yùn)行結(jié)果:



          注意下一個(gè)代碼,可能對(duì)你很有幫助?。?!

          /**
           *
           *             File的list()方法可以:
           *             返回一個(gè)字符串?dāng)?shù)組,
           *             這些字符串指定此抽象路徑名表示的目錄中的文件和目錄。
           *
           * */

          import java.io.File;

          public class Demo61 {

              public static void main(String[] args) {
                 
                  File f = new File("f:\\book");
                 
                 
                  //使用list列出
                  //列出的只是一個(gè)名稱
                  String[] str = f.list();
                  for(int i=0;i<str.length;i++){
                      System.out.println(str[i]);
                  }

              }

          }
          這個(gè)程序的運(yùn)行結(jié)果是你目錄下的文件:



          下面的程序 你可能會(huì)很感興趣!因?yàn)槟阆胪鍴K,或者你想給別人整個(gè)惡作劇,你必須要掃描下他的電腦,以下方法就實(shí)現(xiàn)了怎樣去掃描一個(gè)電腦里的所有文件(我的代碼選擇的是掃描C盤下的所有文件,如果你想掃描其他盤,只要把文件改一下就OK啦)

          import java.io.File;

          public class Demo81 {

              public static void main(String[] args) {
                 
                  String str = "C:\\";
                  File f = new File(str);
                  fun(f);
              }
             
              //要不斷列出,因?yàn)榻o出的File類對(duì)象可能是一個(gè)目錄
              public static void fun(File f){
                  //判斷給定的路徑是否是目錄,如果是目錄在列出
                  if(f.isDirectory()){
                      File[] file = f.listFiles();
                      //再依次循環(huán)進(jìn)行判斷
                      try{
                          for(int i = 0;i < file.length;i++){
                              //繼續(xù)把內(nèi)容傳入到fun方法之中進(jìn)行驗(yàn)證
                              fun(file[i]);
                          }
                      }catch(Exception e){}
                  }
                  else{
                      System.out.println(f);
                  }
              }

          }


          運(yùn)行結(jié)果我就不貼出來了,因?yàn)镃盤的文件太多啦!??!如果你想知道,自己把代碼帶下看看,你會(huì)很吃驚的!你會(huì)想原來掃描的原理這么簡(jiǎn)單?。。?br />






          posted @ 2010-11-07 23:05 tovep 閱讀(59670) | 評(píng)論 (2)編輯 收藏

                  Java線程類有兩種實(shí)現(xiàn)方式,第一種就是繼承Thread類,另一種是現(xiàn)實(shí)Runnable接口。這兩種實(shí)現(xiàn)方式的區(qū)別很大,下面就說一下它們之間到底有什么區(qū)別。

          我們首先用第一種方式寫一個(gè)線程類:
          代碼如下:


          package Ticket;


          public class Extends {
           
           public static void main(String[] args){
                    //實(shí)例化進(jìn)程并準(zhǔn)備執(zhí)行
                    new Thread(new MyThread(),"001窗口").start();
                    new Thread(new MyThread(),"001窗口").start();
                    new Thread(new MyThread(),"001窗口").start();
           
                   }

          }

          class MyThread extends Thread{
                   //定義一個(gè)變量
                    private int ticket = 10;
           
                    public void run(){
               
                    //這里之所以要循環(huán)300次,就是為了讓所有的 車票都賣出去!可能你會(huì)想,為什么不是30呢?
                    //嘿嘿。。。聰明的你肯定明白這個(gè)循環(huán)的次數(shù)為什么會(huì)多出票數(shù)很多?=====其實(shí)我開始也不知道?。。?nbsp; ==||| 
                  
                    for(int i=0;i<300;i++){
                         try {
                              //調(diào)用sell()方法
                              this.sell();
                              Thread.sleep(10);
                           } catch (InterruptedException e) {
                                      e.printStackTrace();
                           }
            }
           
           }
                     public void sell(){
                            if(ticket>0){
                                     System.out.println(Thread.currentThread().getName() + " ===> 還剩下" + (ticket--) + "車票");
                            }
           }
          }



          看看這個(gè)程序的運(yùn)行結(jié)果你就明白為什么繼承Thread類實(shí)現(xiàn)線程類的一個(gè)弊端 




          ------------------------------------------------
          大家都發(fā)現(xiàn)了吧!輸出的結(jié)果和預(yù)想的不一樣?。。?br />
          我們來分析一下代碼,查看main函數(shù):
                    new Thread(new MyThread(),"001窗口").start();
                    new Thread(new MyThread(),"001窗口").start();
                    new Thread(new MyThread(),"001窗口").start();

          我們可以看出,實(shí)例化了三個(gè)MyThread類,這樣的話,private int ticket = 10;就運(yùn)行了三次,所以ticket打印出來的 也就是30張;在這里注意一下并不是ticket賦值為30,而是ticket賦值為10,但賦值了三次?。?!也就是現(xiàn)在有三個(gè)ticket?。?!
          這樣并不能實(shí)現(xiàn)資源共享!
          我們知道我們利用多線程就是為了將多個(gè)線程去處理一個(gè)數(shù)據(jù)的集合!?。?他們是同時(shí)處理的?。?!如果向上面的話,并沒有將數(shù)據(jù)的集合(ticket)進(jìn)行共享,而是將每一個(gè)類都從新建了一個(gè)數(shù)據(jù)的集合,分別對(duì)自己的集合進(jìn)行處理!!??!
          如果想解決這個(gè)問題,其實(shí)也很簡(jiǎn)單,不過如果當(dāng)數(shù)據(jù)的類型和種類比較多的時(shí)候,這樣寫就太麻煩了?。。?!

          那實(shí)現(xiàn)Runnable接口的線程類可不可以呢!!???

          下面來看一看:

          代碼如下:


          package IO;

          public class Inter {

              public static void main(String[] args){
                  //聲明并實(shí)例化一個(gè)MyThread01類
                  MyThread01 mt = new MyThread01();
                  new Thread(mt,"001窗口").start();
                  new Thread(mt,"002窗口").start();
                  new Thread(mt,"003窗口").start();

              }
             
          }

          class MyThread01 implements Runnable{
             
              private int ticket = 10;   
              public void run(){   
                  for(int i=0;i<200;i++){
                      try {
                          this.sell();
                          Thread.sleep(10);
                      } catch (InterruptedException e) {
                          e.printStackTrace();
                      }
                  }
                 
              }
              public void sell(){
                  if(ticket>0){
                      System.out.println(Thread.currentThread().getName() + " ===> 還剩下" + (ticket--) + "車票");
                  }
                 
              } 
          }
                 

          ---------------------------------------------
          這段程序的運(yùn)行結(jié)果:


          看看這個(gè)結(jié)果是不是和自己想的一樣?。。。∵@樣就可以了!!!用這個(gè)方法去創(chuàng)建一個(gè)線程類是不是可以達(dá)到資源共享?。。。?br /> 其實(shí)??!我看來,所謂的資源共享也就是將一個(gè)數(shù)據(jù)的集合讓多個(gè)線程去處理!??!
          我們看一下代碼?。。?br />         MyThread01 mt = new MyThread01();
                  new Thread(mt,"001窗口").start();
                  new Thread(mt,"002窗口").start();
                  new Thread(mt,"003窗口").start();

          我們可以看出這個(gè)過程中,我們只聲明并實(shí)例化了一個(gè)MyThread01類,也就是說在這里過程中,給ticket進(jìn)行了初始化!!!
          但大家要注意的是:真正創(chuàng)建處理數(shù)據(jù)的線程是
                  new Thread(mt,"001窗口").start();
                  new Thread(mt,"002窗口").start();
                  new Thread(mt,"003窗口").start();
          因此,這樣可以將一個(gè)ticket的數(shù)據(jù)集 由三個(gè)線程來處理?。?!
          這樣就是所謂的資源共享?。?!
          ok???



          =====================================================================


          總結(jié)一下這兩種方式的特點(diǎn):

          1.繼承Thread來創(chuàng)建線程類的方法,在繼承了Thread后,不能再繼承其他類,這樣靈活性就不如實(shí)現(xiàn)Runnable接口來創(chuàng)建線程類的方法了?。。?br /> 2.正如上面所說的使用實(shí)現(xiàn)Runnable接口來創(chuàng)建線程類的方法可以達(dá)到資源共享?。。。ㄔ谶@里說明一下:繼承Thread類來創(chuàng)建線程類的方法也可以實(shí)現(xiàn)資源共享,只不過比較麻煩?。?!因此,在創(chuàng)建線程類的時(shí)候,應(yīng)優(yōu)先選擇實(shí)現(xiàn)Runnable接口來創(chuàng)建線程類的方法!?。。?br />






          posted @ 2010-11-07 20:30 tovep 閱讀(5968) | 評(píng)論 (8)編輯 收藏
          今天寫一個(gè)具有簡(jiǎn)單功能的學(xué)生管理系統(tǒng)!不過,這個(gè)系統(tǒng)的構(gòu)建基于現(xiàn)實(shí)中的Java程序開發(fā)框架!所有的代碼全部自己去寫,并且要在程序中體現(xiàn)出面向?qū)ο蟮募?xì)想和程序開發(fā)中的框架實(shí)現(xiàn)原理。

          首相,對(duì)問題進(jìn)行分析:

          程序要完成的功能很簡(jiǎn)單,當(dāng)程序運(yùn)行的時(shí)候出現(xiàn)以下信息
          --------圖1--------
          然后程序等待用戶輸入

          如果用戶選擇1,那么進(jìn)入增加人員的信息(

          下面來分析增加人員的過程:

          首先,要新建一個(gè)Person類,當(dāng)用戶選擇1的時(shí)候就實(shí)例化Person類,并將Person進(jìn)行初始化,這并沒有結(jié)束此次的操作,最后的操作是將Person類存儲(chǔ)到文件中,這個(gè)文件名我定義為Person.ser。這樣這個(gè)過程才算結(jié)束,但這里的結(jié)束并不是程序結(jié)束,而是完成了1操作,整個(gè)程序并沒有結(jié)束,除非用戶選擇4退出程序,否則程序一直執(zhí)行。
          )

          如果用戶選擇2,那么程序查看所有人員的信息(
          在這個(gè)過程中,程序要將Person.ser文件中的內(nèi)容寫入到程序中,并打印到控制臺(tái)顯示,執(zhí)行完這一步之后,程序返回上一步操作,在這里程序仍然沒有退出。
          )

          如果用戶選擇3,程序進(jìn)入的是對(duì)信息進(jìn)行修改的頁面(
          這個(gè)過程相對(duì)來說比較復(fù)雜,因?yàn)檫@個(gè)過程涉及到Person.ser文件內(nèi)容的寫入和寫出過程,也就是先把文件中的內(nèi)容輸出到控制臺(tái)顯示當(dāng)前用戶的信息,等待用戶輸入新的信息,當(dāng)用戶輸入信息后,要將原來的信息進(jìn)行覆蓋,也就是將信息從新寫到Person.ser中——這里我們僅僅考慮Person.ser中只有一個(gè)Person的情況。
          )



          通過以上分析,我們可以很清楚的知道,這個(gè)程序需要一個(gè)循環(huán)來做支撐,并且這個(gè)循環(huán)每執(zhí)行一次都要輸出圖1的內(nèi)容。

          首先新建一個(gè)Persion類


          package Object;

          import java.io.Serializable;

          //要想將類存儲(chǔ)在文件中必須實(shí)現(xiàn)Serializable接口?。。?/p>


          public class Person implements Serializable{
           private String name;
           private int age;
           private float score;
           
           public Person(String name, int age, float score){
            this.name = name;
            this.age = age;
            this.score = score;
           }
           
           public String getName() {
            return name;
           }
           public void setName(String name) {
            this.name = name;
           }
           public int getAge() {
            return age;
           }
           public void setAge(int age) {
            this.age = age;
           }
           public float getScore() {
            return score;
           }
           public void setScore(float score) {
            this.score = score;
           }
           
           public String toString(){
            return "NAME: " + this.name + " AGE: " + this.age + " SCORE: " + this.score;
           }

          }



          Text類中包含了程序中所有的text信息


          package Text;

          /**
           *
           *   這個(gè)類是用來輸出整個(gè)程序中要輸出的所有的Text信息?。。?br />  *   Text類中沒有任何屬性,只有幾個(gè)輸出文本的方法!!!
           *
           *
           * */


          public class Text {
           
           //這個(gè)方法用來顯示用戶運(yùn)行程序時(shí)的信息
           public String mainText(){
            return "\n\t\t1.增加人員的信息" + "\n\t\t2.瀏覽人員的信息" + "\n\t\t3.修改人員的信息" + "\n\t\t4.退出系統(tǒng)" + "\n\n請(qǐng)選擇要使用的操作:";
           }
           
           //輸入有誤信息
           public String errText(){
            return "您所輸入的信息有誤,請(qǐng)重新輸入?。。?;
           }
           
           //增加信息顯示
           public String addText(){
            return "請(qǐng)輸入您要增加的學(xué)生的信息";
           }
           public String addName(){
            return "請(qǐng)輸入學(xué)生的姓名:";
           }
           public String addAge(){
            return "請(qǐng)輸入學(xué)生的年齡:";
           }
           public String addScore(){
            return "請(qǐng)輸入學(xué)生的成績(jī):";
           }
           //修改的內(nèi)容Modify
           
           public String modifyText(){
            return "請(qǐng)輸入您要修改的內(nèi)容";
           }
           public String edd(){
            return "操作成功";
           }
           
          }

          Methods類中包含了所有的方法:

          package Methods;

          import java.io.File;
          import java.io.FileInputStream;
          import java.io.FileOutputStream;
          import java.io.ObjectInputStream;
          import java.io.ObjectOutputStream;
          import java.util.Scanner;

          import Object.Person;
          import Text.Text;

          /**
           *
           *   這個(gè)方法中包括了整個(gè)程序所要用到的方法,包括:
           *    從控制臺(tái)寫入(Input)信息方法;
           *    向控制臺(tái)寫出(Output)信息的方法;
           *    基本上包含了所有的方法
           *
           *
           * */
          public class Methods {
           
            private static Person obj; 
           //用戶從控制臺(tái)向程序?qū)懭霐?shù)據(jù),用來選擇用戶想要的操作
           public int InputSelect(){
            Scanner inputSelect = new Scanner(System.in);
            int select = inputSelect.nextInt();
            return select;
           }
           
           //增加Person信息方法
           public Person InputPerson(){
            Text text = new Text();
            Scanner str = new Scanner(System.in);
            
            System.out.println(text.addText() + "\n" + text.addName());
            String name = str.next();
            System.out.println(text.addAge());
            int age = str.nextInt();
            System.out.println(text.addScore());
            float score = str.nextFloat();
            
            Person p = new Person(name, age, score);
            return p;
           }
           
           
           //將類從程序中寫出,寫到文件中
           public void Output(Person p) throws Exception{ 
            ObjectOutputStream out = null;
            out = new ObjectOutputStream(new FileOutputStream(new File("e:\\person.ser")));
            out.writeObject(p);
            out.close();
           }
           
           //從文件中讀入信息
           public Person Output() throws Exception{
            ObjectInputStream in = null;
            in = new ObjectInputStream(new FileInputStream(new File("e:\\person.ser")));
            obj = (Person)in.readObject();
            Person p = obj; 
            in.close();
            return p;
           }

           //修改類的方法
           public void ModifyPerson() throws Exception{
            Text text = new Text();
            Scanner str = new Scanner(System.in);
            
            //先從文件中讀入信息
            Person p = this.Output();
            System.out.println(text.modifyText());
            System.out.println("修改前的內(nèi)容為: \n" + p);
            this.Output(this.InputPerson());
            text.edd();
           }
           }


          Main用來調(diào)用這些方法,完成想要的結(jié)果

          package Main;

          import Methods.Methods;
          import Object.Person;
          import Text.Text;

          /**
           *
           *   這里是程序的入口,當(dāng)執(zhí)行這個(gè)程序的時(shí)候首先打印了圖1的內(nèi)容,為了表現(xiàn)面向?qū)ο蟮乃枷?,我將程序中首先要打印的信?br />  *   放入到一個(gè)Text類中。
           *   因?yàn)閮H僅當(dāng)用戶選擇了退出程序的時(shí)候才能退出程序,所以這個(gè)程序必須用一個(gè)‘死’循環(huán),只有當(dāng)用戶選擇了4的時(shí)候,用戶
           *   才退出程序!
           *
           * */

           

          public class Main {
           final static Text text = new Text();
           static Methods m = new Methods();
           public static void main(String[] args) throws Exception{
            
            boolean mainCycle = true;
            
            //有一個(gè)循序
            while(mainCycle){
             //只有當(dāng)用戶輸入的是4的時(shí)候程序才退出循環(huán)
             System.out.println( text.mainText());
             //捕獲控制臺(tái)用戶輸入的選擇信息
             int select = m.InputSelect();
             
             if(select == 4)//這里的判斷是——用戶輸入的信息等于4的時(shí)候程序結(jié)束循環(huán)
             {
              mainCycle = false;
             }
             else
             {
              switch(select)//用戶選擇的數(shù)據(jù)
              {
              case 1 : {
               Person pp = m.InputPerson();
               m.Output(pp);
               System.out.println(text.edd());
               {}//利用輸入方法
              };break;//用戶增加人員信息方法
              case 2 : {
               System.out.println(m.Output());
              };break;//瀏覽人員的信息
              
              case 3 : {
               Person p = m.Output();
               System.out.println(text.modifyText());
               p = m.InputPerson();
               m.Output(p);
               System.out.println(text.edd());
              };break;//修改人員的信息
              
              default : {
               System.out.println(text.errText());
              }
              }
             }
             
            }
           
            
           }

          }


          這個(gè)程序的運(yùn)行結(jié)果如下:




          posted @ 2010-11-06 17:15 tovep 閱讀(371) | 評(píng)論 (0)編輯 收藏

          ======================================================================================

          這僅僅是一個(gè)很簡(jiǎn)單的醫(yī)院掛號(hào)系統(tǒng),雖然涉及到一些C/S架構(gòu)思想,但并沒有按照C/S架構(gòu)去實(shí)現(xiàn)

          還請(qǐng)大家見諒!!!

          ======================================================================================



          **************************************************************************************

          首先,新建一些輔助的類。
                 比如:Patients類,用于存放掛號(hào)的病人;Init類,用于預(yù)先存儲(chǔ)一些病人,這樣就可以方
          便的測(cè)試Doctor類;還有一個(gè)Server類,相當(dāng)于一個(gè)服務(wù)器。

          **************************************************************************************


          Patients類


          package Queue;
                  /**

                          定義一個(gè)Patients類,這個(gè)類從寫了toString方法,可以方便的進(jìn)行輸出!

                  */


          public class Patients {
             
             
              private String name;
              private String id;
             
             
              public String getName() {
                  return name;
              }
              public void setName(String name) {
                  this.name = name;
              }
              public String getId() {
                  return id;
              }
              public void setId(String id) {
                  this.id = id;
              }
              //這里從寫了toString方法
              public String toString(){
                  return "病人的ID是: " + this.id + " \n\n病人的姓名是: " + this.name;
              }
          }



          Init類:

          package Queue;

          import java.util.HashMap;
          import java.util.LinkedList;
          import java.util.Map;
          import java.util.Queue;


                  /**
                   *
                   * @author toveping
                   * 向一個(gè)隊(duì)列中加入一些病人,對(duì)醫(yī)生的客戶端進(jìn)行測(cè)試?。?!
                   *
                   *      
                   */
          public class Init {
              public Map init(String no){
                  Map<String, LinkedList<Patients>> queueSystem = new HashMap<String, LinkedList<Patients>>();
                  LinkedList<Patients> patQueue = new LinkedList<Patients>();   
                  for(int i =0;i<20;i++){
                      Patients p =  new Patients();
                      p.setId(i + "");
                      p.setName("A" + i);
                      patQueue.add(p);
                  }
                  queueSystem.put(no, patQueue);
                  return queueSystem;
              }
          }



          Server類:


          package Queue;

                  /**

                          定義一個(gè)Server類相當(dāng)于服務(wù)器,掛號(hào)客戶端增加一個(gè)病人的話,相應(yīng)的存儲(chǔ)在這里,可以供Doctor調(diào)用!!!

                  */

          import java.util.HashMap;
          import java.util.LinkedList;
          import java.util.Map;
          import java.util.Queue;

          public class Server {
             
             
              //這是病人的隊(duì)列
              Queue<Patients> patQueue = new LinkedList<Patients>();
              //String 是醫(yī)生的代號(hào) ;Queue 是病人的隊(duì)列
              Map<String, Queue> queueSystem = new HashMap<String, Queue>();
             
             
              public int serverAdd(String no){
                  Map<String, LinkedList<Patients>> queueSystem = new HashMap<String, LinkedList<Patients>>();
                  LinkedList<Patients> patQueue = new LinkedList<Patients>();   
                  Patients p = new Patients();
                  p.setId(patQueue.size()+"");
                  patQueue.add(p);
                  queueSystem.put(no, patQueue);
                 

                  return patQueue.size();
              }
          }



          **************************************************************************************



          下面是掛號(hào)客戶端:

          **************************************************************************************

          package Queue;

                  /**

                          這是一個(gè)掛號(hào)客戶端,對(duì)會(huì)診的病人進(jìn)行掛號(hào),以及方便掛號(hào)的病人容易的掛到自己想要的專家!!!

                  */

          import org.eclipse.swt.SWT;
          import org.eclipse.swt.events.SelectionAdapter;
          import org.eclipse.swt.events.SelectionEvent;
          import org.eclipse.swt.layout.FillLayout;
          import org.eclipse.swt.widgets.Button;
          import org.eclipse.swt.widgets.Display;
          import org.eclipse.swt.widgets.Shell;
          import org.eclipse.swt.widgets.Text;

          public class Client {
              public static void main(String[] args){
                  Display display = new Display();  
                  Shell shell = new Shell(display);  
                  shell.setLayout(new FillLayout());  
                  shell.setText("專家掛號(hào)系統(tǒng)");     
                  shell.open();  
                  shell.setBounds(190, 100, 800, 600);
                 
                  final Text txt = new Text(shell,SWT.MULTI);
                  txt.setBounds(200, 50, 400, 300);
                 
                  Button firstButton = new Button(shell,SWT.NULL);
                  firstButton.setText("一號(hào)專家");
                  firstButton.setBounds(100, 400, 120, 65);
                 
                  firstButton.addSelectionListener(new SelectionAdapter() {
                          Server ser =  new Server();
                          int i = ser.serverAdd("1");
                      public void widgetSelected(SelectionEvent e) {
                         
                          txt.setText("掛號(hào)成功\n" + "您選的專家是一號(hào)專家\n" + "您前面有" + i + "\n請(qǐng)耐心等待?。?);
                          i++;
                          }
                  });
                 

                  Button secondButton = new Button(shell,SWT.NULL);
                  secondButton.setText("二號(hào)專家");
                  secondButton.setBounds(250, 400, 120, 65);
                 
                  secondButton.addSelectionListener(new SelectionAdapter() {
                          Server ser =  new Server();
                          int i = ser.serverAdd("2");
                      public void widgetSelected(SelectionEvent e) {
                         
                          txt.setText("掛號(hào)成功\n" + "您選的專家是二號(hào)專家\n" + "您前面有" + i + "\n請(qǐng)耐心等待??!");
                          i++;
                         
                          }
                  });
                 
                 
                  Button thirdButton = new Button(shell,SWT.NULL);
                  thirdButton.setText("三號(hào)專家");
                  thirdButton.setBounds(400, 400, 120, 65);
                 
                  thirdButton.addSelectionListener(new SelectionAdapter() {
                          Server ser =  new Server();
                          int i = ser.serverAdd("3");
                      public void widgetSelected(SelectionEvent e) {
                         
                          txt.setText("掛號(hào)成功\n" + "您選的專家是三號(hào)專家\n" + "您前面有" + i + "\n請(qǐng)耐心等待??!");
                          i++;
                         
                          }
                  });
                 
                 
                  Button fourthButton = new Button(shell,SWT.NULL);
                  fourthButton.setText("四號(hào)專家");
                  fourthButton.setBounds(550, 400, 120, 65);
                 
                 
                  fourthButton.addSelectionListener(new SelectionAdapter() {
                      Server ser =  new Server();
                      int i = ser.serverAdd("4");
                      public void widgetSelected(SelectionEvent e) {
                         
                         
                          txt.setText("掛號(hào)成功\n" + "您選的專家是四號(hào)專家\n" + "您前面有" + i + "\n請(qǐng)耐心等待!!");
                          i++;
                         
                          }
                  });
                 
                 
                 
                
                  while (!shell.isDisposed()) {  
                      if (!display.readAndDispatch())  
                      display.sleep();  
                 } 
                 
                  display.dispose();  
              }

          }



          運(yùn)行結(jié)果如下圖:





          **************************************************************************************


          最后是Doctor的客戶端:

          **************************************************************************************

          package Queue;

                  /**

                          這里定義了Doctor使用的客戶端,用來顯示會(huì)診的一些基本信息!

                  */


          import java.util.LinkedList;
          import org.eclipse.swt.SWT;
          import org.eclipse.swt.events.SelectionAdapter;
          import org.eclipse.swt.events.SelectionEvent;
          import org.eclipse.swt.layout.FillLayout;
          import org.eclipse.swt.widgets.Button;
          import org.eclipse.swt.widgets.Display;
          import org.eclipse.swt.widgets.Shell;
          import org.eclipse.swt.widgets.Text;

          public class Doctor {
              public static void main(String[] args){
                  Display display = new Display();  
                  Shell shell = new Shell(display);  
                  shell.setLayout(new FillLayout());  
                  shell.setText("醫(yī)生會(huì)診系統(tǒng)");     
                  shell.open();  
                  shell.setMaximized(true);
                 
                  final Text firsttxt = new Text(shell,SWT.MULTI);
                  firsttxt.setBounds(100, 50, 200, 300);
                 
                  Button firstButton = new Button(shell,SWT.NULL);
                  firstButton.setText("下一個(gè)(一號(hào)專家)");
                  firstButton.setBounds(150, 400, 120, 65);
                 
                  firstButton.addSelectionListener(new SelectionAdapter() {
                          Init aInit = new Init();
                          LinkedList lin = (LinkedList) aInit.init("1").get("1");
                      public void widgetSelected(SelectionEvent e) {
                         
                          firsttxt.setText("\n您正在診斷的病人信息:\n\n" + lin.remove());
                          }
                  });
                 
                  final Text secondtxt = new Text(shell,SWT.MULTI);
                  secondtxt.setBounds(400, 50, 200, 300);
                 
                  Button secondButton = new Button(shell,SWT.NULL);
                  secondButton.setText("下一個(gè)(二號(hào)專家)");
                  secondButton.setBounds(450, 400, 120, 65);
                 
                  secondButton.addSelectionListener(new SelectionAdapter() {
                          Init aInit = new Init();
                          LinkedList lin = (LinkedList) aInit.init("2").get("2");
                      public void widgetSelected(SelectionEvent e) {
                          secondtxt.setText("\n您正在診斷的病人信息:\n\n" + lin.remove());
                          }
                  });
                 
                  final Text thirdtxt = new Text(shell,SWT.MULTI);
                  thirdtxt.setBounds(750, 50, 200, 300);
                 
                  Button thirdButton = new Button(shell,SWT.NULL);
                  thirdButton.setText("下一個(gè)(三號(hào)專家)");
                  thirdButton.setBounds(800, 400, 120, 65);
                 
                  thirdButton.addSelectionListener(new SelectionAdapter() {
                      Init aInit = new Init();
                      LinkedList lin = (LinkedList) aInit.init("3").get("3");
                      public void widgetSelected(SelectionEvent e) {
                          thirdtxt.setText("\n您正在診斷的病人信息:\n\n" + lin.remove());
                          }
                  });
                 
                  final Text fourthtxt = new Text(shell,SWT.MULTI);
                  fourthtxt.setBounds(1050, 50, 200, 300);
                 
                  Button fourthButton = new Button(shell,SWT.NULL);
                  fourthButton.setText("下一個(gè)(四號(hào)專家)");
                  fourthButton.setBounds(1100, 400, 120, 65);
                 
                 
                  fourthButton.addSelectionListener(new SelectionAdapter() {
                      Init aInit = new Init();
                      LinkedList lin = (LinkedList) aInit.init("4").get("4");
                      public void widgetSelected(SelectionEvent e) {
                          fourthtxt.setText("\n您正在診斷的病人信息:\n\n" + lin.remove());
                          }
                  });
                 
                 
                 
                
                  while (!shell.isDisposed()) {  
                      if (!display.readAndDispatch())  
                      display.sleep();  
                 } 
                 
                  display.dispose();  
              }
          }


          運(yùn)行的結(jié)果如下圖:






          **************************************************************************************


          讓大家見笑了!

          posted @ 2010-10-31 21:10 tovep 閱讀(384) | 評(píng)論 (0)編輯 收藏
          曾以為QQ很神秘

          后來覺得QQ很簡(jiǎn)單,感覺無非就是一個(gè)QQ客戶端發(fā)送一個(gè)消息到服務(wù)器,然后服務(wù)器將消息發(fā)送到指定QQ客戶端

          現(xiàn)在把當(dāng)時(shí)想的過程畫了下來

          (大家別笑話我啊,當(dāng)時(shí)真的就是這么想的,感覺很簡(jiǎn)單——其實(shí),當(dāng)自己去實(shí)現(xiàn)的時(shí)候,真的很復(fù)雜!?。。?br />

          還寫了一些代碼,不過還不能具體運(yùn)行,僅僅是一個(gè)框架:

          我把這些都放在QQ包內(nèi):

          *****************************************************************
          首先,定義了一個(gè)客戶端接口——可能有點(diǎn)羅嗦,沒有完全實(shí)現(xiàn)接口的作用

          package QQ;

                  /**

                      這個(gè)接口的作用是用來實(shí)現(xiàn)客戶端向服務(wù)器發(fā)送消息的接口。

                  */

          public interface QQClientInterface {
             
              public void SendServerMessage();
              public QQMessage ToFromQQServer();

          }


          ****************************************************************

          ================================================================

          ****************************************************************

          這是一個(gè)服務(wù)器的接口——貌似和上面的接口重復(fù)了?。?!


          package QQ;

                  /**

                          用來實(shí)現(xiàn)QQ服務(wù)器向QQ客戶端發(fā)送消息,和接受QQ客戶端發(fā)送來的消息

                  */

          public interface QQServerInterface {
             
              public QQMessage SendMessageToQQClient(String QQName);
              public void GetMessageFromQQClient();

          }

          ****************************************************************

          ================================================================

          ****************************************************************

          這里插入一個(gè)消息類QQMessage

          package QQ;

              /**

                  這個(gè)類專門用來存放QQClient和QQserver發(fā)送的消息。

               */

          public class QQMessage {
             
              private String FromQQName;
              private String ToQQName;
             
             
              public String getFromQQName() {
                  return FromQQName;
              }
              public void setFromQQName(String fromQQName) {
                  FromQQName = fromQQName;
              }
              public String getToQQName() {
                  return ToQQName;
              }
              public void setToQQName(String toQQName) {
                  ToQQName = toQQName;
              }

             
          ****************************************************************

          ================================================================

          ****************************************************************

          下面可以重點(diǎn)~\(≧▽≦)/~啦啦啦

          這是QQ客戶端的代碼:


          package QQ;

          public class QQClient implements QQClientInterface {

              private String QQName;
              private QQMessage message;
             

              public void SendServerMessage() {
                 
                  /**
                 
                          用來實(shí)現(xiàn)對(duì)QQ服務(wù)器發(fā)送消息(調(diào)用QQ服務(wù)器的接受消息的方法,將消息發(fā)送到服務(wù)器)
                   
                  */   
             
                 
                 
                 
                  }




              public QQMessage ToFromQQServer() {
                 
                  /**
                 
                          隔一段時(shí)間向服務(wù)器發(fā)送一個(gè)消息,帶有自己QQName的消息,然后QQ服務(wù)器檢索,是否
                          有消息要傳給這個(gè)QQ,如果有將消息傳過來,并顯示。
                         
                  */
                 
                  return null;
              }


              public String getQQName() {
                  return QQName;
              }


              public void setQQName(String qQName) {
                  QQName = qQName;
              }


              public QQMessage getMessage() {
                  return message;
              }


              public void setMessage(QQMessage message) {
                  this.message = message;
              }
             
             

          }


          ****************************************************************

          ================================================================

          ****************************************************************

          最后是服務(wù)器端的代碼:

          package QQ;

          import java.util.HashMap;
          import java.util.Map;

          public class QQServer implements QQServerInterface {
             
              Map<String,QQMessage> qqMessage = new HashMap<String,QQMessage>();


              public QQMessage SendMessageToQQClient(String QQName) {
                 
                  /**
                   
                           QQServer要發(fā)送消息必須滿足兩個(gè)條件:
                          
                                       1. QQ客戶端將自己的QQName發(fā)送給QQServer,然后根據(jù)自己的QQNameQQ服務(wù)器開始遍歷qqMessage;
                                       2. qqMessage的Values不是null。
                                      
                               如果QQMessage不為空,則將自己的V發(fā)送給QQName,否則返回Null;
                   
                  */
                 
                  return null;
              }



              public void GetMessageFromQQClient() {

                  /**
                   
                   QQServer接受消息,并將消息存放在qqMessage中
                  
           
                  */
                 
              }

          }


          ****************************************************************
          ****************************************************************

          暫時(shí)還沒寫出一個(gè)簡(jiǎn)單QQ程序,大家盡心等待!我一定會(huì)寫出一個(gè)讓自己滿意的即時(shí)通訊程序!










          posted @ 2010-10-29 21:12 tovep 閱讀(1291) | 評(píng)論 (6)編輯 收藏
          所謂的抽象類就是一個(gè)類前加上一個(gè)abstract修飾的類,我覺得抽象類更像一個(gè)特殊的類,雖然抽象類和類也有些不同之處。

          抽象類和類的區(qū)別:

              抽象——就是一種具有共同屬性的集體概括。

          抽象類中可以有抽象方法,也可以其他的方法及屬性;

          抽象類和類的最大區(qū)別在于: 抽象類可以有抽象方法,但類中一定沒有抽象方法,只要一個(gè)類有抽象方法那么這個(gè)類一定是抽象方法,抽象方法

          是由abstract修飾的方法,但在抽象類中并沒有去定義這個(gè)方法,這個(gè)抽象方法必須在它的子類中得到定義——這是必須的! 從這里可以看出,

          抽象類的作用是建立在繼承之上的。

          另外需要注意的是:抽象類中不一定有抽象方法,但有抽象方法的類一定是抽象類!

          繼承抽象類的子類,必須實(shí)現(xiàn)父類(這是抽象類)中所有的抽象方法!

          其他的,抽象類和普通的類沒有區(qū)別!

          暫且不舉例子,胃痛,今天就到這里!實(shí)在撐不住了!

          posted @ 2010-10-29 00:04 tovep 閱讀(309) | 評(píng)論 (0)編輯 收藏

             this 相當(dāng)于本類,說白了就是“自己的”。
             super 指的是父類,說白了就是自己繼承的類。

          posted @ 2010-10-28 23:12 tovep 閱讀(150) | 評(píng)論 (0)編輯 收藏
          面向?qū)ο蟮娜筇卣魇牵悍庋b,繼承和多態(tài)!

          封裝:

              所謂的封裝就是將類包裝起來,可以理解為  將一個(gè)類包裝成一個(gè)黑箱子,外部對(duì)內(nèi)部是不可見的!

          但這個(gè)箱子(封裝的類)有若干個(gè)接口,這些接口可以向這個(gè)黑箱子傳送一些數(shù)據(jù),這個(gè)箱子做一些處理,然后從另外的接口(也可以從輸入的接

          口)接受處理完的信息。

          說白了,封裝就是將一個(gè)類包裝起來,使類內(nèi)部數(shù)據(jù)對(duì)外不可見,這樣的話,這個(gè)類就更安全了!只要你從一個(gè)接口輸入信心,就可以從另外的接口(也可以從輸入的接口)接受你想要的處理完的數(shù)據(jù)!


          繼承:

              所謂的繼承就是將一個(gè)父類(被繼承的類)的全部(包括屬性和方法)包含在子類(繼承的類)中,這樣做可以減少代碼量,同時(shí)也可以將

          具有某些相同屬性的類,先寫出一個(gè)父類,然后繼承,在子類中,子類可以有自己的屬性和方法。

          舉一個(gè)很經(jīng)典的例子:

                    父類就相當(dāng)于你的父親,子類就相當(dāng)于你。(基因就相當(dāng)于類中方法,屬性就是你的姓名啊等等)你父親的基因你都有,但你又從你

          母親那繼承了很多基因,但在JAVA中只允許單程繼承,也就是你有且只有一個(gè)父類,但子類中確包含了父類中沒有的屬性和方法,你可以這么理

          解,就是你繼承了你“母類”屬性和方法——注意:JAVA中并沒有“母類”。



          多態(tài):
           
              多態(tài)是什么呢? 多態(tài)多態(tài)就是有很多狀態(tài)。

              比如還拿上面那個(gè)經(jīng)典的例子來說,父類中的方法你也有,但你可以將這個(gè)方法的執(zhí)行過程按照自己的方式寫出來!這樣呢,這個(gè)方法才真

          正屬于你(舉個(gè)小例子:就是你的父親可以吃飯,你也可以吃飯,但你們喜歡吃什么,喜歡怎么吃,吃多少,肯定不一樣!)。在子類中要從寫

          自己的方法,子類中方法的名字,參數(shù)以及參數(shù)屬性的順序必須相同。

          另外,還有一種多態(tài)形式是表現(xiàn)在一個(gè)類中的構(gòu)造方法,他們的方法名肯定相同且和子類的類名相同,但構(gòu)造方法的參數(shù)個(gè)數(shù),順序和類型必須

          有一樣是不相同的!


          按我目前的理解,僅僅能解釋成這樣!如果以后有新的理解,一定會(huì)更新這篇博客!






          這是一個(gè)用SWT做的用戶登陸程序:

          ----------------------可視化用戶登陸系統(tǒng)----------------------------



          import org.eclipse.swt.SWT;
          import org.eclipse.swt.events.SelectionAdapter;
          import org.eclipse.swt.events.SelectionEvent;
          import org.eclipse.swt.widgets.Button;
          import org.eclipse.swt.widgets.Display;
          import org.eclipse.swt.widgets.Label;
          import org.eclipse.swt.widgets.Shell;
          import org.eclipse.swt.widgets.Text;

          public class Swt_Check {

              public static void main(String[] args) {
                  Display mianWindow = new Display();
                  //創(chuàng)建一個(gè)主窗口
                  final Shell window = new Shell();
                  //打開主窗口大小
                  window.setBounds(30, 75, 300, 400);
                  //設(shè)置主窗口的標(biāo)題
                  window.setText("登陸界面");
             
                  //創(chuàng)建觸發(fā)按鈕以及按鈕的顯示文字和大小位置
                  Button surebutton = new Button(window,SWT.NONE);
                  Button nosurebutton = new Button(window,SWT.NONE);
                  surebutton.setText("確定");
                  nosurebutton.setText("取消");
                  surebutton.setBounds(160, 235, 75, 30);
                  nosurebutton.setBounds(60, 235, 75, 30);
                 
                  //創(chuàng)建輸入Text框及其位置
                  final Text nameText = new Text(window,SWT.NONE);
                  final Text passNumber = new Text(window,SWT.PASSWORD);
                  nameText.setBounds(100, 100, 110, 20);
                  passNumber.setBounds(100, 160, 110, 20);
                 
                  //創(chuàng)建標(biāo)簽
                  Label nameLabel = new Label(window,SWT.NONE);
                  nameLabel.setText("賬號(hào):");
                  nameLabel.setBounds(60, 105, 40,20);
                 
                  Label passLabel = new Label(window,SWT.NONE);
                  passLabel.setText("密碼:");
                  passLabel.setBounds(60, 165, 40, 20);
                 
                  //輸入后單擊確定后的操作
                  surebutton.addSelectionListener(new SelectionAdapter(){
                      public void widgetSelected(SelectionEvent e){
                          //創(chuàng)建一個(gè)adm數(shù)組
                          Admin[] admin = new Admin[3];
                         
                          //實(shí)例化三個(gè)賬號(hào)
                          admin[0] = new Admin("admin", "admin");
                          admin[1] = new Admin("admin1", "pastNumber");
                          admin[2] = new Admin("admin2", "pastNumber");
                         
                         
                          //新建一個(gè)布爾型和整型數(shù)據(jù),布爾值 用于判斷,整型判斷是那個(gè)賬號(hào)登陸
                          boolean past = false;
                          int pastN = 0;
                         
                          //判斷賬號(hào)密碼是否正確
                          for(int i=0;i<admin.length;i++){
                              if(admin[i].getName().equals(nameText.getText())&&admin[i].getPastNumber().equals(passNumber.getText())){
                                  past = true;
                                  pastN = i;
                                  break;
                              }
                          }
                         
                          //輸出賬號(hào)密碼是否正確
                          if(past){
                              //從新打開一個(gè)界面輸出歡迎用戶
                              Shell welWindow = new Shell(window);
                              welWindow.setBounds(120, 130, 450, 200);
                              Label welText = new Label(welWindow,SWT.NONE);
                              welText.setText("歡迎 " +admin[pastN].getName() + "用戶登陸!");
                              welText.setBounds(140, 60, 180, 90);
                              welWindow.open();
                          }
                          else{
                              Shell noPassWindow = new Shell(window);
                              noPassWindow.setBounds(120, 130, 450, 200);
                              Label noPassText = new Label(noPassWindow,SWT.NONE);
                              noPassText.setText("對(duì)不起,您輸入的賬號(hào)或密碼有誤!");
                              noPassText.setBounds(140, 60, 180, 90);
                              noPassWindow.open();
                          }
                      }

                 
                  }
                 
                  );
                 
                 
                  nosurebutton.addSelectionListener(new SelectionAdapter(){
                      public void widgetSelected(SelectionEvent e){{
                          window.close();
                      }}});
                  //打開窗體
                  window.open();
                  while(!window.isDisposed()){//如果主窗體沒有關(guān)閉則一直循環(huán)
                      if(!mianWindow.readAndDispatch()){//如果display不忙
                          mianWindow.sleep();//休眠
                      }
                  }
                  mianWindow.dispose();
                 
              }

          }

          class Admin{
              private String name;
              private String pastNumber;
             
              Admin(String name, String pastNumber){
                  this.name = name;
                  this.pastNumber = pastNumber;
              }

              public String getName() {
                  return name;
              }

              public void setName(String name) {
                  this.name = name;
              }

              public String getPastNumber() {
                  return pastNumber;
              }

              public void setPastNumber(String pastNumber) {
                  this.pastNumber = pastNumber;
              }
             
             
             
          }

          =========================程序的運(yùn)行結(jié)果如下==============================
          打開時(shí),用戶的登陸界面




          當(dāng)輸入的賬號(hào)密碼都正確時(shí):




          當(dāng)密碼或者賬號(hào)不正確:





          希望這個(gè)程序?qū)Υ蠹矣兴鶐椭?br />
          posted @ 2010-10-18 01:43 tovep 閱讀(414) | 評(píng)論 (2)編輯 收藏


          -----------------------用戶登陸原----------------------------


          public class Check {

              public static void main(String[] args) {

                  //創(chuàng)建一個(gè)adm數(shù)組
                  Admin[] adm = new Admin[3];
                 
                  //三個(gè)賬號(hào)
                  adm[0] = new Admin("admin", "pastNumber");
                  adm[1] = new Admin("admin1", "pastNumber");
                  adm[2] = new Admin("admin2", "pastNumber");
                 
                  //使用標(biāo)準(zhǔn)輸入流函數(shù),從鍵盤輸入一些信息
                  Scanner scan = new Scanner(System.in);
                  System.out.println("請(qǐng)輸入你的賬號(hào):");
                 
                  //將輸入的賬號(hào)放入putName
                  String putName = scan.next();
                  System.out.println("請(qǐng)輸入你的賬號(hào)密碼:");
                 
                  //將輸入的密碼放入普通putPassNumber中
                  String putPassNumber = scan.next();
                 
                  //新建一個(gè)布爾型和整型數(shù)據(jù),布爾值 用于判斷,整型判斷是那個(gè)賬號(hào)登陸
                  boolean past = false;
                  int pastN = 0;
                 
                  //判斷賬號(hào)密碼是否正確
                  for(int i=0;i<adm.length;i++){
                      if(adm[i].getName().equals(putName)&&adm[i].getPastNumber().equals(putPassNumber)){
                          past = true;
                          pastN = i;
                          break;
                      }
                  }
                 
                  //輸出賬號(hào)密碼是否正確
                  if(past){
                          System.out.println("歡迎" + adm[pastN].getName() + "登陸");
                      }
                  else{
                          System.out.println("輸入有誤,請(qǐng)正確輸入你的賬號(hào)和密碼!");
                      }
              }

          }
          class Admin{
              private String name;
              private String pastNumber;
             
              Admin(String name, String pastNumber){
                  this.name = name;
                  this.pastNumber = pastNumber;
              }

              public String getName() {
                  return name;
              }

              public void setName(String name) {
                  this.name = name;
              }

              public String getPastNumber() {
                  return pastNumber;
              }

              public void setPastNumber(String pastNumber) {
                  this.pastNumber = pastNumber;
              }

          }

          運(yùn)行結(jié)果為:






          當(dāng)密碼或者賬號(hào)不正確的時(shí)候輸出結(jié)果是:








          posted @ 2010-10-18 01:32 tovep 閱讀(168) | 評(píng)論 (0)編輯 收藏

          芝加哥的同學(xué)聚會(huì)



          芝加哥一個(gè)陽光明明媚的星期天,許多過去在學(xué)校曾是好朋友的同班同學(xué)聚在一起搞午餐會(huì)。前一天晚上,他們剛參加完全體高中同學(xué)的聚會(huì)。在一陣打鬧嬉笑和豐盛和午餐后,他們坐下來開始了饒有興致的交談,希望彼此多了解一些分別后的生活經(jīng)歷。

          安杰拉曾是班上最受歡迎的人之一,她第一個(gè)發(fā)表感慨:“生活真的是跟我們做學(xué)生時(shí)想像的完全不一樣,變化太多了。”

          “的確如此!”內(nèi)森附和道。內(nèi)森正如大家所預(yù)料的那樣,畢業(yè)后就進(jìn)入了他的家族企業(yè)。這家企業(yè)的經(jīng)營模式經(jīng)年未變,在當(dāng)?shù)厝说挠洃浿?,那可是一家歷史悠久的老字號(hào)了。因此,當(dāng)內(nèi)森若有所思地附和著安杰拉,并發(fā)出如此感嘆時(shí),大家都感到有些吃驚。

          內(nèi)森好像并未注意到大家的詫異,表情憂郁地接著說:“你們是否注意到,當(dāng)周圍的事情已經(jīng)發(fā)生變化時(shí),我們卻不想對(duì)自己有所改變。”

          卡洛斯接著說道:“我們拒絕改變,是因?yàn)槲覀兒ε赂淖儭?#8221;

          杰西卡接過他的話:“噢,卡洛斯,你可是學(xué)校的足球隊(duì)長(zhǎng),我們心目中的英雄,我從沒想過還有什么東西可以讓你害怕的。”

          大家都笑了起來。他們都意識(shí)到,盡管大家畢業(yè)后都在各自不同的方面發(fā)展——從在家里工作到在外經(jīng)營管理公司——但好像都有著類似的感覺——害怕改變。


          這些年來,每個(gè)人都試圖應(yīng)對(duì)發(fā)生在生活中的各種意想不到的變化。但大家都承認(rèn),他們找不到一種很好的應(yīng)對(duì)辦法。

          這時(shí),邁克爾發(fā)話了:“我過去也一直害怕改變,直到有一天,我們的生意出現(xiàn)了一個(gè)重大的變故,但我們公司所有的人都不知道該怎樣去應(yīng)付,由于我們沒能及時(shí)做出調(diào)整,使我們幾乎丟掉了全部的生意。”

          “后來,”邁克爾繼續(xù)講道:“我聽到了一個(gè)故事,這個(gè)故事使一切都改變了。”

          “此話怎講?”內(nèi)森問道。

          “喔,因?yàn)檫@個(gè)故事改變了我害怕改變的個(gè)性以及我對(duì)變化的看法——從害怕失去某些東西到期待獲得某些東西——它教會(huì)我如何去做。從那以后,我的一切都迅速地改善了——無論工作還是生活。”

          “是什么故事這么神奇?”好幾個(gè)人異口同聲地問道。

          “一開始,我被這個(gè)故事顯而易見的簡(jiǎn)單給苦惱了,它就像我們小時(shí)候聽膩了的那些寓言故事一樣。”

          “再后來,我把這個(gè)故事告訴我們公司里的其他人,其他人又講給其他人聽。很快,公司里的業(yè)務(wù)有了明顯的改進(jìn),因?yàn)槲覀兇蠹叶寄芗皶r(shí)地做出很好的調(diào)整以隨時(shí)應(yīng)對(duì)變化。與我的感受一樣,許多人都說,這個(gè)故事使他們的個(gè)人生活大受裨益。”

          “當(dāng)然,也有人說他們從中沒有得到什么,他們或者是知道這樣的教訓(xùn)而且已經(jīng)領(lǐng)教多次了。 或者,更普遍的是,他們覺得自己已經(jīng)懂得夠多,不需要再學(xué)習(xí)什么了。他們甚至假裝看不到如此多的人正在從中受益。”

          “我的一位有些呆板的高級(jí)主管就說,讀這個(gè)故事只是浪費(fèi)時(shí)間。然而大家都取笑他,把他比做故事中的一個(gè)角色——從不學(xué)習(xí)新的東西而且從不愿意改變。”
          安杰拉有些迫不及待:“別賣關(guān)子了,這究竟是一個(gè)什么樣的故事?”

          “故事的名字叫作‘誰動(dòng)了我的奶酪’。”

          大家都哄笑起來??逅拐f:“我想僅憑這個(gè)名字,我就已經(jīng)喜歡上這個(gè)故事了。你能講給我們聽聽嗎?或許我們也會(huì)從中有所收獲。”

          “當(dāng)然,”邁克爾答道:“我非常愿意把這個(gè)故事講給你們聽。它并不長(zhǎng)。”于是他開始給大家講述這個(gè)故事。



          “誰動(dòng)了我的奶酪”的故事(1)


          從前,在一個(gè)遙遠(yuǎn)的地方,住著四個(gè)小家伙。為了填飽肚子和享受樂趣,他們每天在不遠(yuǎn)處的一座奇妙的迷宮里跑來跑去,在那里尋找一種叫做“奶酪”的黃橙橙、香噴噴的食物。

          有兩個(gè)小家伙是老鼠,一個(gè)叫“嗅嗅”,另一個(gè)叫“匆匆”。另外兩個(gè)家伙則是小矮人,和老鼠一般大小,但和人一個(gè)模樣,而且他們的行為也和我們今天的人類差不多。他倆的名字,一個(gè)叫“哼哼”,另一個(gè)叫“唧唧”。

          由于他們四個(gè)實(shí)在太小了,他們?cè)诟墒裁串?dāng)然不太會(huì)引起旁人的注意。但如果你湊近去仔細(xì)觀察,你會(huì)發(fā)現(xiàn)許多令人驚奇不已的事情!

          兩個(gè)老鼠和兩個(gè)小矮人每天都在迷宮中度過,在其中尋找他們各自喜歡的奶酪。嗅嗅、匆匆的大腦和其他嚙齒類動(dòng)物的差不多一樣簡(jiǎn)單,但他們有很好的直覺。和別的老鼠一樣,他們喜歡的是那種適合啃咬的、硬一點(diǎn)的奶酪。

          而那兩個(gè)小矮人,哼哼和唧唧,則靠腦袋行事,他們的腦袋里裝滿了各種信念和情感。他們要找的是一種帶字母“C”的奶酪。他們相信,這樣的奶酪會(huì)給他們帶來幸福,使他們成功。

          盡管小老鼠和小矮人的目標(biāo)各不相同,但他們做的事情是差不多的。每天早上,他們會(huì)各自穿上運(yùn)動(dòng)服和慢跑鞋,離開他們的小房子,跑進(jìn)迷宮尋找他們各自鐘愛的奶酪。

          迷宮中有許多曲折的走廊和好像蜂窩似的房間,其中的一些房間里藏著美味的奶酪,但更多的地方則是黑暗的角落和隱蔽的死胡同,任何人走進(jìn)去都很容易迷路。

          同時(shí),這座迷宮還有一種神奇的力量,對(duì)那些找到出路的人,它能使他們享受到美好的生活。

          兩個(gè)老鼠,嗅嗅和匆匆,總是運(yùn)用簡(jiǎn)單低效的反復(fù)嘗試的辦法找奶酪。他們跑進(jìn)一條走廊,如果走廊里的房間都是空的,他們就返回來,再去另一條走廊搜 尋。沒有奶酪的走廊他們都會(huì)記住。就這樣,很快地他們從一個(gè)地方找到另一個(gè)地方。嗅嗅可以用他那了不起的鼻子嗅出奶酪的大致方向,匆匆則跑在前面開路。然 而迷宮太大太復(fù)雜,如你所料,他們經(jīng)常會(huì)迷路,離開正道走錯(cuò)了方向,有時(shí)甚至還會(huì)撞到墻上。

          而兩個(gè)小矮人,哼哼和唧唧,則運(yùn)用他們思考的能力,從過去的經(jīng)驗(yàn)中學(xué)習(xí)。他們靠復(fù)雜的腦筋,搞出了一套復(fù)雜的尋找奶酪的方法。

          哼哼和唧唧的方法比他們的老鼠朋友要高效,因此他們走進(jìn)死胡同和碰壁的情況要比小老鼠們少得多。他們也為此而時(shí)常沾沾自喜很是得意,甚至有些看不起 低智商的老鼠朋友。然而有時(shí)候,人類復(fù)雜的頭腦所帶來的復(fù)雜感情也會(huì)戰(zhàn)勝他們理性思維,使他們看問題的眼光變得黯淡起來。這也使得他們?cè)诿詫m中的生活更加 復(fù)雜化,也更具有挑戰(zhàn)性了。

          但是不管怎樣,這四個(gè)家伙——嗅嗅和匆匆,哼哼和唧唧,都以他們各自的方式不懈地追尋著他們想要得到的東西。最后,終于有一天,在某個(gè)走廊的盡頭,在奶酪C站,他們都找到了自己想要的奶酪。

          這里真是一個(gè)天堂,四個(gè)小家伙被眼前的情景驚呆了,無數(shù)各式各樣的奶酪堆積如山,閃著誘人的光亮。四個(gè)小家伙呆了半晌,然后瘋了般地沖進(jìn)奶酪堆,開始狂歡。

          從那以后,這四個(gè)家伙,小老鼠和小矮人,每天早上穿上他們的跑步裝備后便毫不猶豫地直奔奶酪C站。不久,他們都建立了熟悉的路線,并形成了各自的生活習(xí)慣。

          嗅嗅和匆匆仍舊每天都起得很早,然后沿著相同的路線跑進(jìn)迷宮中。

          當(dāng)老鼠們到達(dá)目的地后,他們脫下自己的跑鞋,有條不紊地將兩只鞋系在一起,掛在脖子上——以便需要的時(shí)候能夠很快穿上。然后,他們才開始盡情地享用奶酪。

          在剛開始的一段時(shí)間里,哼哼和唧唧也是如此行事,每天早晨趕到奶酪C站,按部就班的把鞋子掛在脖子上,享用在那里等著他們的美味佳肴。

          然而,不久以后,小矮人們改變了他們的常規(guī)。

          哼哼和唧唧每天起得比老鼠們晚一些,懶懶地穿好運(yùn)動(dòng)服,然后信步走到奶酪C站。不管怎樣,反正已經(jīng)找到了奶酪。

          他們從沒想過,奶酪是從哪里來的,是誰把它們放在那里的。他們只是理所當(dāng)然地認(rèn)為,奶酷總是會(huì)在那里的。

          每天,哼哼和唧唧到達(dá)奶酪C站以后,就像回到了自己家一樣,舒適地呆在那里。他們脫下身上的運(yùn)動(dòng)衣,把它們掛起來,甩掉腳上的鞋子,換上拖鞋。他們找到了奶酪,感覺實(shí)在是太愜意了。

          “真是太好了!”哼哼說:“這里有這么多的奶酪,足夠我們享用一輩子了。”小矮人們充滿了幸福和成功的感覺,覺得從此可以無憂無慮了。


          “誰動(dòng)了我的奶酪”的故事(2)


          不久,哼哼和唧唧更理所當(dāng)然地認(rèn)定,他們?cè)谀汤褻站發(fā)現(xiàn)的奶酪就是“他們自己的”奶酪了。這里的奶酪?guī)齑媸侨绱说呢S富,于是他們決定把家搬到更靠近奶酪C站的地方,還在周圍一帶開展了他們的社交活動(dòng)。

          為了使這里有更象家的感覺,哼哼和唧唧把墻壁裝飾了一通,還在墻上寫了一些格言,并且精心地畫上了一些非常可口的奶酪的圖案。他們看著這些圖畫和格言,會(huì)心地笑了。其中一幅圖畫的內(nèi)容是:

          擁有奶酪,就擁有幸福。

          有時(shí),他們會(huì)帶朋友來參觀他們?cè)谀汤褻站里成堆的奶酪,自豪地指著這些奶酪說:“多么美妙可口的奶酪呀,不是嗎?”有時(shí),他們還會(huì)與朋友們一起分享這些奶酪,而有時(shí)則單獨(dú)享用。

          “我們應(yīng)該擁有這些奶酪,”哼哼說,“為了找到它們,我們可是付出了長(zhǎng)期而艱苦的努力的,我們當(dāng)然有資格擁有它們。”他一邊說著一邊拿起一塊鮮美的奶酪放進(jìn)嘴里,享用起來,臉上流露出幸福的光彩。

          然后,就像往常一樣,哼哼享受完奶酪便睡著了,夢(mèng)中還露出滿足而愜意的笑容。

          每天晚上,小矮人們?cè)诿烂赖仫柌土四汤液螅蛽u搖擺擺地走回家,第二天早上他們又會(huì)信心十足地走進(jìn)奶酪C站,去享用更多奶酪。

          這樣的境況維持了相當(dāng)長(zhǎng)的一段時(shí)間。

          逐漸地,哼哼和唧唧的自信開始膨脹起來。面對(duì)成功,他們開始變得妄自尊大。在這種安逸的生活中,他們絲毫沒有察覺到正在發(fā)生的變化。

          隨著時(shí)間的流逝,嗅嗅和匆匆日復(fù)一日地重復(fù)著他們的生活。每天早早地趕到奶酪C站,四處聞一聞、抓一抓,看看這區(qū)域和前一天有什么不一樣。等到確定沒有任何異常后他們才會(huì)坐下來細(xì)細(xì)品味奶酪,好好享受一番。

          一天早上,當(dāng)嗅嗅和匆匆到達(dá)奶酪C站時(shí),發(fā)現(xiàn)這里已經(jīng)沒有奶酪了。

          對(duì)此,他們并不感到吃驚。因?yàn)樗麄冊(cè)缫巡煊X到,最近好像有一些奇異的事情正在奶酪C站里發(fā)生,因?yàn)檫@里的奶酪已經(jīng)越來越小,并且一天比一天少了。他們對(duì)這種不可避免的情況早有心理準(zhǔn)備,而且直覺地知道該怎么辦。

          他們相互對(duì)望了一眼,毫不猶豫地取下掛在脖子上的跑鞋,穿上腳并系好鞋帶。

          兩只小老鼠對(duì)此并沒有做什么全面細(xì)致的分析,事實(shí)上,也沒有足夠復(fù)雜的腦細(xì)胞可以支持他們進(jìn)行這么復(fù)雜的思維。

          對(duì)老鼠來說,問題和答案都是一樣的簡(jiǎn)單。奶酪C站的情況發(fā)生了變化,所以,他們也決定隨之而變化。

          他們同時(shí)望向迷宮深處。嗅嗅揚(yáng)起他的鼻子聞了聞,朝匆匆點(diǎn)點(diǎn)頭,匆匆立刻拔腿跑向迷宮的深處,嗅嗅則緊跟其后。

          他們開始迅速行動(dòng),去別的地方尋找新的奶酪,甚至連頭都沒有回一下。

          同一天的晚些時(shí)候,哼哼和唧唧也像往常一樣地來到奶酪C站,一路上哼著小曲。他們過去一直沒有察覺到這里每天都在發(fā)生的細(xì)小變化,而想當(dāng)然地以為他們的奶酪還在那里。

          面對(duì)新的情況,他們毫無準(zhǔn)備。


          “誰動(dòng)了我的奶酪”的故事(3)


          “怎么!竟然沒有奶酪?”哼哼大叫道,然后他開始不停地大喊大叫,“沒有奶酪?怎么可能沒有奶酪?”好象他叫喊地聲音足夠大的話,就會(huì)有誰把奶酪送回來似的。

          “誰動(dòng)了我的奶酪?”他聲嘶力竭力地吶喊著。

          最后,他把手放在屁股上,臉憋得通紅,用他最大的嗓門叫道:“這不公平!”

          唧唧則站在那里,一個(gè)勁地?fù)u頭,不相信這里已經(jīng)發(fā)生的變化。對(duì)此,他同樣沒有任何心理準(zhǔn)備,他滿以為在這里照舊可以找到奶酪。他長(zhǎng)時(shí)間地站在那里,久久不能動(dòng)彈,完全被這個(gè)意外給驚呆了。

          哼哼還在瘋狂地叫嚷著什么,但唧唧不想聽,他不想面對(duì)眼前的現(xiàn)實(shí),他拼命地告訴自己,這只是一個(gè)噩夢(mèng),他只想回避這一切。

          他們的行為并不可取,而且也于事無補(bǔ),但我們總還是能夠理解的。

          要知道找到奶酪并不是一件容易的事情。更何況,對(duì)這兩個(gè)小矮人來說,奶酷絕不僅僅只是一樣填飽肚子的東西,它意味著他們悠閑的生活、意味著他們的榮譽(yù)、意味著他們的社交關(guān)系以及更多重要的事情。

          對(duì)他們來說,找到酪是獲得幸福的惟一途徑。根據(jù)不同的偏愛,他們對(duì)奶酪的意義有各自的看法。

          對(duì)有些人而言,奶酪代表的是一種物質(zhì)上的享受;而對(duì)另一些人來說,奶酪意味著健康的生活,或者是一種安寧富足的精神世界。

          對(duì)唧唧來說,奶酪意味著安定,意味著某一天能夠擁有一個(gè)可愛的家庭,生活在名人社區(qū)的一座舒適的別墅里。

          對(duì)哼哼來說,擁有奶酪可以使他成為大人物,可以領(lǐng)導(dǎo)很多很多的人,而且可以在卡米伯特山項(xiàng)上擁有一座華麗的宮殿。

          由于奶酪對(duì)他們實(shí)在太重要了,所以這兩個(gè)小矮人花了很長(zhǎng)時(shí)間試圖決定該怎么辦。但他們所能夠想到的,只是在奶酪C站里尋找,看看奶酪是否真的不存在了。

          當(dāng)嗅嗅和匆匆已經(jīng)在迅速行動(dòng)的時(shí)候,哼哼和唧唧還在那里不停地哼哼唧唧、猶豫不決。

          他們情緒激動(dòng)地大聲叫罵這世界的不公平,用盡一切惡毒的語言去詛咒那個(gè)搬走了他們的奶酪的黑心賊。然后唧唧開始變得消沉起來,沒有了奶酪,明天會(huì)怎樣?他對(duì)未來的計(jì)劃可是完完全全都建立在這些奶酪的基礎(chǔ)上面的啊!

          這兩個(gè)小矮人就是不能接受這一切。這一切怎么可能發(fā)生呢?沒有任何人警告過他們,這是不對(duì)的,事情不應(yīng)該是這個(gè)樣子的,他們始終無法相信眼前的事實(shí)。

          那天晚上,哼哼和唧唧饑腸轆轆、沮喪地回到家里。在離開之前,唧唧在墻上寫下了一句話:

          奶酪對(duì)你越重要,你就越想抓住它。

          第二天,輾轉(zhuǎn)難眠了一晚上的哼哼和唧唧早早地離開家又回到奶酪C站,不管怎樣,他們抱著一線希望,他們不斷地欺騙自己,假定昨天走錯(cuò)了地方,他們?nèi)匀幌M一厮麄兊哪汤?。奶酪站的位置沒有變化,然而奶酪的的確確早已不復(fù)存在。兩個(gè)小矮人頓時(shí)手足無措,不知道該怎么辦。哼哼和唧唧只是站在那里,一動(dòng)不動(dòng),就像兩座毫無生氣的雕像。

          唧唧緊緊閉上眼睛,用手捂住自己的耳朵,他只想把一切都堵在外面。他不愿相信奶酪是逐漸變得越來越少的,他寧愿相信奶酪是突然之間被全部拿走的。

          哼哼則把現(xiàn)在的情況分析了分析,他用他那復(fù)雜的大腦把他所有的信條都翻了個(gè)遍。“他們?yōu)槭裁匆@樣做?”他終究沒能找到答案,“這里究竟發(fā)生了什么事情?”


          “誰動(dòng)了我的奶酪”的故事(4)



          終于,唧唧睜開了眼睛,朝周圍看了看說:“順便問一下,嗅嗅和匆匆現(xiàn)在在哪里?你是否覺得他們知道某些我們還不知道的事情?”

          “那兩個(gè)弱智,他們能夠知道些什么?”哼哼的語氣中充滿了不屑。

          他繼續(xù)說:“他們只是頭腦簡(jiǎn)單的老鼠,他們只會(huì)對(duì)發(fā)生的事情做出簡(jiǎn)單的反應(yīng)。而我們是機(jī)靈聰明的小矮人,我們比老鼠有頭腦。我們應(yīng)該能夠推測(cè)出這里的情況。”

          “我知道我們更聰明,”唧唧說,“但是,我們現(xiàn)在的行為好像并不怎么聰明。我們周圍的情況已經(jīng)發(fā)生了變化,哼哼,也許我們需要做出一些改變,去做點(diǎn)什么不同的事情。”

          “我們?yōu)槭裁匆淖儯?#8221;哼哼問道,“我們是小矮人,我們是不一樣的。這樣的事情不應(yīng)該發(fā)生在我們的身上。即使出現(xiàn)了這樣的情況,我們至少也應(yīng)該從中得到一些補(bǔ)償。”

          “為什么我們應(yīng)該得到一些補(bǔ)償呢?”唧唧問。

          “因?yàn)槲覀冇羞@樣的權(quán)力。”哼哼宣稱。

          “有什么樣的權(quán)力?”唧唧不明白。

          “有擁有我們的奶酪的權(quán)力。”

          “為什么?”唧唧還是不明白。

          “因?yàn)檫@個(gè)問題不是我們引起的,”哼哼說,“是某些別有用心的人制造了這個(gè)局面,而不是我們,所以我堅(jiān)持認(rèn)為我們總應(yīng)該從中得到些補(bǔ)償。”

          “也許我們應(yīng)該停止這種無用的分析,”唧唧提議,“分析問題到此為止。在我們還沒有被餓死之前,我們應(yīng)該趕緊出發(fā)去找新的奶酪。”

          “噢,不!”哼哼反對(duì)說,“我就快要找到問題的根源了,要知道,我們?cè)?jīng)擁有過那么多、那么好的奶酪??!”

          當(dāng)哼哼和唧唧還在爭(zhēng)執(zhí)著試圖決定該怎么辦的時(shí)候,嗅嗅和匆匆已經(jīng)在很順利地做他們的事情了。他們進(jìn)入到了迷宮的更深處,走過一條又一條走廊,在每一個(gè)他們遇到的奶酪站里仔細(xì)尋找著奶酪。

          除了傾盡全力地尋找新的奶酪,他們并不考慮任何別的事情。

          有好一段時(shí)間,他們找得很辛苦卻一無所獲。直到他們走進(jìn)迷宮中一個(gè)他們從未到過的地方:奶酪N站。

          他們高興得尖叫起來,他們終于發(fā)現(xiàn)了他們一直在尋找的東西:大量新鮮的奶酪。

          他們簡(jiǎn)直不敢相信自己的眼睛,這是他們所見過的最大的奶酪倉庫。

          而與此同時(shí),哼哼和唧唧仍然呆在奶酪C站,對(duì)他們目前的處境進(jìn)行揣摩。他們正在忍受著失去了奶酪的痛苦,挫折感、饑餓感和由此而來的憤怒緊緊圍繞著他們,折磨著他們,他們甚至為陷入眼前的困境而相互指責(zé)。

          唧唧仍然時(shí)時(shí)想起他的老鼠朋友,猜想他們現(xiàn)在是否已經(jīng)找到了奶酪。他相信他們也許過得很困難。在迷宮中穿行,總會(huì)面臨許多難以預(yù)料的事情。但他也知道,什么事情也得有不容易的一個(gè)階段。

          有時(shí),唧唧會(huì)想象出嗅嗅和匆匆已經(jīng)找到了奶酪并正在享用它們的情景。他忽然有一種沖動(dòng),想到迷宮中冒險(xiǎn)去尋找新的奶酪。在迷宮中探險(xiǎn),找到新的奶酪并盡情享用,這一切該是多么的美好??!想到這里,他覺得仿佛自己已經(jīng)嘗到了新鮮奶酪的美味。

          正在尋找和享用新的奶酪,這樣的情景在唧唧的頭腦中越來越清晰。他覺得自己越來越想離開奶酪C站,出發(fā)去尋找新的奶酪。

          突然,他大聲宣布道:“我們走吧!”

          “不!”哼哼很快做出了反應(yīng):“我喜歡這里。我只熟悉這里,這里很好很舒服。再說,“離開這里到外面去是很危險(xiǎn)的。”

          “不會(huì)的,”唧唧說:“以前我們也曾經(jīng)到過這個(gè)迷宮中的許多的地方,我們還可以再去其他地方找找看。”

          “我覺得自己已經(jīng)有些老了,不能再做這種跑來跑去到處冒險(xiǎn)的事了。”哼哼說:“而且,我也不想象個(gè)傻瓜似的,時(shí)常迷路。你覺得呢?”

          聽哼哼這么一說,失敗的恐懼感又襲上了唧唧的心頭,他的那點(diǎn)發(fā)現(xiàn)新奶酪的希望又逐漸消退了。

          就這樣,這兩個(gè)小矮人繼續(xù)做著以前每天所做的事。他們?nèi)匀幻刻於既ツ汤褻站,發(fā)現(xiàn)還是找不到奶酪,然后懷著憂慮和挫敗的心情回到家里。

          他們?cè)噲D否認(rèn)眼前發(fā)生的一切,開始失眠,力氣一天比一天小,變得越來越煩躁易怒。

          他們的家,也不再是美好舒適的地方。他們睡不上一個(gè)安穩(wěn)覺,而且每晚的時(shí)光伴著找不到奶酪的噩夢(mèng)度過。

          但他們?nèi)匀幻刻於蓟氐侥汤褻站,仍然每天在那里等待。

          哼哼說:“你知道,如果我們?cè)倥σ恍?,我們也許會(huì)發(fā)現(xiàn)事情并沒有發(fā)生太大的變化。奶酪也許就在附近,它們也許只是被人藏到墻后面去了。”


          “誰動(dòng)了我的奶酪”的故事(5)


          第二天,哼哼和唧唧帶了工具回到奶酪C站。哼哼拿著鑿子,唧唧則用錘子敲打。他們費(fèi)了九牛二虎之力,終于在墻上打出了一個(gè)洞,朝里面窺視,卻依舊沒有發(fā)現(xiàn)奶酪的蹤跡。

          盡管他們感到非常失望,但他們?nèi)匀幌肽顔栴}會(huì)得到解決。以后,他們起得更早,工作得更長(zhǎng)、更努力。但是,一段時(shí)間以后,他們得到的只是一個(gè)個(gè)更大的空洞。

          唧唧開始認(rèn)識(shí)到行動(dòng)和結(jié)果的區(qū)別。

          “也許,”哼哼說:“我們只需要坐在這里,看看到底會(huì)發(fā)生什么事情。遲早他們會(huì)把奶酪再送回來。”

          唧唧希望他說的是真的。這樣,他每天回家休息,然后勉強(qiáng)陪著哼哼去奶酪C站查看情況。但是,奶酷始終沒有再出現(xiàn)。

          由于焦慮和饑餓,這兩個(gè)小矮人已經(jīng)變得有些虛弱。唧唧已經(jīng)開始厭倦等待——完全被動(dòng)地等著狀況自己發(fā)生好轉(zhuǎn)。他開始明白,他們?cè)谀汤褻站等待的時(shí)間越長(zhǎng),情況只會(huì)變得越糟糕。

          唧唧明白,他們正在失去自己的優(yōu)勢(shì)。

          終于,有一天,唧唧開始自己嘲笑起自己來了:“唧唧呀唧唧,看看你自己吧!你居然等到每天重復(fù)同樣的錯(cuò)誤,還總是奇怪、懷疑為什么情況還沒有得到改善,還有什么比你這種做法更可笑的呢?這如果不是荒謬,就是滑稽。”

          唧唧并不想再到迷宮中去奔波。他知道他可能會(huì)迷路,而且他也不知道究竟應(yīng)該到哪兒去尋找新的奶酪。但當(dāng)他明白正是他的恐懼感使他如此裹足不前、坐以待斃的時(shí)候,他嘲笑起自己的愚笨。

          他問哼哼:“我們的運(yùn)動(dòng)衣和慢跑鞋放到哪里去了?”他花了很長(zhǎng)的時(shí)間才翻出了那些運(yùn)動(dòng)裝備。當(dāng)初,他們?cè)谀汤褻站找到奶酪以后,就把鞋啊什么的都有扔到一邊去了,因?yàn)樗麄儩M以為再也不會(huì)需要這些玩意兒了。

          當(dāng)哼哼看到他的朋友穿上運(yùn)動(dòng)服時(shí),他說,“你不是真的要到迷宮中去吧?你為什么不留下來,和我一起在這里等,等著他們把奶酪送回來?“

          “因?yàn)槿绻@么做,我們將永遠(yuǎn)不會(huì)得到那些奶酪,”唧唧大聲說:“不會(huì)有人把奶酪送回來了,現(xiàn)在已經(jīng)到了去尋找新奶酪的時(shí)候了,不要再想那些早已不存在的奶酪了!”

          哼哼爭(zhēng)辯說:“但是如果外面也沒有奶酪怎么辦?或者,即使有奶酪,但你找不到,又怎么辦?”

          “我不知道。”唧唧不耐煩地說。同樣的問題,他已經(jīng)問過自己多少遍了。他又感到了那種使他停滯不前的恐懼感。奶酪的喜悅再度鼓起了他的勇氣。

          他最后問自己:“你希望到哪里去找奶酪——這里還是迷宮中?”

          于是他的腦中出現(xiàn)了一幅圖畫,他看見自己面帶微笑地在迷宮中探險(xiǎn)。

          這樣的景象讓他有些驚慌,他發(fā)現(xiàn)自己終于克服了再次進(jìn)入迷宮的恐懼。他看見自己在迷宮中迷了路但仍然滿懷信心地在那里尋找新奶酪,一切美好的事物都隨之而來。他又重新找回了自己的勇氣。

          于是,他盡量發(fā)揮自己想象力,在腦海中為自己描繪了一幅他最信賴的、最具有現(xiàn)實(shí)感受的圖畫——他在尋找和品嘗新的奶酪。

          他仿佛看見自己坐在一大堆奶酪中央,正在盡情品嘗各種奶酪,像蜂窩狀的瑞士奶酪、鮮黃的英國切達(dá)干酪、美國奶酪和意大利干酪,還有美妙又柔軟的法國卡米伯特奶酪,等等。

          唧唧簡(jiǎn)直想入了神,直到他聽到哼哼在一邊嘟囔著什么,他才意識(shí)到自己仍然還在奶酪C站。

          于是唧唧轉(zhuǎn)身來對(duì)哼哼說:“哼哼,有時(shí)候,事情發(fā)生了改變,就再也變不回原來的樣子了。我們現(xiàn)在遇到的情況就是這樣。這就是生活!生活在變化,日子在住前走,我們也應(yīng)隨之改變,而不是在原地踟躕不前。”

          唧唧看著他那因饑餓和沮喪而顯得有些憔悴的朋友,試圖給予他分析一些道理。但是,哼哼的畏懼早已變成了氣惱,他什么也聽不進(jìn)去。

          唧唧并不想冒犯他的朋友,但是,他還是忍不住要嘲笑他們自己,因?yàn)楝F(xiàn)在看起來他們倆真的是又狼狽又愚蠢。

          當(dāng)唧唧準(zhǔn)備要出發(fā)的時(shí)候,他覺得自己整個(gè)人都變得都充滿了活力,他挺起了胸膛,他的精神開始振作起來:“讓我們出發(fā)吧。”

          唧唧大笑著宣稱:“這是一個(gè)迷宮的時(shí)代!”

          哼哼笑不起來,他幾乎沒有任何反應(yīng)。


          “誰動(dòng)了我的奶酪”的故事(6)


          唧唧拾起一塊尖硬的小石頭,在墻上寫下一句懇切的話,留給哼哼去思考。他沒有忘記自己的習(xí)慣,在這句話的周圍畫上奶酪的圖案。唧唧希望這幅畫能給哼哼帶來一絲希望,會(huì)對(duì)哼哼有所啟發(fā),并促使哼哼起身去追尋新的奶酪。但是哼哼根本不想朝墻上看一眼。

          墻上的話是:

          如果你不改變,你就會(huì)被淘汰。

          在墻上留完言后,唧唧伸出腦袋小心翼翼地朝迷宮中望了望,回想著到達(dá)奶酪C站以前所走過的路線。

          他曾經(jīng)想過,也許迷宮中再也沒有奶酪了,或者,他可能永遠(yuǎn)也找不到奶酪。這種悲觀的情緒曾經(jīng)那樣深地根植于他的心底,以到于差一點(diǎn)就毀了他。

          想到這里,唧唧會(huì)心地微笑起來。他知道,哼哼現(xiàn)在一定還在原地懊惱:“究竟是誰動(dòng)了我的奶酪?”而唧唧此刻想的卻是:“我為什么沒有早點(diǎn)行動(dòng)起來,跟隨著奶酪移動(dòng)呢?”

          當(dāng)唧唧終于走出奶酪C站踏入黑暗的迷宮時(shí),他忍不住回頭看了看這個(gè)曾經(jīng)伴隨他和哼哼很長(zhǎng)一段時(shí)間的地方。那一瞬間他幾乎無法控制自己,又想走回那個(gè)熟悉的地方,又想躲進(jìn)那個(gè)雖已沒有奶酪但很完全的地方。

          唧唧又有些擔(dān)心起來,拿不準(zhǔn)自己是否真的想要進(jìn)入到迷宮中去。片刻以后,他又拿起石塊在面前的墻上寫下一句話,盯著它看了許久:

          如果你無所畏懼,你會(huì)怎樣做呢?

          他對(duì)著這句話苦思冥想。

          他知道,有時(shí)候,有所畏懼是有好處的。當(dāng)你害怕不做某些事情會(huì)使事情變得越來越糟糕時(shí),恐懼心反而會(huì)激起你采取行動(dòng)。但是,如果你因?yàn)檫^分害怕而不敢采取任何行動(dòng)時(shí),恐懼心就會(huì)變成前進(jìn)道路上最大的障礙。

          他朝迷宮的右側(cè)瞧了瞧,心中生出了恐懼,因?yàn)樗麖奈吹竭^那里面。

          然后,他深吸了一口氣,朝迷宮的右側(cè)緩步跑去,跑向那片未知的領(lǐng)地。

          在探路的時(shí)候,唧唧有些擔(dān)心起來,一開始他還在奶酪C站猶豫了那么久,因?yàn)楹荛L(zhǎng)時(shí)間沒有吃到奶酪了,他有些虛弱。現(xiàn)在,在迷宮中穿行要比以前更加吃力,花的時(shí)間更長(zhǎng)。他打定主意,一旦再有機(jī)會(huì),他一定要盡早走出舒適的環(huán)境去適應(yīng)事情的變化。他覺得立刻采取措施會(huì)使事情更容易一些。

          想到這里,唧唧無力地微笑了一下,感嘆道:“遲做總比不做好。”

          接下來的幾天里,唧唧在周圍偶而能夠找到一點(diǎn)奶酪,但都吃不了多久。他曾經(jīng)希望能夠找到足夠多的奶酪,帶回去給哼哼,鼓勵(lì)他離開原地,走進(jìn)迷宮。

          但是,唧唧還是感到有些信心不足。他不得不承認(rèn),身在迷宮中,他感到十分困惑。里面很多地方跟以前完全不一樣了。

          他這樣想著朝前走去,他覺得自己已經(jīng)走了好遠(yuǎn),卻又好像就要迷失在迂回曲折的走廊中了。這就好像是在走兩步退一步,對(duì)他來說這真是一種挑戰(zhàn)。不過他還是要承認(rèn),回到迷宮中尋找奶酪,其實(shí)并不像他想象的那樣可怕。

          隨著時(shí)間的流逝,他開始有些懷疑,找到新奶酪的希望是否能變成現(xiàn)實(shí)。有種幻覺,有時(shí)他懷疑是否自己嘴里的奶酪太多而嚼不過來,這時(shí),想到自己根本沒有東西可嚼,他不禁啞然失笑。

          每當(dāng)他開始感到泄氣的時(shí)候,他就提醒自己正在做什么。盡管現(xiàn)在很難受,但這樣總比呆在沒有奶酪的地方更實(shí)際。他在掌握控制權(quán),而不是聽天由命、束手無策。

          他還提醒自己,如果嗅嗅和匆匆能不斷前行,那么自己也能做到!

          后來,唧唧回想起過去的事情,他終于明白奶酪C站的奶酪并不是像他曾經(jīng)相信的那樣一夜之間突然消失的。奶酪的數(shù)量是逐漸變少,直至完全消失的。而且,剩下的那一點(diǎn)也已經(jīng)陳舊變質(zhì),美味喪失殆盡了。

          那些陳舊的奶酪上面或許已經(jīng)生出了霉菌,只是他沒有注意到罷了。他還得承認(rèn),只要他愿意,應(yīng)該能夠注意得到??上?dāng)初沒有留意這些變化。

          唧唧還認(rèn)識(shí)到,如果他一直能夠察覺到這些變化而且能夠預(yù)見到這些變化,那么,這些變化就不會(huì)讓他感到吃驚。也許,嗅嗅和匆匆一直就是這樣做的。

          他打定主意,從現(xiàn)在起,他要時(shí)刻保持警覺。他要期待著發(fā)生變化,而且還要去追尋變化。他應(yīng)該相信自己的直覺,能夠意識(shí)到何時(shí)發(fā)生變化,并且能夠做好準(zhǔn)備去適應(yīng)這些變化。

          他停下來休息了一會(huì)兒,并在迷宮的墻上寫道:

          經(jīng)常聞一聞你的奶酪,

          你就會(huì)知道,

          它什么時(shí)候開始變質(zhì)。

          一段日子以后,好像已經(jīng)很久沒有找到奶酪了。這天,唧唧遇到了一個(gè)很大的奶酪站,看起來里面似乎裝滿了奶酪。他走進(jìn)去以后,卻發(fā)現(xiàn)里面空空如也,他失望至極。

          “這種空空的感覺,對(duì)我來說太平常了。”他嘆息道,他覺得自己就快要放棄了。


          “誰動(dòng)了我的奶酪”的故事(7)



          唧唧的體力正在慢慢地喪失。他知道自己迷路了,此刻他有些擔(dān)心自己能不能活下去。他想轉(zhuǎn)身回到奶酪C站去?;厝ズ?,至少哼哼還在那里,唧唧就不會(huì)孤單一人了。這時(shí),他又問了自己一個(gè)同樣的問題:“如果我無所畏懼,我又會(huì)怎樣做呢?”

          唧唧覺得他正在克服和超越自己的恐懼,但他又越來越經(jīng)常地感到害怕,害怕得甚至無法對(duì)自己承認(rèn)。他常常難以確定自己到底害怕什么,但是在目前這樣虛弱的狀況下,他知道,他只是害怕一個(gè)人獨(dú)自前行。唧唧其實(shí)并不清楚這一點(diǎn),他只是在跟著這種感覺走,因?yàn)樗恢痹诒贿@些恐懼的念頭壓迫著。

          唧唧想知道哼哼是否已經(jīng)離開了C站開始出發(fā)去尋找新的奶酪,或者是否仍然被自己的恐懼所嚇倒,仍舊裹足不前。這時(shí),唧唧想起他在迷宮中度過的時(shí)光,那些他曾經(jīng)覺得是最美好的時(shí)光,其實(shí)正是他一個(gè)人穿行在迷宮中找尋奶酪的時(shí)候。

          他又在墻上寫下了一句話,以便提醒自己。同時(shí),這句話也是一個(gè)標(biāo)記,留給他的朋友哼哼,希望哼哼會(huì)跟上來。

          朝新的方向前進(jìn),

          你會(huì)發(fā)現(xiàn)新的奶酪。

          唧唧朝著黑暗深遂的通道中望去,又有一陣恐懼襲來。前面有些什么?是不是什么都沒有?或者更糟,里面潛藏著危險(xiǎn)?他開始想象各種可能降臨到他頭上的可怕的事情。他越想越怕,快把自己嚇?biāo)懒恕?/p>

          忽然,他又覺得自己真是可笑。他意識(shí)到,他的畏懼只會(huì)使事情變得更糟糕。于是,他采取了當(dāng)他無所畏懼的時(shí)候會(huì)采取的行動(dòng)。他朝一個(gè)新的方向跑去。

          當(dāng)他跑向這條黑暗的走廊時(shí),他笑了起來。唧唧還沒有認(rèn)識(shí)到這一點(diǎn),但他覺得他的靈魂得到了豐富。他正在放開自己,對(duì)前景充滿了信心,盡管他并不能確切地知道前面究竟有些什么。

          出乎意料,他開始對(duì)自己感到越來越滿意。“為什么我感覺這么好?”他不明白:“我并沒有找到奶酪,而且也不知道要到哪里去。”

          不久,他就明白了他為什么會(huì)感覺這么好。

          他停下腳步,在墻上寫道:

          當(dāng)你超越了自己的恐懼時(shí),

          你就會(huì)感到輕松自在。

          他認(rèn)識(shí)到,他原來是被自己的恐懼感給控制住了。如今朝一個(gè)新的方向邁進(jìn),使他獲得了自由。

          這時(shí),從迷宮中吹來習(xí)習(xí)的涼風(fēng),使人感到神清氣爽。他深吸了一口氣,不覺振作起來。一旦克服了自己的恐懼感,他覺得一切比原來自己想像的要好得多。

          唧唧已經(jīng)很久沒有這種感覺了。他幾乎就快要忘記了這種感覺是多么的愜意。

          為了使事情更順利地進(jìn)行,他又開始在頭腦中描繪一種景象。想像中,他在一種很棒的現(xiàn)實(shí)環(huán)境,坐在各種他喜歡的奶酪中間——有切達(dá)奶酪還有布里奶酪!他看見自己在吃許多他喜歡吃的奶酪。這樣的景象使他獲得一種享受,他想像著這些奶酪的滋味該是多么美啊!

          這種享受新奶酪的情景,他看得越清楚,就越相信這會(huì)變成現(xiàn)實(shí)。現(xiàn)在,他有一種感覺,他就快要找到奶酪了。

          他又在墻上寫道:

          在我發(fā)現(xiàn)奶酪之前,

          想像我正在享受奶酪,

          這會(huì)幫我找到新的奶酪。

          唧唧一直在想的是他將會(huì)得到什么,而不是考慮他會(huì)失去什么。

          他不明白,為什么自己過去總是覺得變化會(huì)使事情變得更糟。而現(xiàn)在他認(rèn)識(shí)到,變化將會(huì)使事情變得更好。

          “為什么以前我不明白這一點(diǎn)?”他反問自己。


          “誰動(dòng)了我的奶酪”的故事(8)


          于是,他以更大的勇氣和力量快速靈敏地穿行在迷宮中。不久他就發(fā)現(xiàn)了一個(gè)奶酪站。當(dāng)他在迷宮的入口處發(fā)現(xiàn)一些新奶酪的碎屑時(shí),他變得興奮起來。

          這是一些他從未見過的奶酪,但看起來挺不錯(cuò)。他嘗了嘗,真是美味??!他吃掉了大部分能找到的小塊奶酪,把剩下的放進(jìn)口袋,以后也許可以和哼哼分享。他的體力也開始得到恢復(fù)。

          他懷著興奮的心情走進(jìn)去。但是,讓他感到驚愕的是,里面竟然是空的。有人已經(jīng)來過這里,只留下了一些零星的小塊奶酪。

          他認(rèn)識(shí)到,如果能早一點(diǎn)行動(dòng),他就很有可能早已在這里發(fā)現(xiàn)大量的新奶酪了。

          唧唧決定回去,看看哼哼是否愿意和他一起行動(dòng)。

          在返回的路上,他停下來,在墻上寫道:

          越早放棄舊的奶酪,

          你就會(huì)越早發(fā)現(xiàn)新的奶酪。

          不久,唧唧就回到了奶酪C站,找到了哼哼。他給哼哼一些新的小塊奶酪,但被拒絕了。

          哼哼很感激朋友的心意,但是他說:“我不喜歡新奶酪,這不是我習(xí)慣吃的那一種。我只要我自己的奶酪回來。除非可以得到我想要的東西,否則我是不會(huì)改變主意的。”

          唧唧失望地?fù)u了搖頭,不情愿地一個(gè)人踏上了自己的旅程。當(dāng)走到他到達(dá)過的迷宮最深處時(shí),他懷念起他的朋友來,但他明白,他喜歡的還是他的探險(xiǎn)過程。雖然以前他想自己希望的是得到充足的新奶酪,但現(xiàn)在他清楚使自己快樂的并不僅僅是奶酪而已。

          他高興的是,他不再受自己的恐懼感的驅(qū)使。他喜歡自己正在做的事情。

          明白了這一點(diǎn),唧唧不再像在奶酪C站時(shí),在沒有奶酪的日子里感到那樣虛弱了。他知道,他不會(huì)再讓恐懼感阻礙自己。他選擇了一個(gè)新的方向,他的身心得到了滋養(yǎng),體力得到加強(qiáng)。

          現(xiàn)在,他覺得,找到自己想要的東西只是一個(gè)時(shí)間問題。事實(shí)上,他感到他已經(jīng)找到了他一直在尋找的東西。

          當(dāng)他認(rèn)識(shí)到這一點(diǎn)的時(shí)候,他不禁微笑起來,并在墻上寫道:

          在迷宮中搜尋

          比停留在

          沒有奶酪的地方更安全。

          唧唧還認(rèn)識(shí)到,就像他曾經(jīng)體會(huì)過的那樣,你所害怕的東西根本沒有你想像的那樣糟糕,在你心里形成的恐懼比你的實(shí)際處境要更壞。他曾經(jīng)是如此害怕找不到新的奶酪,以致于他根本不想開始去尋找。然而一旦開始尋找的旅程,他就發(fā)現(xiàn)迷宮的走廊中有足夠的奶酪使他繼續(xù)找下去?,F(xiàn)在,他期待著找到更多的奶酪。只要朝前看,他就會(huì)因?yàn)橛兴诖d奮起來。

          他過去的思想被恐懼和憂慮蒙蔽了。過去考慮的總是沒有奶酪,或者沒有可以維持足夠長(zhǎng)時(shí)間的奶酪。以前總是覺得會(huì)把事情做錯(cuò),而不是考慮把事情做好。

          在離開奶酪C站以后的日子里,一切都改變了。

          過去他習(xí)慣于認(rèn)為,奶酪絕不會(huì)被拿走,改變總是不對(duì)的。

          現(xiàn)在,他知道,變化會(huì)不斷地發(fā)生,這是很自然的事情,不管你是否希望如此。只有當(dāng)你不希望變化,也不想追尋變化的時(shí)候,變化才會(huì)讓你感到吃驚。

          當(dāng)唧唧認(rèn)識(shí)到自己的信念發(fā)生了改變時(shí),他停下來,在墻上寫道:

          陳舊的信念

          不會(huì)幫助你

          找到新的奶酪。

          唧唧還沒有找到奶酪,但在迷宮中穿行的時(shí)候,唧唧在想自己從中學(xué)到了什么。

          他意識(shí)到,他的新的信念鼓舞著他采取新的行動(dòng)。他的行為再不同于以往,再也不是總要回到同一個(gè)沒有奶酪的地方。

          他知道,當(dāng)你改變了自己的信念,你也就改變了自己的行為。

          你可以相信,變化對(duì)你有害,你可以拒絕它;或者,你會(huì)相信尋找新奶酪對(duì)你有好處,你會(huì)擁抱這種變化。

          這些都取決于你選擇相信什么。

          他在墻上寫道:

          當(dāng)你發(fā)現(xiàn)

          你會(huì)找到新的奶酪

          并且能夠享用它時(shí),

          你就會(huì)改變你的路線。


          “誰動(dòng)了我的奶酪”的故事(9)


          唧唧知道,如果他能夠早一些離開奶酪C站,早一點(diǎn)應(yīng)對(duì)這些變化,他現(xiàn)在的狀況就會(huì)更好一些。他的身體會(huì)更強(qiáng)壯,精神也會(huì)更堅(jiān)強(qiáng),會(huì)更好地去迎接挑戰(zhàn)——尋找新奶酪的挑戰(zhàn)。事實(shí)上,如果他不是浪費(fèi)時(shí)間,否認(rèn)已經(jīng)發(fā)生了的變化,如果他能夠期待改變,也許他已經(jīng)找到奶酪了。

          他再一次運(yùn)用自己的想像力,看見自己正在發(fā)現(xiàn)和品嘗新奶酪。他決定到更多的地方去,去迷宮中那些他還沒有到過的地方。在這些地方,他偶爾找到一些小塊的奶酪。唧唧又開始恢復(fù)了體力和信心。

          當(dāng)他回顧自己是怎么走過來的時(shí)候,他很高興他在很多經(jīng)過的地放的墻上都留下了字跡。他相信如果哼哼決定離開奶酪C站的話,這就是留給哼哼的路標(biāo),能幫助哼哼穿過迷宮。

          唧唧只是希望自己在朝著正確的方向前進(jìn)。他還想到了這種可能性——哼哼將會(huì)讀到墻上的字跡,并且循著它找到出路。

          于是他又把這段時(shí)間以來他一直在思索著的心得寫在了墻上:

          盡早注意細(xì)小的變化,

          這將有助于你

          適應(yīng)即將來臨的更大的變化。

          此時(shí)此刻,唧唧早已把過去拋在腦后,正在適應(yīng)現(xiàn)在。

          他繼續(xù)以更充沛的體力和更快的速度穿越迷宮。不久,期待已久的事情終于發(fā)生了。

          當(dāng)他感覺一直在迷宮中前行,而且好像永遠(yuǎn)都會(huì)在迷宮中前行的時(shí)候,他的旅程——至少是現(xiàn)階段的旅程——即將愉快地結(jié)束了。

          唧唧正沿著一條走廊前進(jìn),這是一條他從未到過的走廊,拐過一個(gè)彎,在他的面前出現(xiàn)了奶酪N站,這里堆滿了新鮮的奶酪!

          當(dāng)他走進(jìn)奶酪N站的時(shí)候 ,他被眼前的景象驚呆了。到處都是堆積如山的奶酪,他從未見過如此巨大的豐盛的貯藏。他并不完全認(rèn)識(shí)這些奶酪,有些品種是全新的。

          眼前的景象太壯觀了,他猶豫了一會(huì)兒,不能肯定這是否是真的,或許這只是他的幻覺。直到他看見了他的老朋友——嗅嗅和匆匆,他才相信這一切是真的。

          嗅嗅沖唧唧點(diǎn)了點(diǎn)頭,表示歡迎,匆匆則朝他揮了揮爪子。他們胖胖的小肚子表明,他們?cè)谶@里已經(jīng)有一段時(shí)間了。

          唧唧很快向他們打了招呼,然后趕緊把他喜歡的各種奶酪都咬了一口。他脫掉鞋子,把兩只鞋子系在一起,然后掛在脖子上,以便需要的時(shí)候能夠迅速找到它們。嗅嗅和匆匆會(huì)心地笑了,并且贊許地點(diǎn)了點(diǎn)頭。而唧唧已經(jīng)一頭扎進(jìn)了奶酪堆中。一頓飽餐之后,唧唧高興地舉起一塊新鮮的奶酪歡呼:“呼啦,變化萬歲!”

          唧唧享受新奶酪的同時(shí),也在反思自己學(xué)到了什么。

          他認(rèn)識(shí)到,當(dāng)他害怕變化的時(shí)候,他一直受困于對(duì)那已不存在的舊奶酪的幻想而無法自撥。

          那又是什么使他發(fā)生了改變呢?難道是害怕餓死的恐懼?想到這里,唧唧笑了,他心里明白,這種恐懼當(dāng)然起過很大的作用。

          唧唧忽然發(fā)現(xiàn),他已經(jīng)學(xué)會(huì)自嘲了,而當(dāng)人們學(xué)會(huì)自嘲,能夠嘲笑自己的愚蠢和所做的錯(cuò)事時(shí),他就在開始改變了。他甚至覺得,改變自己的最快方式,就是坦然嘲笑自己的愚笨——這樣,你就能對(duì)過往云煙輕松釋然,迅速行動(dòng)起來,直面變化。

          唧唧相信他從他的老鼠朋友嗅嗅和匆匆那里,學(xué)到了一些有用的東西——不畏懼改變,勇往直前。老鼠朋友們簡(jiǎn)單地對(duì)待生活,他們不會(huì)反復(fù)分析,也不會(huì)把事情搞得很復(fù)雜。當(dāng)形勢(shì)發(fā)生改變,奶酪被移走了的時(shí)候,他們會(huì)迅速隨之改變,循著奶酪移動(dòng)的方向而移動(dòng)。唧唧告訴自己,要牢記這些體會(huì)。

          唧唧相信擁有了這些體會(huì),憑借自己聰慧的頭腦,再遇到任何變化時(shí)他一定能做得比老鼠朋友更好。

          他的頭腦里出現(xiàn)了清晰的圖畫,他的生活將會(huì)變得更美好,而且他還會(huì)在迷宮中發(fā)現(xiàn)一些更好的東西。

          唧唧不斷地反思自己過去犯下的錯(cuò)誤,他要汲取這些經(jīng)驗(yàn)教訓(xùn),去構(gòu)劃自己的未來。他知道,自己完全可以通過總結(jié)和學(xué)習(xí),掌握如何應(yīng)對(duì)變化:

          首先要更清醒地認(rèn)識(shí)到,有時(shí)需要簡(jiǎn)單地看待問題,以及靈敏快速地行動(dòng)。

          你不必把事情過分復(fù)雜化,或者一味地讓那些驚恐的念頭使自己慌亂。

          其次必須要善于發(fā)現(xiàn)一開始發(fā)生的那些細(xì)微的變化,以便你為即將來臨的更大的變化做好準(zhǔn)備。

          他知道,他需要做出更快的調(diào)整。因?yàn)?,如果不能及時(shí)調(diào)整自己,就可能永遠(yuǎn)找不到屬于自己的奶酪。

          還有一點(diǎn)必須承認(rèn),那就是阻止你發(fā)生改變的最大的制約因素就是你自己。只有自己發(fā)生了改變,事情才會(huì)開始好轉(zhuǎn)。


          “誰動(dòng)了我的奶酪”的故事(10)



          最重要的是,新奶酪始終總是存在于某個(gè)地方,不管你是否已經(jīng)意識(shí)到了它的存在。只有當(dāng)你克服了自己的恐懼念頭,并且勇于走出久已習(xí)慣的生活,去享受冒險(xiǎn)帶來的喜悅的時(shí)候,你才會(huì)得到新奶酪?guī)Ыo你的報(bào)償和獎(jiǎng)賞。

          唧唧還認(rèn)識(shí)到,有些畏懼是需要加以認(rèn)真對(duì)待的,它會(huì)幫助你避開真正的危險(xiǎn)。但絕大部分的恐懼都是不明智的,它們只會(huì)在你需要改變的時(shí)候,使你回避這種改變。

          唧唧曾經(jīng)那樣地懼怕改變,他真的希望生活能夠永遠(yuǎn)按照原有的樣子繼續(xù),但現(xiàn)在他意識(shí)到,生活并不會(huì)遵從某個(gè)人的愿望發(fā)展。改變隨時(shí)有可能降臨,但積極地面對(duì)改變卻會(huì)讓你發(fā)現(xiàn)更好的奶酪,真的是塞翁失馬,焉知非福。

          唧唧已經(jīng)看到了變化更好的一面。

          當(dāng)他回想起這些自己所學(xué)到的東西時(shí),他不由得想起了他的朋友哼哼。他不知道哼哼是否讀到了那些他在奶酪C站和迷宮各個(gè)角落墻上的留言,不知道哼哼是否已經(jīng)走出了迷宮。

          哼哼是否已經(jīng)決定放開已經(jīng)失去的過去并開始行動(dòng)?他是否已經(jīng)重新回到迷宮中,并且發(fā)現(xiàn)了能使他的生活變得更好的東西?

          或者,他因?yàn)椴豢细淖?,還在那里遲疑不前?

          唧唧在考慮回到奶酪C站去,看是否能找到哼哼——但首先得肯定自己能找到回來的路。如果找到了哼哼,他會(huì)把自己學(xué)到的東西告訴他,幫助他擺脫困境。但唧唧又想起已經(jīng)試圖改變過他的失敗經(jīng)歷。

          哼哼必須自己發(fā)現(xiàn)適合自己的道路,擺脫安逸,超越恐懼。沒有人可以代替他做到這一點(diǎn),或者告訴他應(yīng)該怎樣去做。他必須邁出第一步,否則他永遠(yuǎn)不會(huì)看到改變自己所帶來的好處。

          唧唧知道自己已經(jīng)給哼哼留下了足夠的標(biāo)記,只要他能夠邁出第一步,讀到墻上的字跡,他就會(huì)找到出路。

          于是唧唧打消了回C站的念頭,他站起來走到奶酪N站最大的一面墻前,把他一路上得到的心得體會(huì)的要點(diǎn)寫了下來。他拿起一塊很大的奶酪,這是他見過的奶酪中最大的一塊。唧唧品嘗著新鮮的奶酪,望著自己寫下的體會(huì),臉上綻出了微笑:

          奶酪墻上的話

          變化總是在發(fā)生

          他們總是不斷地拿走你地奶酪。

          預(yù)見變化

          隨時(shí)做好奶酪被拿走的準(zhǔn)備

          追蹤變化

          經(jīng)常聞一聞你的奶酪,

          以便知道它們呢什么時(shí)候開始變質(zhì)。

          唧唧相信擁有了這些體會(huì),憑借自己聰慧的頭腦,再遇到任何變化時(shí)他一定能做得比老鼠朋友更好。

          他的頭腦里出現(xiàn)了清晰的圖畫,他的生活將會(huì)變得更美好,而且他還會(huì)在迷宮中發(fā)現(xiàn)一些更好的東西。

          唧唧不斷地反思自己過去犯下的錯(cuò)誤,他要汲取這些經(jīng)驗(yàn)教訓(xùn),去構(gòu)劃自己的未來。他知道,自己完全可以通過總結(jié)和學(xué)習(xí),掌握如何應(yīng)對(duì)變化:

          首先要更清醒地認(rèn)識(shí)到,有時(shí)需要簡(jiǎn)單地看待問題,以及靈敏快速地行動(dòng)。

          你不必把事情過分復(fù)雜化,或者一味地讓那些驚恐的念頭使自己慌亂。

          其次必須要善于發(fā)現(xiàn)一開始發(fā)生的那些細(xì)微的變化,以便你為即將來臨的更大的變化做好準(zhǔn)備。

          他知道,他需要做出更快的調(diào)整。因?yàn)?,如果不能及時(shí)調(diào)整自己,就可能永遠(yuǎn)找不到屬于自己的奶酪。

          還有一點(diǎn)必須承認(rèn),那就是阻止你發(fā)生改變的最大的制約因素就是你自己。只有自己發(fā)生了改變,事情才會(huì)開始好轉(zhuǎn)。

          最重要的是,新奶酪始終總是存在于某個(gè)地方,不管你是否已經(jīng)意識(shí)到了它的存在。只有當(dāng)你克服了自己的恐懼念頭,并且勇于走出久已習(xí)慣的生活,去享受冒險(xiǎn)帶來的喜悅的時(shí)候,你才會(huì)得到新奶酪?guī)Ыo你的報(bào)償和獎(jiǎng)賞。

          唧唧還認(rèn)識(shí)到,有些畏懼是需要加以認(rèn)真對(duì)待的,它會(huì)幫助你避開真正的危險(xiǎn)。但絕大部分的恐懼都是不明智的,它們只會(huì)在你需要改變的時(shí)候,使你回避這種改變。


          “誰動(dòng)了我的奶酪”的故事(11)


          唧唧曾經(jīng)那樣地懼怕改變,他真的希望生活能夠永遠(yuǎn)按照原有的樣子繼續(xù),但現(xiàn)在他意識(shí)到,生活并不會(huì)遵從某個(gè)人的愿望發(fā)展。改變隨時(shí)有可能降臨,但積極地面對(duì)改變卻會(huì)讓你發(fā)現(xiàn)更好的奶酪,真的是塞翁失馬,焉知非福。

          唧唧已經(jīng)看到了變化更好的一面。

          當(dāng)他回想起這些自己所學(xué)到的東西時(shí),他不由得想起了他的朋友哼哼。他不知道哼哼是否讀到了那些他在奶酪C站和迷宮各個(gè)角落墻上的留言,不知道哼哼是否已經(jīng)走出了迷宮。

          哼哼是否已經(jīng)決定放開已經(jīng)失去的過去并開始行動(dòng)?他是否已經(jīng)重新回到迷宮中,并且發(fā)現(xiàn)了能使他的生活變得更好的東西?

          或者,他因?yàn)椴豢细淖儯€在那里遲疑不前?

          唧唧在考慮回到奶酪C站去,看是否能找到哼哼——但首先得肯定自己能找到回來的路。如果找到了哼哼,他會(huì)把自己學(xué)到的東西告訴他,幫助他擺脫困境。但唧唧又想起已經(jīng)試圖改變過他的失敗經(jīng)歷。

          哼哼必須自己發(fā)現(xiàn)適合自己的道路,擺脫安逸,超越恐懼。沒有人可以代替他做到這一點(diǎn),或者告訴他應(yīng)該怎樣去做。他必須邁出第一步,否則他永遠(yuǎn)不會(huì)看到改變自己所帶來的好處。

          唧唧知道自己已經(jīng)給哼哼留下了足夠的標(biāo)記,只要他能夠邁出第一步,讀到墻上的字跡,他就會(huì)找到出路。

          于是唧唧打消了回C站的念頭,他站起來走到奶酪N站最大的一面墻前,把他一路上得到的心得體會(huì)的要點(diǎn)寫了下來。他拿起一塊很大的奶酪,這是他見過的奶酪中最大的一塊。唧唧品嘗著新鮮的奶酪,望著自己寫下的體會(huì),臉上綻出了微笑:

          奶酪墻上的話

          變化總是在發(fā)生

          他們總是不斷地拿走你地奶酪。

          預(yù)見變化

          隨時(shí)做好奶酪被拿走的準(zhǔn)備

          追蹤變化

          經(jīng)常聞一聞你的奶酪,

          以便知道它們呢什么時(shí)候開始變質(zhì)。

          盡快適應(yīng)變化

          越早放棄舊的奶酪,

          你就會(huì)越早享用到新的奶酪。

          改變

          隨著奶酪的變化而變化。

          享受變化!

          嘗試去冒險(xiǎn),去享受新奶酪的美味!

          做好迅速變化的準(zhǔn)備

          不斷地去享受變化

          記住:他們?nèi)詴?huì)不斷地拿走你的奶酪。

          唧唧在想,自從他在奶酪C站和哼哼分道揚(yáng)鑣以來已經(jīng)有多久了。他知道自己前進(jìn)了一大步,但他也很清楚,如果他過分沉溺于N區(qū)的安逸生活之中,他就會(huì)很快滑落到原來的困境。所以,他每天都仔細(xì)檢查奶酪N站的情況。他在做一切力所能及的事情,以盡量避免被意料之外的變化打個(gè)措手不及。

          當(dāng)他還有大量的奶酪貯備時(shí),他就開始經(jīng)常到外面的迷宮中去,探索新的領(lǐng)地,以便使自己與周圍發(fā)生的變化隨時(shí)保持聯(lián)系。現(xiàn)在的他非常明白,了解各種實(shí)際的選擇,要比呆在舒適的環(huán)境里把自己孤立起來安全得多。

          “窸窸窣窣”,他聽到了什么,唧唧豎起耳朵聽了聽,他覺得是從迷宮里傳來的走動(dòng)的聲音。這聲音漸漸大起來,他知道有人正向著這邊跑來。

          會(huì)是哼哼到了嗎?他會(huì)循著那個(gè)彎轉(zhuǎn)過來嗎?

          唧唧念了幾句祈禱語,他真的希望——像他以前曾多次希望的那樣——也許,他的朋友終于能夠……

          隨著奶酪的變化而變化,

          并享受變化!

          結(jié)局……

          或者是新的開始?



          posted @ 2010-10-17 19:14 tovep 閱讀(191) | 評(píng)論 (3)編輯 收藏

          完全用例子告訴你!不過首先你要清楚問題問的是什么?

          首先,因該明白String是引用類型,是一個(gè)類,是一個(gè)不可變的類,并且有著特殊的作用。
          String 只能復(fù)制一次!復(fù)制后不可改變!

          String s = new String(“abc”);
          s = new String(“cba”);
           
          以上的代碼并不是對(duì)s進(jìn)行賦值,而是將“abc”的引用地址,從新賦給了s;
          這個(gè)過程的內(nèi)存是怎么分配的呢?



          有幾個(gè)問題要給大家說明一下:


          1.String s = new String("abc");//在運(yùn)行時(shí)涉及幾個(gè)String實(shí)例?
            
              答案:兩個(gè),一個(gè)是字符串字面量"xyz"所對(duì)應(yīng)的、駐留(intern)在一個(gè)全局共享的字符串常量池中的實(shí)例,另一個(gè)是通過new String(String)創(chuàng)建并初始化的、內(nèi)容與"xyz"相同的實(shí)例。


          2.String s = new String("abc");//涉及用戶聲明的幾個(gè)String類型的變?

              答案:一個(gè),就一個(gè)String s 。


          3.String s = null;
            
              Java里變量就是變量,引用類型的變量只是對(duì)某個(gè)對(duì)象實(shí)例或者null的引用,不是實(shí)例本身。聲明變量的個(gè)數(shù)跟創(chuàng)建實(shí)例的個(gè)數(shù)沒有必然關(guān)系。


          4.String s = new String("abc");//創(chuàng)建了幾個(gè)String Object?

              答案:兩個(gè),一個(gè)是“abc”——這是一個(gè)匿名對(duì)象;一個(gè)是指向“abc”的引用對(duì)象s——這個(gè)是將匿名對(duì)象的地址賦給了s。


          下面我們來看一段代碼:

          public class text{
             
             public static void main(String[] args){
                //定義一個(gè)str
                String str = new String("abc");
                //定義一個(gè)str1
                String str1 = "abc";
                //定義一個(gè)str2
                String str2 = "abc";
               
                System.out.println(str1 == str);
                System.out.println(str2 == str1);


          }
           
          }

          運(yùn)行結(jié)果是什么呢?




          為什么第一個(gè)運(yùn)行結(jié)果是false呢?  在這里"==" 其實(shí)比較的是他們?cè)诙褍?nèi)存中的地址,因?yàn)閟tr 和 str1 在堆內(nèi)存中的地址不同的所以運(yùn)行結(jié)果是false;
          為什么第二個(gè)運(yùn)行結(jié)果是true呢?   在這要說明一下,Sting是一個(gè)共享式輸出類型,在內(nèi)存中有一個(gè)String pool 用于存放String類型中相同的值。所以在給str2賦值的時(shí)候,JVM會(huì)在String pool中查找是否有與其所賦的值相等,如果相等就將相等的值的地址賦給str2,如果沒有則在String pool中新開辟一塊控件存放str2的內(nèi)容。


          這是我現(xiàn)在對(duì)String的一些理解,如果有錯(cuò)誤,希望大家指出來,在這里謝謝大家了!
























          posted @ 2010-10-16 23:51 tovep 閱讀(379) | 評(píng)論 (4)編輯 收藏
          主頁
          主站蜘蛛池模板: 股票| 柞水县| 邓州市| 恭城| 当涂县| 南乐县| 柏乡县| 安塞县| 沭阳县| 安平县| 临清市| 肇庆市| 八宿县| 陕西省| 邢台市| 舒兰市| 绥芬河市| 桦南县| 濮阳市| 永吉县| 内丘县| 简阳市| 福安市| 成安县| 江川县| 上高县| 平乡县| 大足县| 黑河市| 延长县| 梅州市| 尖扎县| 安福县| 长武县| 海淀区| 南城县| 连州市| 陆良县| 库车县| 西藏| 兰溪市|