Java進階教程(一)關鍵字__Java

來源:互聯網
上載者:User
Java進階教程(一) 關鍵字

synchronized:當它用來修飾一個方法或者一個代碼塊的時候,能夠保證在同一時刻最多隻有一個線程執行該段代碼。

instanceof:在運行時指出對象是否是特定類的一個執行個體。
result = object instanceof class

strictfp:strict float point (精確浮點),保證平台移植之後,浮點運算結果是一致的。

transient:如果用transient聲明一個執行個體變數,當Object Storage Service時,它的值不需要維持。即用transient關鍵字標記的成員變數不參與序列化過程。

assert:斷言可以證明程式的正確性。
assert expression1
assert expression1: expression2
expression1表示一個boolean運算式,expression2表示一個基本類型、運算式或者是一個Object,用於在失敗時輸出錯誤資訊。
在eclipse中,必須開啟相關設定。具體在Window->Preferences->Java->Installed JREs,選擇相關版本,點擊edit,在Default VM arguments裡面輸入-ea。

import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;public class Demo {    public static void main(String[] args) {        People people = new People();        try {            //序列化            ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("people.dat"));            oos.writeObject(people);            oos.close();            //還原序列化            ObjectInputStream ois = new ObjectInputStream(new FileInputStream("people.dat"));            people = (People) ois.readObject();            ois.close();        } catch (Exception e) {            e.printStackTrace();        }        //線程        MyRunner boy = new MyRunner(people, "GG", "boy");        MyRunner girl = new MyRunner(people, "MM", "girl");        Thread thread1 = new Thread(boy,"boy");        Thread thread2 = new Thread(girl,"girl");        thread1.start();        thread2.start();        //斷言        boolean isPeople = people instanceof People;        assert !isPeople:"it's wrong";    }}class People implements Serializable{    private String name;    private String sex;    private transient String school = "FJNU";    public synchronized void set(String name,String sex) {        this.name = name;        this.sex = sex;    }    public void print(){        System.out.println("name="+name+",sex="+sex+",school="+school);    }}class MyRunner implements Runnable{    private People people;    private String name;    private String sex;    public MyRunner(People people,String name,String sex) {        this.people = people;        this.name = name;        this.sex = sex;    }    @Override    public void run() {        for(int i=0;i<10;i++){            people.set(name, sex);            people.print();        }    }}
運行結果如下:
Exception in thread “main” name=MM,sex=girl,school=null
name=MM,sex=girl,school=null
name=MM,sex=girl,school=null
name=GG,sex=boy,school=null
name=MM,sex=girl,school=null
name=MM,sex=girl,school=null
name=MM,sex=girl,school=null
name=MM,sex=girl,school=null
name=MM,sex=girl,school=null
name=MM,sex=girl,school=null
name=MM,sex=girl,school=null
name=MM,sex=girl,school=null
name=GG,sex=boy,school=null
name=GG,sex=boy,school=null
name=GG,sex=boy,school=null
name=GG,sex=boy,school=null
name=GG,sex=boy,school=null
name=GG,sex=boy,school=null
name=GG,sex=boy,school=null
name=GG,sex=boy,school=null
java.lang.AssertionError: it’s wrong at Demo.main(Demo.java:32) 請讀者思考如下問題,歡迎在評論中互動:
如果People的set方法去掉synchronized關鍵字,結果會怎樣。
為什麼school是null。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.