java中equal和==的區別: equal方法除非進行了重寫(比如String類和基本類型包裝類),否則都是進行對象引用的比較。而==除了比較基本類型時是比較值,其他情況均是比較引用地址。 java適配器模式? 將原來的實現介面所有方法變成了繼承實現了介面方法的抽象類(adapter),然後再實 ...
java中equal和==的區別:
equal方法除非進行了重寫(比如String類和基本類型包裝類),否則都是進行對象引用的比較。而==除了比較基本類型時是比較值,其他情況均是比較引用地址。
java適配器模式?
將原來的實現介面所有方法變成了繼承實現了介面方法的抽象類(adapter),然後再實現想要的方法。
抽象類和介面的區別
抽象類和普通類的區別隻是抽象類包含至少一個抽象方法,並且在聲明時要加上個abstract。
介面是一種特殊的抽象類,有以下特點: 成員變數:只能是常量 成員函數:只可以是抽象 構造方法:無 關係和區別: 類與類:繼承,單繼承 類與介面:單實現,多實現(這個也算是多繼承的一種形式) 介面與介面:單繼承,多繼承(這裡也就彌補了java沒有多繼承的缺陷) 最重要的區別:設計理念 介面類: like a(具有某些特定的功能和方法,比如某個動物實現了跑和吃的介面) 抽象類: is a(屬於某個範疇,比如貓屬於貓科動物,必須繼承自貓科動物這個抽象類,但貓科動物只是個概念沒有具體實現) java多線程: 1.線程安全問題: 產生的原因:多個線程 存在共用數據 對共用數據進行多條語句操作 具體又可以分為兩種情況 (1)相同類型的多個線程 如多個視窗賣票 票是共用資源,對其進行賣票操作 (2)不同類型的多個線程 如對人進行命名和獲取年齡操作 人對象是共用資源 但進行兩種操作,一種獲取信息,另一種是設置參數 以上兩種情況要想保證線程安全需要進行加鎖才能保證安全 (1)對賣票這個操作進行加鎖(即run方法中的對共用資源進行操作的語句加synchronized(new object())語句,其中加的鎖對象也要保證所有線程用的是一樣的)(2)對獲取信息和設置參數均加鎖,並且加的鎖要保證相同! 其實上面兩種情況本質是一樣的,即對共用資源的操作需要加上唯一的一把鎖。 2.線程的死鎖問題的描述: eg: 線程1和線程2分別擁有a鎖和b鎖,現線上程1想拿到b鎖進行b操作,同時線程2也想拿到a鎖進行a操作,但是兩把鎖卻分別被對方擁有,此時就會出現二者互相想那對面的鎖卻不放棄自己鎖的現象,導致進入阻塞死鎖狀態。 籠統的說:是指兩個或兩個以上的進程在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。 另一種解釋方式: 死鎖是因為多線程訪問共用資源,由於訪問的順序不當所造成的,通常是一個線程鎖定了一個資源A,而又想去鎖定資源B;在另一個線程中,鎖定了資源B,而又想去鎖定資源A以完成自身的操作,兩個線程都想得到對方的資源,而不願釋放自己的資源,造成兩個線程都在等待,而無法執行的情況。 java網路編程大致流程: udp 編程 發送端: 1,創建socket對象 構造函數 DatagramSocket() 2.創建數據並打包 byte[] bts="helloworld".getBytes() DatagramPacket dp=newDatagramPacket(bts,bts.getLength,InetAddress.getByName("192.168.1.12"),10086) 3.數據發送 ds.sent(dp) 4.釋放 ds.close() 接收端: 1,創建socket對象 DatagramSocket ds=new DatagramSocket(埠號[>1000]) 2,創建包裹 DatagramPacket dp=new DatagramPacket(bytes,bytes.length()) //bytes為位元組數組byte[],存放數據 3,接收數據 ds.receive(dp) 4,解析數據並顯示或應用 String ip=dp.getAddress().getHostAddress(); //得到ip地址 String data=String(dp.getData(),0,dp.getLength()) //得到數據包中的字元串 5,釋放資源 ds.close() tcp編程: 客戶端 1,新建socket對象 2,獲取輸出流,寫數據 outputStream 3,釋放資源 伺服器端 1,新建ServerSocket對象 2,監聽客戶端的sokcet ,進行連接 socket s= new ServerSocket().accept(); 3,獲取輸入流,讀取數據; 4,釋放資源