<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    BloveSaga

    在希臘帕爾納斯山南坡上,有一個馳名世界的戴爾波伊神托所,在它的入口處的巨石上赫然銹刻著這樣幾個大字: 認(rèn)識你自己!

      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
      34 隨筆 :: 12 文章 :: 122 評論 :: 0 Trackbacks

    #

    ???????? 多線程學(xué)習(xí)

    ?* 程序,進(jìn)程和線程
    程序: 是指計算機(jī)指令的集合,它以文件的形式存儲在磁盤上。
    進(jìn)程: 是一個程序在其自身的地址空間中的一次執(zhí)行活動。

    進(jìn)程是資源的申請,調(diào)度和獨立運行的單位,因此,它使用系統(tǒng)中的運行資源;而程序不能申請
    系統(tǒng)資源,不能被系統(tǒng)調(diào)度,也不能作為獨立運行的單位,因此,它不站用系統(tǒng)的運行資源。

    線程: 是進(jìn)程中一個單一的連接控制流程。一個進(jìn)程可以有多個線程。

    線程又稱為輕量級進(jìn)程,它和進(jìn)程一樣擁有獨立的執(zhí)行控制,由操作系統(tǒng)負(fù)責(zé)調(diào)度,區(qū)別在于線程
    沒有獨立的存儲空間,而是和所屬進(jìn)程中的其它線程共享一個存儲空間,這使得線程間的通信遠(yuǎn)
    較進(jìn)程簡單。
    ?* Java對多線程的支持
    Java在語言級提供了對多線程程序設(shè)計的支持。
    實現(xiàn)線程程序的兩種方式:
    (1)從Thread類繼承;
    (2)實現(xiàn)Runnable接口。

    Java運行時系統(tǒng)實現(xiàn)了一個用于調(diào)度線程執(zhí)行的線程調(diào)度器,用于確定某一時刻由哪一個線程在
    CPU上運行。
    在java技術(shù)中,線程通常是搶占式的而不需要時間片分配進(jìn)程(分配給每個線程相等的CPU時間的
    進(jìn)程)。搶占式調(diào)度模型就是許多線程處于可以運行狀態(tài)(等待狀態(tài)),但實際上只有一個線程在
    運行。該線程一直運行到它終止進(jìn)入可運行狀態(tài)(等待狀態(tài)),或者另一個具有更高優(yōu)級的線程
    變成可運行狀態(tài)。在后一種情況下,低優(yōu)先級的線程被高優(yōu)先級的線程搶占,高優(yōu)先級的線程獲得
    運行的機(jī)會。
    Java線程調(diào)度器支持不同優(yōu)先級線程的搶占方式,但其本身不支持相同優(yōu)先級線程的時間片輪換。
    Java運行時系統(tǒng)所在的操作系統(tǒng)(例如:windows2000)支持時間片的輪換,則線程調(diào)度器就支持
    相同優(yōu)先級線程的時間片輪換。

    用多線程技術(shù)模擬一個售票系統(tǒng)
    實現(xiàn)代碼如下:
    class TicketSystem
    {
    ?public static void main(String[] args)
    ?{
    ??SellTicket st = new SellTicket();
    ??new Thread(st).start();
    ??new Thread(st).start();
    ??new Thread(st).start();
    ??new Thread(st).start();
    ?}
    }
    class SellTicket implements Runnable
    {
    ?int tickets=100;
    ?Object o = new Object();
    ?public void run()
    ?{
    ??while(true)
    ??{
    ???/*
    ??? synchronized(o)? //同步塊在關(guān)鍵字后得加個對象(任意的對象都可以)
    ??? {
    ???? ?if(tickets>0)
    ??? ?{
    ?????? try
    ????? {
    ???? ??? Thread.sleep(10);
    ????? }
    ????? catch(Exception e)
    ????? {
    ??????? e.printStackTrace();
    ????? }
    ????????? System.out.println(Thread.currentThread().getName()+
    ????????? "sell tickets"+tickets);
    ????????? tickets--;????
    ???? }
    ??? }
    ??? */
    ??? sell();?
    ??}
    ?}
    ?public synchronized void sell()? //同步方法
    ?{
    ???? ?if(tickets>0)
    ??? ?{
    ?????? try
    ????? {
    ???? ??? Thread.sleep(10);
    ????? }
    ????? catch(Exception e)
    ????? {
    ??????? e.printStackTrace();
    ????? }
    ????????? System.out.println(Thread.currentThread().getName()+
    ????????? "sell tickets"+tickets);
    ????????? tickets--;????
    ???? } ??
    ?}
    }
    ?* 線程的同步
    ?The code segments within a program that access the same object from separate,concurrent
    ?thread are called "critical sections"。
    ?同步的兩種方式:同步塊和同步方法
    ?沒一個對象都有一個監(jiān)視器(monitor),或者叫做瑣。
    ?同步方法利用的是this所代表的對象的瑣。
    ?每個class也有一個瑣,是這個class所對應(yīng)的Class對象的瑣。
    完整示例:
    class TicketSystem
    {
    ?public static void main(String[] args)
    ?{
    ??SellTicket st = new SellTicket();
    ??new Thread(st).start();
    ??/*
    ?? *寫一個try{}catch{}塊讓main()方法所在的線程睡1秒
    ?? *主要是想要線程優(yōu)先啟動
    ??*/
    ??try
    ??{
    ???Thread.sleep(1);
    ??}
    ??catch(Exception e)
    ??{
    ???e.printStackTrace();
    ??}
    ??st.b=true;
    ??new Thread(st).start();
    ??//new Thread(st).start();
    ??//new Thread(st).start();
    ?}
    }
    class SellTicket implements Runnable
    {
    ?int tickets=100;
    ?Object obj = new Object();
    ?boolean b=false;
    ?public void run()
    ?{
    ??if(b==false)
    ??{
    ???while(true)
    ????? sell();
    ??}
    ??else
    ??{
    ?????while(true)
    ?? {??
    ??? synchronized(this)? //同步塊在關(guān)鍵字后得加個對象(任意的對象都可以)
    ??? {
    ???? ?if(tickets>0)
    ??? ?{
    ?????? try
    ????? {
    ???? ??? Thread.sleep(10);
    ????? }
    ????? catch(Exception e)
    ????? {
    ??????? e.printStackTrace();
    ????? }
    ????????? System.out.println("obj:"+Thread.currentThread().getName()+
    ????????? " sell tickets"+tickets);
    ????????? tickets--;????
    ???? }
    ??? }???
    ?? // sell();?
    ??}
    ??}

    ?}
    ?public synchronized void sell()? //同步方法
    ?{
    ???? ?if(tickets>0)
    ??? ?{
    ?????? try
    ????? {
    ???? ??? Thread.sleep(10);
    ????? }
    ????? catch(Exception e)
    ????? {
    ??????? e.printStackTrace();
    ????? }
    ????????? System.out.println("sell():"+Thread.currentThread().getName()+
    ????????? "sell tickets"+tickets);
    ????????? tickets--;????
    ???? } ??
    ?}
    }

    ?* 線程的死瑣
    ?哲學(xué)家進(jìn)餐的問題
    ?一幫哲學(xué)家在一起進(jìn)餐,但是每個人都只有1支筷子,大家都在等待別人拿出一支筷子讓自己
    ?先吃,然后再把自己的拿出去,但是大家都不愿意拿出自己的筷子。
    ?線程1瑣住了對象A的監(jiān)視器,等待對象B的監(jiān)視器,線程2鎖住了對象B的監(jiān)視器,等待對象A的
    ?監(jiān)視器,就造成了死瑣。

    ?示例代碼:
    class TicketSystem
    {
    ?public static void main(String[] args)
    ?{
    ??SellTicket st = new SellTicket();
    ??new Thread(st).start();
    ??/*
    ?? *寫一個try{}catch{}塊讓main()方法所在的線程睡1秒
    ?? *主要是想要線程優(yōu)先啟動
    ??*/
    ??try
    ??{
    ???Thread.sleep(1);
    ??}
    ??catch(Exception e)
    ??{
    ???e.printStackTrace();
    ??}
    ??st.b=true;
    ??new Thread(st).start();
    ??//new Thread(st).start();
    ??//new Thread(st).start();
    ?}
    }
    class SellTicket implements Runnable
    {
    ?int tickets=100;
    ?Object obj = new Object();
    ?boolean b=false;
    ?public void run()
    ?{
    ??if(b==false)
    ??{
    ???while(true)
    ????? sell();
    ??}
    ??else
    ??{
    ?????while(true)
    ?? {??
    ??? synchronized(obj)? //同步塊在關(guān)鍵字后得加個對象(任意的對象都可以)
    ??? {
    ?????? try
    ????? {
    ???? ??? Thread.sleep(10);
    ????? }
    ????? catch(Exception e)
    ????? {
    ??????? e.printStackTrace();
    ????? }?
    ????? synchronized(this)
    ????? { ??? ?
    ???? ?????? if(tickets>0)
    ??? ???????? {
    ??????????????? System.out.println("obj:"+Thread.currentThread().getName()+
    ??????????????? " sell tickets"+tickets);
    ??????????????? tickets--;????
    ????????????? }
    ????? }
    ????? }???
    ??? }
    ??}

    ?}
    ?public synchronized void sell()? //同步方法
    ?{
    ??synchronized(obj)
    ??{
    ???? ?if(tickets>0)
    ??? ?{
    ?????? try
    ????? {
    ???? ??? Thread.sleep(10);
    ????? }
    ????? catch(Exception e)
    ????? {
    ??????? e.printStackTrace();
    ????? }
    ????????? System.out.println("sell():"+Thread.currentThread().getName()+
    ????????? "sell tickets"+tickets);
    ????????? tickets--;????
    ???? }
    ??}?
    ?}
    }
    ?* wait,notify,notifyAll
    ?每個對象除了有一個瑣之外,還有一個等待隊列(wait set),當(dāng)一個對象剛剛創(chuàng)建的時候,它
    ?的等待隊列是空的。
    ?我們應(yīng)該在當(dāng)前線程鎖住對象的瑣后,去調(diào)用該對象的wait方法。
    ?當(dāng)調(diào)用對象的notify方法時,將從該對象的等待隊列中刪除一個任意的線程,這個線程將再次
    ?成為可運行的線程。
    ?當(dāng)調(diào)用對象的notifyAll方法時,將從該對象的等待隊列中刪除所有等待的線程,這些線程將
    ?成為可運行的線程。
    ?wait和notify重要用于producer-consumer這種關(guān)系中。
    ?代碼示例:
    ?class Test
    {
    ?public static void main(String[] args)
    ?{
    ??Queque q = new Queque();
    ??Procedur p = new Procedur(q);
    ??Consumer c = new Consumer(q);
    ??p.start();
    ??c.start();
    ??
    ?}
    }

    class Procedur extends Thread?? //生產(chǎn)者
    {
    ?Queque q;
    ?Procedur(Queque q)
    ?{
    ??this.q=q;
    ?}
    ?public void run()
    ?{
    ??for(int i=0;i<10;i++)
    ??{
    ???q.put(i);
    ???System.out.println("Procedur put"+ i);
    ??}
    ?}
    }

    class Consumer extends Thread?? //消費者
    {
    ?Queque q;
    ?Consumer(Queque q)
    ?{
    ??this.q=q;
    ?}
    ?public void run()
    ?{
    ??while(true)
    ??{
    ???System.out.println("Consumer get"+q.get());
    ??}
    ?}
    }

    class Queque??? //放置數(shù)據(jù)
    {
    ?int value;
    ?boolean bFull=false;
    ?public synchronized void put(int i)
    ?{
    ??if(!bFull)
    ??{
    ??? value=i;?
    ??? bFull=true;
    ??? notify();??
    ??}
    ??try
    ??{
    ???wait();
    ??}
    ??catch(Exception e)
    ??{
    ???e.printStackTrace();
    ??}
    ?}
    ?public synchronized int get()
    ?{
    ??if(!bFull)
    ??{
    ???try
    ???{
    ????wait();
    ???}
    ???catch(Exception e)
    ???{
    ????e.printStackTrace();
    ???}
    ??}
    ??bFull=false;
    ??notify();
    ??return value;
    ?}
    }


    ?線程的狀態(tài)圖

    ?? |
    ?? | new Thread
    ?? |?????????????????? yield????? sleep,wait,suspend,I/O阻塞
    ? \|/ start???????????????????? |------------------------------------>|
    ? New----->Runnable|??????????????????????????????????????????????????????? |Not Runnable
    ??????????????????????????? \??? |<------------------------------------|??????? ?/
    ???????????????????????????? \???? sleep結(jié)束,notify,resume,I/O操作完成??? /
    ????????????????????????????? \??????????????????????????????????????????????????????????????? ?/
    ?????????????????????????????? \???????????????????????????????????????????????????????????? ?/
    ??????????????????????????????? \??????????????????????????????????????????????????????? ?? /
    ???????????????????????????????? \?????????????????????????????????????????????????????? ? /
    ????????????????????????????????? \ run方法退出?????????????????????????????? ?/
    ?????????????????????????????????? \stop方法調(diào)用??????????????????????????? ?/
    ??????????????????????????????????? \?????????????????????????????????????????????? ?/
    ???????????????????????????????????? \?????????????????????????????????????????? ? /?
    ????????????????????????????????????? \??????????????????????????????????????? ? /? stop方法調(diào)用
    ?????????????????????????????????????? \????????????????????????????????????? ?/
    ??????????????????????????????????????? \???????????????????????????????????? /
    ???????????????????????????????????????? \?????????????????????????????????? /
    ????????????????????????????????????????? \?????????????????????????????? ?/
    ?????????????????????????????????????????? \????????????????????????? ?? /
    ??????????????????????????????????????????? \????????????????????????? ?/
    ???????????????????????????????????????????? \ ______?_____/
    ????????????????????????????????????????????? |??? ? Dead?????? ??|
    ????????????????????????????????????????????? |____________|
    ?線程的終止
    ?
    ?設(shè)置一個flag變量。
    ?結(jié)合interrupt()方法。
    ?code:
    class TestThread
    {
    ?public static void main(String[] args)
    ?{
    ??Thread1 t1=new Thread1();
    ??t1.start();
    ??int index=0;
    ??while(true)
    ??{
    ???if(index++==500)
    ???{
    ????t1.stopThread();
    ????break;
    ???}
    ???System.out.println(Thread.currentThread().getName());
    ??}
    ?}
    }

    class Thread1 extends Thread
    {
    ?private boolean bStop=false;
    ?public void run()
    ?{
    ??while(!bStop)
    ??{
    ???System.out.println(getName());
    ??}
    ?}
    ?public void stopThread()
    ?{
    ??bStop=true;
    ?}
    }

    posted @ 2006-06-08 12:21 藍(lán)色Saga 閱讀(166) | 評論 (0)編輯 收藏

    我這里有些視頻教程,需要的流下email,我會把具體的地址,我下載文件email給你!

    視頻目錄:

    1.HTTP協(xié)議詳解
    ????詳細(xì)介紹了 HTTP 協(xié)議的內(nèi)容,包括: HTTP URL 、 HTTP 請求、 HTTP 響應(yīng)和 HTTP 消息。
    ????最后給出了兩個實驗,幫助大家更好地理解 HTTP 協(xié)議。
    ??? 本課程將為您深入學(xué)習(xí) Java Web 開發(fā)打下基礎(chǔ)。
    2.?Eclipse開發(fā)工具介紹
    ?????Eclipse是一個開放源代碼的、基于 Java 的可擴(kuò)展的開發(fā)平臺,是目前非常流行的Java開發(fā)工具。
    ??? 本課程將為您介紹Eclipse的安裝、配置和使用。
    3. HTML語言速成
    ??? 幫助您快速掌握HTML語言,為學(xué)習(xí)XML和JSP開發(fā)打下基礎(chǔ)。
    4.? MySQL視頻教程
    5.? 面向?qū)ο蟪绦蛟O(shè)計
    6.? LINUX視屏教程

    如果以上有你需要的,就留下email地址,晚上我會統(tǒng)一發(fā)!
    posted @ 2006-06-07 15:30 藍(lán)色Saga 閱讀(1569) | 評論 (110)編輯 收藏

    匹配中文字符的正則表達(dá)式: ?[\u4e00-\u9fa5]

    匹配雙字節(jié)字符 ( 包括漢字在內(nèi) ) [^\x00-\xff]

    應(yīng)用:計算字符串的長度(一個雙字節(jié)字符長度計 2 ASCII 字符計 1

    String.prototype.len=function(){return?this.replace([^\x00-\xff]/g,"aa").length;}

    匹配空行的正則表達(dá)式: \n[\s|?]*\r

    匹配 HTML 標(biāo)記的正則表達(dá)式: /<(.*)>.*<\/\1>|<(.*)?\/>/?

    匹配首尾空格的正則表達(dá)式: (^\s*)|(\s*$)

    應(yīng)用: javascript 中沒有像 vbscript 那樣的 trim 函數(shù),我們就可以利用這個表達(dá)式來實現(xiàn),如下:

    String.prototype.trim?=?function()
    {
    return?this.replace(/(^\s*)|(\s*$)/g,?"");
    }

    利用正則表達(dá)式分解和轉(zhuǎn)換 IP 地址:

    下面是利用正則表達(dá)式匹配 IP 地址,并將 IP 地址轉(zhuǎn)換成對應(yīng)數(shù)值的 Javascript 程序:

    function?IP2V(ip)
    {
    re=/(\d+)\.(\d+)\.(\d+)\.(\d+)/g?//
    匹配 IP 地址的正則表達(dá)式
    if(re.test(ip))
    {
    return?RegExp.$1*Math.pow(255,3))+RegExp.$2*Math.pow(255,2))+RegExp.$3*255+RegExp.$4*1
    }
    else
    {
    throw?new?Error("Not?a?valid?IP?address!")
    }
    }

    不過上面的程序如果不用正則表達(dá)式,而直接用 split 函數(shù)來分解可能更簡單,程序如下:

    var?ip="10.100.20.168"
    ip=ip.split(".")
    alert("IP
    值是: "+(ip[0]*255*255*255+ip[1]*255*255+ip[2]*255+ip[3]*1))

    匹配 Email 地址的正則表達(dá)式: \w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*

    匹配網(wǎng)址 URL 的正則表達(dá)式: http://( [\w-]+\.)+[\w-]+(/[\w-?./?%&=]*)?

    利用正則表達(dá)式去除字串中重復(fù)的字符的算法程序: [ 注:此程序不正確,原因見本貼回復(fù) ]

    var?s="abacabefgeeii"
    var?s1=s.replace(/(.).*\1/g,"$1")
    var?re=new?RegExp("["+s1+"]","g")
    var?s2=s.replace(re,"")?
    alert(s1+s2)?//
    結(jié)果為: abcefgi

    這個方法對于字符順序有要求的字符串可能不適用。

    得用正則表達(dá)式從 URL 地址中提取文件名的 javascript 程序,如下結(jié)果為 page1

    s="http://www.9499.net/page1.htm"
    s=s.replace(/(.*\/){0,}([^\.]+).*/ig,"$2")
    alert(s)

    利用正則表達(dá)式限制網(wǎng)頁表單里的文本框輸入內(nèi)容:

    用正則表達(dá)式限制只能輸入中文: onkeyup="value=value.replace(/[^\u4E00-\u9FA5]/g,'')"?onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\u4E00-\u9FA5]/g,''))"

    用正則表達(dá)式限制只能輸入全角字符: ?onkeyup="value=value.replace(/[^\uFF00-\uFFFF]/g,'')"?onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\uFF00-\uFFFF]/g,''))"

    用正則表達(dá)式限制只能輸入數(shù)字: onkeyup="value=value.replace(/[^\d]/g,'')?"onbeforepaste="clipboardData.setData('text',clipboardData.getData('text').replace(/[^\d]/g,''))"

    用正則表達(dá)式限制只能輸入數(shù)字和英文: onkeyup="value=value.replace(/[\W]/g,'')?"onbeforepaste="clipboardData.setData

    幾個常用正則表達(dá)式:
    ('text',clipboardData.getData('text').replace(/[^\d]/g,''))"?
    Email?:?/^\w+([-+.]\w+)*@\w+([-.]\\w+)*\.\w+([-.]\w+)*$/,????
    Phone?:?/^((\(\d{3}\))|(\d{3}\-))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}$/,????
    Mobile?:?/^((\(\d{3}\))|(\d{3}\-))?13\d{9}$/,????
    Url?:?/^http:\/\/[A-Za-z0-9]+\.[A-Za-z0-9]+[\/=\?%\-&_~`@[\]\':+!]*([^<>\"\"])*$/,????
    IdCard?:?/^\d{15}(\d{2}[A-Za-z0-9])?$/,????
    Currency?:?/^\d+(\.\d+)?$/,
    Number?:?/^\d+$/,????
    Zip?:?/^[1-9]\d{5}$/,????
    QQ?:?/^[1-9]\d{4,8}$/,????
    Integer?:?/^[-\+]?\d+$/,????
    Double?:?/^[-\+]?\d+(\.\d+)?$/,????
    English?:?/^[A-Za-z]+$/,????
    Chinese?:??/^[\u0391-\uFFE5]+$/,????
    UnSafe?:/^(([A-Z]*|[a-z]*|\d*|[-_\~!@#\$%\^&\*\.\(\)\[\]\{\}<>\?\\\/\'\"]*)|.{0,5})$|\s/,

    posted @ 2006-06-05 22:40 藍(lán)色Saga 閱讀(250) | 評論 (0)編輯 收藏

         摘要: 正則表達(dá)式是一個描述字符模式的對象。 JavaScript 的 RegExp 對象和 String 對象定義了使用正則表達(dá)式來執(zhí)行強大的模式匹配和文本檢索與替換函數(shù)的方法 .'***********************'??????????????\\JavaScript//''***************...  閱讀全文
    posted @ 2006-06-05 22:37 藍(lán)色Saga 閱讀(716) | 評論 (0)編輯 收藏

    JavaScript語法

    什么是腳本程序和JavaScript

    ?*什么是腳本程序
    ?<html>
    ?<script language="javascript">
    ??? alert(new Date());
    ?</script>
    ?</html>

    ?*JavaScript簡介
    ? 前身叫作Livescript,是一種基于對象(Object)和事件驅(qū)動(Event Driver),并具有安全性能的腳本語言.
    ?*JavaScript與Java
    ? 是兩個公司開發(fā)的兩個不同產(chǎn)品,作用與用途大不一樣,但兩者語法上有很多相似之處,JavaScript并不是
    ? Java的子集.
    ?*JavaScript,JScript與ECMAScript
    ?*腳本代碼的位置
    ? 我們可以把代碼放到<script></script>標(biāo)簽之間:
    ? <script>
    ??? var x=3;
    ? </script>
    ? <p>This is a HTML 段落</p>
    ? <script>
    ??? alert(x);
    ? </script>
    ? 也可以放在一個單獨的文件中:
    ? <html>
    ? <script src="script.js" language="javascript">
    ?*將腳本程序代碼作為屬性值
    ? <a href="javascript:alert(new Data());">javascript</a>
    ? </html>
    =======================================================================================
    JavaScript的基本語法

    ?*JavaScript中的標(biāo)識符
    ?標(biāo)識符是指JavaScript中定義的符號,例如,變量名,函數(shù)名,數(shù)組名等.標(biāo)識符可以由任意順序的
    ?大小寫字母,數(shù)字,下劃線(_)和美元符號($)組成,但標(biāo)識符不能以數(shù)字開頭,不能是JavaScript
    ?中的保留關(guān)鍵字.
    ?合法的標(biāo)識符舉例: indentifler,username,user_name,_username,$username
    ?非法的標(biāo)識符舉例: int,98.3,Hello World
    ?*Java嚴(yán)格區(qū)分大小寫
    ?computer和Computer是兩個完全不同的標(biāo)識符
    ?*JavaScript程序代碼格式
    ?每條功能語句的最后必須用分號(;)結(jié)束,每個詞之間用空格,制表符,換行符或大括號,小括號這樣
    ?的分隔符隔開.
    ?*JavaScript程序的注釋
    ?/*...*/中可以嵌套"http://"注釋,但不能嵌套"/"...."/".

    ================================================================================
    基本數(shù)據(jù)類型與常量

    ?*正型常量
    ?十六進(jìn)制以O(shè)x或OX開頭,例如:Ox8a.八進(jìn)制必須以O(shè)開頭,例如: 0123.十進(jìn)制的第一位不能為0
    ?(數(shù)字0除外),例如: 123
    ?*字符常量
    ?12.32,123.42,5E7,4e5等.
    ?*布爾值
    ?true和false.
    ?*字符串常量
    ?例如: "a book of JavaScript",'abc',"a",""(空字符串) .
    ?特殊字符需要用反斜杠(\)來轉(zhuǎn)意.
    ?例如: \r, \n, \t, \b, \', \\
    ?在JavaScript中一個連續(xù)的字符串不能分開在兩行中來寫.可以使用"+"號連起來.
    ?*null常量
    ?表示變量的值為空
    ?*undefined常量
    ?表示一個變量還沒有被復(fù)值時的狀態(tài),或某個對象的屬性不存在.

    =========================================================================================
    變量

    ?*定義一個變量,系統(tǒng)就會為之分配一塊內(nèi)存,程序可以用變量名來表示這塊內(nèi)存中的數(shù)據(jù).
    ?*聲明變量用var關(guān)鍵字
    ?例如: var x; (這個時候就是undifeined)
    ?*聲明變量的同時為其賦值
    ?例如: var name="lisi";
    ?*對已賦值的變量賦于一個其他類型的數(shù)據(jù)
    ?例如: name=123;
    ?*不事先聲明變量而直接使用
    ?例如: x=1234;

    算術(shù)運算符

    ?*+ 加法運算符或正值運算符,例如, x+5, +6.
    ? 它還能實現(xiàn)多個字符串的想加,也能將字符串與其他的數(shù)據(jù)類型連成一個新的字符串,條件
    ? 條件是該表達(dá)式中至少有一個字符串,例如: "x"+123的結(jié)果為"x123".
    ?*- 減法運算符或負(fù)預(yù)算符,例如, 7-3, -8.
    ?** 乘法運算符,例如, 3*7.
    ?*/ 除法運算符,例如 9/4.
    ?*% 求模運算符(算術(shù)中的求余),例如, 5%2
    ?*++將變量值加1后再將結(jié)果賦給這個變量,分為兩種,例如a++和++a
    ?*--用法與++預(yù)算符一樣
    ?

    賦值運算符
    ?
    ? 賦值運算符的作用是將一個值賦給一個變量,最常用的是"=",還可以由"="運算符和其他的一些
    ? 預(yù)算符組合成新的運算符,例如:
    ? "+=","-="等.

    比較運算符

    ? *>大于
    ?? 當(dāng)左邊的操作數(shù)大于右邊的操作數(shù)時,返回true.
    ? *<小與
    ? *=
    ? *<=
    ? *>=
    ? *==
    ? *!=
    ? 注意: 不要把"=="寫成"="

    邏輯運算符
    ?
    ? *&&
    ? 邏輯與,當(dāng)左右兩邊的操作數(shù)都為true時,返回值為true,否則為false.
    ? *||
    ? 邏輯或,當(dāng)左右兩邊的操作數(shù)都為false時,返回值為false,否則為true.
    ? *!
    ? 邏輯非,當(dāng)操作數(shù)為ture的時,返回值為false,否則為true.

    ========================================================================
    程序流程控制
    ?
    ?*順序結(jié)構(gòu)
    ?*if條件選擇語句
    ?*switch選擇語句
    ?*while循環(huán)語句
    ?*do while語句
    ?*for循環(huán)語句
    ?*break與continue語句

    ?if條件語句語法1:
    ?if(條件語句)
    ?{
    ?? 執(zhí)行語句塊
    ?}
    ?注意:if(x==null)或if(typeof(x)=="undefined")可以簡寫成if(!x)
    ?if條件語句語法2:
    ?if(條件語句)
    ?{
    ?? 執(zhí)行語句塊1
    ?}
    ?else
    ?{
    ?? 執(zhí)行語句塊2
    ?}
    ?變量=布爾表達(dá)式? 語句1 :語句2
    ?if條件語句語法3:
    ?if(條件語句)
    ?{
    ?? 執(zhí)行語句塊1
    ?}
    ?else if(條件語句2)
    ?{
    ?? 執(zhí)行語句塊2
    ?}
    ?....
    ?else if(條件語句塊n)
    ?{
    ?? 執(zhí)行語句塊n
    ?}
    ?else
    ?{
    ?? 執(zhí)行語句塊n+1
    ?}
    ?if語句塊的嵌套
    ?if(x<1)
    ?{
    ? if(y==1)
    ??? alert("x<1,y==1");
    ? else
    ??? alert("x<1,y!=1");
    ? }
    ? else if(x>10)
    ? {
    ??? if(y==1)
    ????? alert("x>10,y==1);
    ??? else
    ????? alert("x>10,y!=1");??
    ? }

    ===================================================================
    函數(shù)
    ?
    ?*函數(shù)的作用與定義
    ?*全局變量與局部變量
    ?*參數(shù)個數(shù)可變的函數(shù)
    ?*創(chuàng)建動態(tài)函數(shù)
    ?*JavaScript中的系統(tǒng)函數(shù)

    ? 定義一個函數(shù)的語法如下:
    ? function 函數(shù)名 (參數(shù)列表)
    ? {
    ???? 程序代碼
    ???? return 表達(dá)式;
    ? }
    ? 對函數(shù)調(diào)用的幾種方式:
    ? 1.函數(shù)名(傳遞函數(shù)的參數(shù)1,傳遞給函數(shù)的參數(shù)2,.....)
    ? 2.變量=函數(shù)名(傳遞函數(shù)的參數(shù)1,傳遞給函數(shù)的參數(shù)2,.....)
    ? 3.對于有返回值的函數(shù)調(diào)用,也可以在程序中直接使用返回結(jié)果,例如:
    ? alert("sum="+square(2,3));

    ? 全局變量與局部變量,看下面的代碼:
    ? <script language="javascript">
    ?? var msg="全局變量";
    ?? function show()
    ?? {
    ????? msg="局部變量";
    ?? }
    ?? show();
    ?? alert(msg);
    ? </script>

    ? 參數(shù)個數(shù)可變的的函數(shù):
    ?<script language="javascript">
    ? function testparams()
    ? {
    ??? var params="";
    ??? for(var i=0;i<arguments.length;i++)
    ??? {
    ????? params +=" "+ arguments[i];
    ??? }
    ??? alert(params);
    ? }
    ??? testparams("abc",123);
    ??? testparams(123,456,"abc");
    ?</script>
    ? 注意:arguments代表了傳遞給函數(shù)的所有參數(shù)的所有集合。當(dāng)函數(shù)的個數(shù)不確定,
    ? 獲得參數(shù)個數(shù)很多,你又不想為每個參數(shù)定義一個變量,那么你就可以定義一個
    ? 像上面那個一樣的,定義一個為空的參數(shù)名,在內(nèi)部用循環(huán)來實現(xiàn)。
    ?創(chuàng)建動態(tài)函數(shù)的語法:
    ?var varName=new Function(argument1,....,lastArgument);
    ?說明:
    ?所有的參數(shù)都必須是字符串型的,最后的參數(shù)必須是這個動態(tài)函數(shù)的功能程序代碼.
    ?例子:
    ?<script>
    ?? var square=new Function("x","y",
    ??????????? "var sum;sum=x*x+y*y; return sum;");
    ?? alert(square(3,2));
    ?</script>
    ?動態(tài)函數(shù)有什么作用,在什么情況下使用?
    ?
    ?JavaScript中的系統(tǒng)函數(shù):
    ?.encodeURI方法(比URL的描述的范圍更大,一般情況下可以等同)
    ?返回一個URI字符串編碼后的效果。例如:
    ?<script language="javascript">
    ?? var uriStr=encodeURI("http://www.doit.org/index.html?country=中國&name=z x");
    ?? alert(uriStr);
    ?</script>

    ?.decodeURI方法
    ?將一個已編碼的URI字符串解碼成最初的字符串并返回.
    ?.parseInt方法
    ? 第一字符串按指定的進(jìn)制轉(zhuǎn)換成一個整數(shù),語法格式為:parseInt(numString,[redix])。
    ? 如果沒有指定第二個參數(shù),則前綴為'Ox'的字符串被視為十六進(jìn)制,前綴為'O'的字符串
    ? 被視為八進(jìn)制,所有其他的字符串被視為十進(jìn)制。
    ? 例如: alert(parseInt("123abc",10));
    ?.parseFloat方法
    ? 將一個字符串轉(zhuǎn)換為小數(shù)。
    ?.isNaN方法(用與檢測)
    ?.escape方法(用于對文本的簡單加密)
    ? 返回對一個字符串進(jìn)行編碼后的結(jié)果字符串。所有空格,標(biāo)點,重音符號以及任何其他
    ? ASCII字符都用%xx編碼替換,其中xx等于表示該字符的Unicode編碼的十六進(jìn)制數(shù),字符
    ? 值大于255字符以%uxxxx格式表示。
    ?.unescape方法
    ? 將一個用escape方法編碼的字符串解碼成原始字符串。
    ?.eval方法
    ? 將其中的參數(shù)字符串作為一個JavaScript表達(dá)式執(zhí)行。

    =======================================================================
    ? 對象
    ?*對象與對象實例
    ?*構(gòu)造方法與this關(guān)鍵字的作用
    ?*在函數(shù)中修改參數(shù)值的問題

    ?對象與對象實例
    ?.對象中所包含的變量就是對象的屬性,對象中所包含的對屬性進(jìn)行操作的函數(shù)就是對象的
    ? 方法,對象的屬性和方法都叫對象的成員。
    ?.對象是某一類事物的描述,是抽象的概念;而對象實例是一類事物中的具體個例。
    ?.能夠被用來創(chuàng)建對象實例的函數(shù)就是對象的構(gòu)造函數(shù),只要定義一個對象的構(gòu)造函數(shù),就
    ? 等于被定義了一個對象。使用new關(guān)鍵字和對象的構(gòu)造函數(shù)就可以創(chuàng)建對象實例,語法格式
    ? 如下: var ObjectInstance = new ObjName(傳遞給該對象的實際參數(shù)列表)。
    ? <script language="javascript">
    ? function Person()
    ? {
    ??? //這是一個構(gòu)造函數(shù)
    ? }
    ? var person1 = new Person();? //創(chuàng)建了一個實例變量(對象實例)
    ? person1.age = 18;
    ? person1.name = "blovesaga"; //age和name為對象屬性
    ? //alert(person1.name+"."+person1.age);
    ? function sayFunc()
    ? {
    ??? alert(person1.name+"."+person1.age);//我們也可以使用person["age"](對象實例["成員變量"])來訪問
    ? }
    ? person1.say=sayFunc;? //把方法名賦值給了person1.say成員,我們可以在其他地方像
    ??????????????????????? //調(diào)用方法一樣來調(diào)用
    ? person1.say();
    ? </script>

    看下面的例子:
    <html>
    ?<script language="javascript">
    ?? //定義一個構(gòu)造函數(shù),也就是對象的名稱為person
    ?? function Person()
    ?? {
    ?? }
    ?? //創(chuàng)建一個對象實例
    ?? var person1=new Person();
    ?? person1.age=18;
    ?? person1.name="zxy";
    ?? //編寫一個成員方法
    ?? function sayFunc()
    ?? {
    ????? var x="name";
    ????? eval("alert(person1."+ x + ");");? //這個字符串中的內(nèi)容將被作為JavaScipt代碼來執(zhí)行
    ????? alert(person1.name+":"+person1.age);
    ?? }
    ?? person1.say=sayFunc; //把方法名賦值給了person1.say成員
    ?? person1.say=sayFunc(); //寫了括號表示執(zhí)行sayFunc()函數(shù)在復(fù)值
    ?? person1.say();
    ?</script>
    </html>

    ===================================================================
    構(gòu)造方法與this關(guān)鍵字

    ?.為一個對象實例新增加的屬性和方法,不會增加到同一個對象所產(chǎn)生的其它對象實例上。
    ?.所有的實例對象在創(chuàng)建都會自動調(diào)用構(gòu)造函數(shù),在構(gòu)造函數(shù)中增加的屬性和方法會被
    ? 增加到每個對象實例上。
    ?.對象實例是使用new關(guān)鍵字創(chuàng)建的,在構(gòu)造方法中不要有返回結(jié)果的return語句。
    ?.調(diào)用對象的成員方法時,需要使用“對象實例.成員方法"的形式,很顯然,用作成
    ? 員方法的函數(shù)被調(diào)用,一定伴隨有某個對象實例。this關(guān)鍵字代表某個成員方法執(zhí)行時
    ?? ,引用該方法的當(dāng)前對象實例,所以,this關(guān)鍵字一般只在用作對象成員方法的
    ? 函數(shù)中出現(xiàn)。
    ? <script language="javascript">
    ?? function Person(name,age)
    ?? {
    ???? this.age=age;
    ???? this.name=name;
    ???? this.say=sayFunc;
    ?? }
    ?? function sayFunc()
    ?? {
    ????? alert(this.name+":"+this.age);
    ?? }
    ?? var person1=new Person("張山",18);
    ?? person1.say();
    ?? var person2 = new Person("里四",30);
    ?? person2.say();
    ? </script>
    例子代碼:
    <html>
    ?<script language="javascript">
    ?? //定義一個構(gòu)造函數(shù)
    ?? function Person(name,age)
    ?? {
    ???? this.name=name;//當(dāng)前的對象實例增加一個成員變量name,成員變量的通過Person()參數(shù)name傳遞進(jìn)來
    ???? this.age=age;//當(dāng)前的對象實例增加一個成員變量age,成員變量的通過Person()參數(shù)age傳遞進(jìn)來
    ???? this.say=sayFunc; //增加一個sayFunc()函數(shù)
    ?? }
    ?? function sayFunc()
    ?? {
    ???? alert(this.name + ":" + this.age);
    ?? }
    ?? //創(chuàng)建一個對象實例
    ?? var person1=new Person("張三",18);
    ?? person1.say();? //調(diào)用person1的say()成員方法
    ?? var person2=new Person("李四",29);
    ?? person2.say();? //調(diào)用person2的say()成員方法
    ?</script>
    </html>

    =====================================================================
    在函數(shù)中修改參數(shù)值的問題

    ?將基本數(shù)據(jù)類型的變量作為函數(shù)參數(shù)傳遞的情況:
    ?<script language="javascript">
    ? function changeValue(x)
    ? {
    ??? x=5;
    ? }
    ? var x=3;
    ? changeValue(x);
    ? alert(x);
    ?</script>
    注意: 在函數(shù)changeValue(x)中的x=5并不能修改主程序中的x值,函數(shù)接受的參數(shù)
    就相當(dāng)于一個局部變量,當(dāng)函數(shù)調(diào)用完也就沒用了。所以該程序的結(jié)果為x=3;如果
    我們把一個對象的實例傳遞給函數(shù),而我們有在函數(shù)中修改了對象實例的屬性,那么
    最后的結(jié)果也會變化的。

    posted @ 2006-06-05 22:34 藍(lán)色Saga 閱讀(275) | 評論 (0)編輯 收藏

    僅列出標(biāo)題
    共7頁: 上一頁 1 2 3 4 5 6 7 下一頁 
    主站蜘蛛池模板: 国产精品成人免费视频网站京东 | 亚洲乱码精品久久久久..| 亚洲高清日韩精品第一区| 特级毛片aaaa级毛片免费| 最近免费中文字幕大全免费| 中文字幕第一页亚洲| 亚洲精品自偷自拍无码| 三年片在线观看免费观看大全动漫 | 国产亚洲精品成人AA片| 一级毛片全部免费播放| 亚洲国产日韩精品| 亚洲综合最新无码专区| 黄色免费网址大全| 亚洲精品视频久久| 蜜臀AV免费一区二区三区| 亚洲va中文字幕无码久久| eeuss草民免费| 亚洲一区二区三区在线观看精品中文| 污污的视频在线免费观看| 亚洲成av人片不卡无码久久| 亚洲国产精品网站在线播放| 性xxxx视频播放免费| 亚洲精品中文字幕无乱码| 亚洲精品视频免费观看| 最近中文字幕免费大全| 亚洲国产精品福利片在线观看| 日韩电影免费在线观看| 亚洲AV成人片色在线观看高潮| 小草在线看片免费人成视久网| 国产午夜亚洲精品不卡| 又粗又黄又猛又爽大片免费| 一区二区三区免费精品视频| 亚洲免费视频网站| 91精品视频免费| 亚洲日韩亚洲另类激情文学| 亚洲成人午夜在线| 亚洲男人第一无码aⅴ网站| 成人五级毛片免费播放| 国产精品入口麻豆免费观看| 国产精品视频白浆免费视频| 国产精品无码免费专区午夜|