2011年12月30日 星期五

[Grails](groovy)領域類(domain)的生命週期事件

領域類(domain)的生命週期事件



這包括針對CRUD操作的四個事件回調:
onLoad、beforeInsert、befortUpdate及beforeDelete,
當執行資料庫操作時就會觸發四個方法。

onLoad在此類從資料庫中載入時被啟用。
beforeInsert在save()方法執行前被啟用。
beforeUpdate在update()方法執行前被啟用。
beforeDelete在delete()方法執行前被啟用。

domain例:

class User{
String name
// ...
def beforeInsert = {
// your code goes here
}
def beforeUpdate = {
// your code goes here
}
def beforeDelete = {
// your code goes here
}
def onLoad = {
// your code goes here
}
}


這裡對上述事件進行補充。

Grails支持GORM事件及Hibernate套件,

GORM事件的定制包括事件的註冊,在刪除、插入及更新發生時會觸發這些事件。

Hibernate的事件套件為領域模型提供了支持,
可以使用以下這些方法來對Hibernate的事件系統進行啟用:
afterInsert、afterUpdate、afterDelete、 beforeLoad、afterLoad、beforeSave及afterSave。


其它的領域層事件就是領域類的時間戳記了。
如果你提供了一對特別命名的字段(lastUpdated与dateCreated),GORM就會自動為這個類增加時間。

在Web應用的其它層上,Grails提供了Web執行事件以管理Web的執行
(從一種狀態轉化為另一種狀態)和
Ajax事件(如果Web應用中發生了某個事件就會去調用一個特定的JavaScript函數)。

Grails還支持對自動重新加載事件的攔截,
這可用來監控資源的改變,當發生變化時會重新加載資源。
這就是Grails在運行時能重新加載應用的原因。


















其它文章

2011年12月29日 星期四

[Grails](groovy)domain領域類的屬性

程式如下:
package mytest

import java.util.Date
/**
* 會員
* @author pc levin
*/
class User {
 /**
 * 名字
 */
 String name
 /**
 * 帳號名稱
 */
 String username
 /**
 * 密碼
 */
 String password
 /**
 * 年齡
 */
 Integer age
 /**
 * 生日
 */
 Date birthday
 /**
 * 薪資
 */
 BigDecimal salary
 
 //將自動在第一次向資料庫存資料時填上日期
 Date dateCreated
 //將在每次次更新後的記錄存回資料庫的時候填充回這個日期
 Date lastUpdated
 //如果不想要自動填入這二個日期用以下三行停用
// static mapping = {
//  autoTimestamp false
//  }
 //暫時不用理,後面會講
 static constraints = {
 }
}
























其它文章

[Grails](groovy)Grails-基本類目錄


建立Grails



建立Grails--domain


建立Grails--controllers



建立Grails--controllers及views


修改Grails--conf



修改Grails--i18n



建立Grails--services




建立Grails--taglib






















其它文章

[Grails](groovy)domain領域類的建立


Grails 接受這些簡單的類,並利用它們完成許多工作。
相對應的資料庫表格會自動為每個領域類(domain)創建。
控制器(controllers)和頁面(views)會依關聯領域類(domain)中的名字,
domain還可以存放驗証規則,定義一對多關系,以及包含其它許多信息的地方。

我們先建位一個User
指令:
create-domain-class User


create-domain-class com.test.User

說明:
create-domain-class 套件名.類別名
顯示以下的圖,就是成功新增一個domain




















看自己的專案的domain的資料夾下會多出你剛新增出來的groovy檔



























其它文章

[Grails](groovy)Grails專案目錄結構

Grails專案目錄結構


專案
grails-app
conf
配置文件(如資料庫、URL 映射、Spring Hibernate 配置文件等)
controllers
控制器(MVC 中的"C"
domain
領域類(MVC 中的模型的"M"。該目錄中的每个文件在資料庫中都有對應的表。)
i18n
i18n(用予錯誤消息和頁面標題及國際化)
services
服務類(用予可能跨多個domaind的企業邏輯)
taglib
自定標籤庫(用予GSP 頁面可重複用元素)
utils
自定義腳本(存放像編碼器(Codec)這類的其他工具)
views
Groovy 服務器頁面(GSP)(MVC 中的"V"
lib
JAR(存放JDBC 驅動和第三方的類別庫)
scripts
Gant 脚本(存放項目特定的脚本)
src
groovy
通用Groovy 源文件(存放其他那些没有慣例位置的文件)
java
Java 來源文件( 用予存放的Java 代碼)。(該目錄中的文件將被編譯並包含到WAR 文件中。)
test
integration
依賴其他组件(如資料庫)的測試腳本
unit
測試隔離組件的測試腳本
web-app
css
CSS
images
圖像文件(JPGGIFPNG 等)
js
JavaScript 文件( 包括像Prototype script.aculo.usYUI 等這樣的第三方庫。)
META-INF
典型的JEE 目錄,用予存放manifest 文件
WEB-INF
典型的JEE 目錄,用予存放web.xml 和其他配置文件
















其它文章

[Grails](groovy)執行Grails改port號(-Dserver.port)

如果執行時錯誤訊息如下:


Server failed to start: LifecycleException: Protocol handler initialization failed:
java.net.BindException: Address already in use<null>:8080


就是要改port號

指令如下:
-Dserver.port=9090 run-app

說明:
-Dserver.port= 你的port要改為多少  run-app















其它文章

[JAVA]JAVA開發-IDE工具

免費工具

eclipse

STS

NetBeans
















其它文章

[JAVA]JAVA.util套件目錄


包含 collection 框架、遺留的 collection 類別、事件模型、日期和時間設施、
國際化和各種實用工具類別(字元串標記產生器、隨機數產生器和位元陣列)。



介面目錄

  • Collection 
  • Comparator 
  • Deque 
  • Enumeration 
  • EventListener 
  • Formattable 
  • Iterator 
  • List 
  • ListIterator 
  • Map 
  • Map.Entry 
  • NavigableMap 
  • NavigableSet 
  • Observer 
  • Queue 
  • RandomAccess 
  • Set 
  • SortedMap 
  • SortedSet 

類別目錄

  • AbstractCollection 
  • AbstractList 
  • AbstractMap 
  • AbstractMap.SimpleEntry 
  • AbstractMap.SimpleImmutableEntry 
  • AbstractQueue 
  • AbstractSequentialList 
  • AbstractSet 
  • ArrayDeque 
  • ArrayList 
  • Arrays 
  • BitSet 
  • Calendar 
  • Collections 
  • Currency 
  • Date 
  • Dictionary 
  • EnumMap 
  • EnumSet 
  • EventListenerProxy 
  • EventObject 
  • FormattableFlags 
  • Formatter 
  • GregorianCalendar 
  • HashMap 
  • HashSet 
  • Hashtable 
  • IdentityHashMap 
  • LinkedHashMap 
  • LinkedHashSet 
  • LinkedList 
  • ListResourceBundle 
  • Locale 
  • Observable 
  • PriorityQueue 
  • Properties 
  • PropertyPermission 
  • PropertyResourceBundle 
  • Random 
  • ResourceBundle 
  • ResourceBundle.Control 
  • Scanner 
  • ServiceLoader 
  • SimpleTimeZone 
  • Stack 
  • StringTokenizer 
  • Timer 
  • TimerTask 
  • TimeZone 
  • TreeMap 
  • TreeSet 
  • UUID 
  • Vector 
  • WeakHashMap 


其它文章目錄:


















其它文章

[Grails](groovy)如何執行Grails

本章使用STS IDE工具

首先我們要先新建一個專案,
File > New > Grails Project 
建專案詳官網
Creating a new Grails project

建完專案後

執行

Ctrl+Alt+Shift+G
出現:





Project是選擇你剛建立完的專案名稱。
grails> 下指令的地方
測試一下是否可以正常執行。下指令run-app
grails> run-app

執行成功畫面:

Server running. Browse to http://localhost:8080/myTest
點選http://localhost:8080/myTest
畫面:

出現此畫面,就是成功執行了。
















其它文章

[Grails](groovy)Grails Documentation


The Grails Framework - Reference Documentation

中文The Grails Framework - Reference Documentation

Grails 入門指南-第二版












其它文章

[Grails](groovy)安裝Grails


Grails 是一個注重成效的開源Web 應用框架。
它使用了大多數Java 開發者已經正在使用的最佳技術——最著名的當屬Spring 和Hibernate

文件檔
grails Download

IDE加入Grails
所有現代Java IDE 都提供了對Groovy 和Grails 的支持:IntelliJ、 NetBeans 和Eclipse


使用IDE

本站使用STS開發,安裝方法官網有說明,本站不另說明。
STS加入Grails 
STS












其它文章

2011年12月28日 星期三

[JAVA]流程控制語法目錄

流程控制語法目錄



















其它文章

[JavaScript]如何使用算術運算子

[JavaScript]如何使用算術運算子


算術運算子
說明
=
將值指定給變數
+
加法
-
減法或負值
*
乘法
/
除法
%
求餘數
++
遞增
--
遞減

用法:

a = 0;
b = 10 ;
c = 5;
a = b + c;
document.write("a=b+c結果:",a,"<br>");
a = b - c;
document.write("a=b-c結果:",a,"<br>");
a = b * c;
document.write("a=b*c結果:",a,"<br>");
a = b / c;
document.write("a=b/c結果:",a,"<br>");
a = b % c;
document.write("a=b%c結果:",a,"<br>");
a = b++;
document.write("a=b++結果:",a,"<br>");
a = b--;
document.write("a=b--結果:",a,"<br>");


結果:

a=b+c結果:15
a=b-c結果:5
a=b*c結果:50
a=b/c結果:2
a=b%c結果:0
a=b++結果:10
a=b--結果:11




















其它文章

[JavaScript]如何檢查變數的型態使用typeof()

[JavaScript]如何檢查變數的型態使用typeof()
例:

                var a;  //宣告a變數
a = 1;          //變數為數字型態
b = "javaScript"; //變數為字串型態
c = true;      //變數為布林值型態
d = new Array(); //變數為陣列物件型態
document.write("a變數型態是:",typeof(a),"<br>");
document.write("b變數型態是:",typeof(b),"<br>");
document.write("c變數型態是:",typeof(c),"<br>");
document.write("d變數型態是:",typeof(d),"<br>");
結果:
a變數型態是:number
b變數型態是:string
c變數型態是:boolean
d變數型態是:object













其它文章

[JavaScript]如何使用變數


一、變數的宣告方法
JavaScript中的變數宣告並不如java語言般來得嚴謹,
設計者可以不需要非常明確的宣告變數的資料型態;
JavaScript的五種基本型態(又稱原生型態) :

未定型態 (Undefined type)
                                         包含undefined
空型態   (Null type)
                                         包含null
布林型態 (Boolean type)
                                        包含true或false

                                        在JavaScript中預設 true 為 1;而 false 為 0 。
事實上,在條件判斷中,只將 0 視為 false,而其它的均視為 true 。

字串型態 (String type)
                                        雙(或單)引數間的字元
數字型態 (Number type)

                                        整數:沒有小數的正或負數。
整數有下列三種表示法,十進位、八進位及十六進位。
 十進位表示法 :非零開始的整數,如 123。
 八進位表示法 :由零開始的整數,如023。
 十六進位表示法:由0x或0X開始的整數,如0x3A。
浮點數:包含正、負的十進位整數、十進位小數或十進位分數。

  物件型態 (Object type)
                                        物件是各種資料與函式的集合,也是物件導向的基礎。
如視窗物件、日期物件、陣列物件等。

變數是用來儲存值(value)的記憶體空間。
var 變數名稱 = 變數初始值
例:
var a; //宣告a變數
a = 1;        //變數為數字型態
a = "javaScript"; //變數為字串型態
a = true;    //變數為布林值型態
a = new Array(); //變數為陣列物件型態

二、變數名稱的限制
變數名稱就是該用來儲存值(value)的記憶
體空間的識別字(identifier)。
變數名稱的命名規則:
第一個字元必需為字母 (A Z 及 a z)、底線(_)、錢幣符號($)開始;
第二個字元除上述以外,還可以使用十進位數字(0 9所組成的數字);
不同大小寫的變數名為不同的變數,如:
Test和 test代表不同的2個變數。

我們也可以不使用var指令,而直接使用該變數,連宣告的動作都可以省去!
但卻也帶來新的麻煩與問題。
如果我們在做算術運算時引入了字串值,將導致錯誤結果!

        使用變數前先行宣告是個好習慣,
這將會幫助我們易於完成與維護龐大而複雜的程式。

二、變數的範圍

我們可以將JavaScript的變數劃分為兩種
全域變數(Global Variables)
區域變數(Local Variables)
依其宣告的位置決定其範圍。
例:
var a = 100;
function  my_function(){
var b = "";
}
var c;

宣告了三個變數

a、c ---全域變數(Global Variables)
b      ---區域變數(Local Variables)

在函數範圍內宣告與變更,為區域變數(Local Variables)
在函數外宣告,為區域變數(Local Variables)
注意:
無論是全域變數還是區域變數,
其範圍都僅限於此文件(html)使用,
也就是說只要文件重置(Reload)或換頁,
該變數即已失去效用。















其它文章

[JavaScript]如何使用JavaScript

[JavaScript]如何使用JavaScript

使用方式:

<Script type ="text/javascript">
程式碼…
</Script>

document.write();是將字串輸出顯示在頁面中

例:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=BIG5">
<title>第一支javaScript</title>
</head>
<body>
<h2>document.write用法</h2>
<Script type ="text/javascript">
document.write("Hello world!!");
</Script>
</body>
</html>

參考
w3schools













其它文章

[JAVA] 使用iterator取出集合內所有的值

凡是有實作java.lang.Iterable介面的類別,或是繼承java.lang.Iterable介面的介面,都具有iterator()方法,可用iterator取值。Set介面與List介面都有繼承java.lang.Iterable,可以使用iterator取值。
以下以Set介面為例,介紹使用iterator取出集合內所有的值的方法。
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class setPractice {
   public static void main(String args[]){
                /*
                 * 宣告型態為Set,實體為HashSet的變數
                 * setTest,限制只能加 入String型態                         
                 * 的資料到setTest中
                 */
                Set setTest = new HashSet();
                /* 
                 * 宣告Iterator型態的變數 it,
                 * 限制只能將String型態加入it 
                 */ 
                Iterator it; 
                setTest.add("apple"); //apple加入setTest
                setTest.add("banana");//banana加入setTest
                setTest.add("tomato");//tomato加入setTest
               /* setTest呼叫iterator()方法,回傳Iterator型態的物件,
                * 該物件包含所有setTest內所存放的值,
                * 將該物件存入it
                */
                it = setTest.iterator(); 
                /*
                 * hasNext()為使用游標走訪Iterator物件,檢查下一筆元素是包含物件,
                 * 有包含物件則傳回true,否則false。
                 * 游標的起始位置在Iterator第一筆元素之前,所以第一次執行hasNext(),
                 * 會檢查Iterator的第一筆元素,使用此方式可以走訪Iterator內的所有物件
                 */
                 while (it.hasNext()) {   
                /*
                 * next()為使用游標走訪Iterator,取出下一筆的值。
                 * 游標的起始位置在Iterator第一筆之前,所以第一次執行next(),會
                 * 取出Iterator的第一筆資料
                 */
                 System.out.println(it.next());
  }
 }
}

執行結果:banana
        tomato
        apple
綜合以上的介紹,我們整理使用iterator取出集合內所有的值的方法:

1. 該集合類別/介面需要有iterator方法(透過實作/繼承java.lang.Iterable而來)
2. 呼叫iterator方法,取得Iterator型態的物件,該物件包含集合內所有的值
3. 使用while迴圈,迴圈的條件式內使用Iterator型態的物件呼叫hasNext(),迴圈會走訪Iterator的所
   有元素。在while迴圈區塊內使用next(),每次執行回圈,就將走訪到的元素值取出。迴圈全部執行完畢
   後,所有的值即取出完畢。













其它文章

[MySQL]2-15 宣告變數及其應用

MySQL的變數長相為@zzzxxxyyy,小老鼠+你想取的名稱,整串@zzzxxxyyy為一個變數。
宣告分兩種,其一外在宣告,其二內在宣告

首先介紹內在宣告,以下將舉例講解︰
先新增測試假資料
CREATE TABLE heyf_t10 (
empid INT ,
deptid INT ,
salary DECIMAL(10, 2)
);
INSERT INTO heyf_t10 VALUES
(1,10,5500.00),
(2,10,4500.00),
(3,20,1900.00),
(4,20,4800.00),
(5,40,6500.00),
(6,40,14500.00),
(7,40,44500.00),
(8,50,6500.00),
(9,50,7500.00);


接著,開始對這些假資料做操作,下方SQL中(SELECT @rownum := 0, @pdept := NULL , @rank := 0) AS a ,這裡就是做初步的變數宣告,而此變數宣告必須給初值,給值的符號為 := 中間不可空格,先宣告後就可以使用了。
SELECT
         empid,
         deptid,
         salary,
         rank
FROM
         (SELECT
                  heyf_tmp.empid,
                  heyf_tmp.deptid,
                  heyf_tmp.salary,
                  @rownum := @rownum+1 ,
                  /*上句意義是,變數@rownum每歷經一筆資料都加1*/
                  IF(@pdept = heyf_tmp.deptid, @rank := @rank+1, @rank := 1) AS rank,
                  /*上句意義是,變數@pdept 如果等於deptid值則@rank+1,否則@rank 給值 1*/
                  @pdept := heyf_tmp.deptid
                  /*上句意義,變數@pdept給值deptid*/
         FROM
                  (SELECT @rownum := 0, @pdept := NULL , @rank := 0) AS a ,
                  (SELECT
                           empid,
                           deptid,
                           salary
                  FROM
                           heyf_t10
                  ORDER BY
                           deptid ASC ,salary DESC
                  ) heyf_tmp
         ) AS result

結果︰先依照deptid分組,再依照salary來做排序的動作。















以上是內部變數宣告的應用,其實會這樣用的SQL不多見,只是提供個方式可以這樣做而已


接下來介紹外部宣告
外部宣告意即會在主SQL外做額外的SET @zzzxxxyyy宣告的動作,以下將使用範例解說。

SET @A = '測試';
SELECT user.*, @A
FROM user;
上下兩句是相同的,因為是額外的語句做宣告所以可以直接使用 = 號
SET @A := '測試';
SELECT user.*, @A
FROM user;

結果︰@A可以接受到範例中的測試字樣,但其實可以接受任何值











內部宣告沒給初值會錯,外部宣告也會錯,但值得注意的是,內部一錯整句SQL都會錯導致無法執行,但外部宣告的情況將會演變成宣告式是錯的,底下的查詢卻正常運行,而該變數的值就會變成NULL
SET @A;
SELECT user.*, @A
FROM user;

結果︰變數@A沒有得到任何值,皆顯示NULL














其它文章

[JAVA]介面 Iterable


java.lang
介面 Iterable<T>


實作這個介面允許物件成為 "foreach" 語句的目標。



 Iterator<T>iterator()
          返回一個在一組 T 型別的元素上進行迭代的迭代器。

所以常用的Collection、List等,都有實作此介面。

詳細參考:
JAVA API
Iterable (Java Platform SE 6)














其它文章

[JAVA]介面Cloneable


如果類別實作了 Cloneable 介面,
以指示 Object.clone() 方法可以合法地對該類別實例進行按欄位複製。

如果在沒有實作 Cloneable 介面的實例上調用 Object 的 clone 方法,
則會導致拋出 CloneNotSupportedException 異常。

按照慣例,實作此介面的類別應該使用公共方法覆寫 Object.clone(它是受保護的)。


注意,此介面不含 clone 方法。
因此,因為某個物件實作了此介面就複製它是不可能的。
即使 clone 方法是反射性調用的,也無法保證它將獲得成功。


JAVA API
Cloneable (Java Platform SE 6)












其它文章

[JAVA]Object-物件的複製使用clone()

[JAVA]Object-物件的複製使用clone()

要使用clone(),需要實作介面Cloneable。

Object 類別本身不實作介面 Cloneable,所以在類別為 Object 的物件上調用 clone 方法將會導致在運行時拋出異常。

CloneNotSupportedException - 
如果物件的類別不支持 Cloneable 介面,則覆寫 clone 方法的子類別也會拋出此異常,以指示無法複製某個實例。

Object 類別的 clone 方法執行特定的複製操作。
首先,如果此物件的類別不能實作介面 Cloneable,
則會拋出 CloneNotSupportedException。
注意,所有的陣列都被視為實作介面 Cloneable。
否則,此方法會創建此物件的類別的一個新實例,並像通過分派那樣,
嚴格使用此物件相應欄位的內容初始化該物件的所有欄位;
這些欄位的內容沒有被自我複製。
所以,此方法執行的是該物件的「淺表複製」,而不「深層複製」操作。

測試:
一般用法:(淺表複製)
package com.test;

public class TestClone implements Cloneable {
 public static final  int i=1;

 @Override
 public Object clone() throws CloneNotSupportedException {
  return super.clone();
 }
 
 public static void main(String[] args) {
  
  try {
   TestClone t = new TestClone();
   //使用clone
   TestClone t1 = (TestClone) t.clone();
   //顯示記憶體位置
   System.out.println(t);
   //com.test.TestClone@150bd4d
   System.out.println(t1);
   //com.test.TestClone@1bc4459
   //位置是不一樣了,是不同的物件
   
   //陣列會自動implements Cloneable
   //所以會有clone的功能
   int i[] = {1,2,5,8,8,8};
   int a[]=i.clone();
   System.out.println(i.equals(a));
   //false
   System.out.println(a[2]);
   //5
  }
  catch (CloneNotSupportedException e) {
   e.printStackTrace();
  }
 }
}


進階用法:( 深層複製 )
例:
用一般的用法:
package com.test;

import java.util.ArrayList;

public class TestCloneAdvanced implements Cloneable{

 private int   i;
 private ArrayList arrayList;

 @Override
 public String toString() {
  return "i=" + i + ",arrayList=" + arrayList;
 }

 public static void main(String[] args) {
  TestCloneAdvanced clone1 = new TestCloneAdvanced();
  clone1.i = 3;
  clone1.arrayList = new ArrayList();
  clone1.arrayList.add("value 1");
  TestCloneAdvanced clone2 = null;
  try {
   clone2 = (TestCloneAdvanced) clone1.clone();
  }
  catch (CloneNotSupportedException e) {
   e.printStackTrace();
  }
  System.out.println("複製物件後,顯示結果:");
  System.out.println("clone1:" + clone1);
  System.out.println("clone2:" + clone2);
  System.out.println("將clone1改變值後,顯示結果:");
  clone1.i = 5;
  clone1.arrayList.add("value 2");
  System.out.println("clone1:" + clone1);
  System.out.println("clone2:" + clone2);
  System.out.println("將clone1改變值後,clone2的arrayList的值也會改");
  System.out.println("因為arrayList物件沒有複製");
  System.out.println("clone1.arrayList==clone2.arrayList?" +
                     (clone1.arrayList == clone2.arrayList));
 }

}
結果在物件裡的物件,無法複製。


結決方法:Override clone
例:
package com.test;

import java.util.ArrayList;

public class TestCloneAdvanced1 implements Cloneable {

 private int   i;
 private ArrayList arrayList;

 @Override
 public String toString() {
  return "i=" + i + ",arrayList=" + arrayList;
 }

 @Override
 public Object clone() throws CloneNotSupportedException {
  TestCloneAdvanced1 clone = (TestCloneAdvanced1) super.clone();
  clone.arrayList = (ArrayList) this.arrayList.clone();
  return clone;
 }

 public static void main(String[] args) {
  TestCloneAdvanced1 clone1 = new TestCloneAdvanced1();
  clone1.i = 3;
  clone1.arrayList = new ArrayList();
  clone1.arrayList.add("value 1");
  TestCloneAdvanced1 clone2 = null;
  try {
   clone2 = (TestCloneAdvanced1) clone1.clone();
  }
  catch (CloneNotSupportedException e) {
   e.printStackTrace();
  }
  System.out.println("複製物件後,顯示結果:");
  System.out.println("clone1:" + clone1);
  System.out.println("clone2:" + clone2);
  System.out.println("將clone1改變值後,顯示結果:");
  clone1.i = 5;
  clone1.arrayList.add("value 2");
  System.out.println("clone1:" + clone1);
  System.out.println("clone2:" + clone2);
  System.out.println("將clone1改變值後,clone2的arrayList的值不會改了");
  System.out.println("clone1.arrayList==clone2.arrayList?" + 
                      (clone1.arrayList == clone2.arrayList));
 }

}

結果:



進階參考網站:

小妖與鴨居的家














其它文章

[JAVA]Object的用法

Object 是所有的類別的父類別。
每個類別都會extends Object ,所以程式不要寫,就會自動extends。
所有物件(包括陣列)都實作這個類別的方法。

用法:
只有一個建構子(constructor) Object()。
Object object =new Object();

常用的方法:


 booleanequals(Object obj)
          指示其他某個物件是否與此物件「相等」。


                Object object =new Object();
Object object1 =new Object();
System.out.println(object.equals(object1));//false
Object object2 = object;
System.out.println(object.equals(object2));//true




 StringtoString()
          返回該物件的字元串表示。


Object 類別的 toString 方法返回一個字元串, 該字元串由類別名(物件是該類別的一個實例)、 at 標記符“@”和此物件雜湊碼的無符號十六進製表示組成。 換句話說,該方法返回一個字元串,它的值等於:
getClass().getName() + '@' + Integer.toHexString(hashCode())


System.out.println(object.toString());//java.lang.Object@ecd7e
System.out.println(object1.toString());//java.lang.Object@1d520c4
System.out.println(object2.toString());//java.lang.Object@ecd7e



其它方法:


protected  Objectclone()
          創建並返回此物件的一個副本。
protected  voidfinalize()
          當垃圾回收器確定不存在對該物件的更多參考時,由物件的垃圾回收器調用此方法。
 Class<?>getClass()
          返回此 Object 的運行時類別。
 inthashCode()
          返回該物件的雜湊碼值。
 voidnotify()
          喚醒在此物件監視器上等待的單個執行緒。
 voidnotifyAll()
          喚醒在此物件監視器上等待的所有執行緒。
 voidwait()
          在其他執行緒調用此物件的 notify() 方法或 notifyAll() 方法前,導致當前執行緒等待。
 voidwait(long timeout)
          在其他執行緒調用此物件的 notify() 方法或 notifyAll() 方法,或者超過指定的時間量前,導致當前執行緒等待。
 voidwait(long timeout, int nanos)
          在其他執行緒調用此物件的 notify() 方法或 notifyAll() 方法,或者其他某個執行緒中斷當前執行緒,或者已超過某個實際時間量前,導致當前執行緒等待。
執行緒相關的方法:
notify、notifyAll、wait
另章介紹 

                建製中…


回收器相關的方法:
finalize()

另章介紹 
                建製中…


取得class 套件名稱:
System.out.println(object.getClass());//class java.lang.Object


複製的方法:
clone()
另章介紹
[JAVA]Object-物件的複製使用clone()


JAVA Object API

Object (Java Platform SE 6)












其它文章

[JAVA]程式分享--多人聊天室簡單版

[JAVA]程式分享--多人聊天室
此程式為SERVER端
//--------------------------------------------------------------//
// MyServer.java 2011年04月15日
//--------------------------------------------------------------//
import java.io.*;
import java.net.*;
import java.util.*;
//--------------------------------------------------------------//
//程式流程
//---MyServer  --主類別檔
//-1-main  --主程式進入點
//-2-go()   --方法  --建位連線  --等待請求連線
//     --取得連線後往下執行
//-3-Process  --內部類別 --處理程序
//-3.1-Process  --建構子 --由執行緒呼叫 --建立接收
//-3.2-run()  --方法  --執行執行緒
//-3.3-tellApiece() --方法  --告訴每人
//--------------------------------------------------------------//
//MyServer主類別檔
//--------------------------------------------------------------//
public class MyServer{
 
 Vector output;//output
 //--------------------------------------------------------------//
 //-1-主程式進入點
 //--------------------------------------------------------------//
 public static void main (String args[]){
  new MyServer().go();     
 }
 //--------------------------------------------------------------//
 //-2-建位連線
 //--------------------------------------------------------------//
 public void go() {
  //建立物件陣列
  output = new Vector();          
  try{
   //產生ServerSocket設定port:5000
   ServerSocket serverSock = new ServerSocket(8888);  
   while(true){
    //等待連線的請求--串流
    Socket cSocket = serverSock.accept();    
    //建立I/O管道
    PrintStream writer = 
     //取得Socket的輸出資料流
     new PrintStream(cSocket.getOutputStream());  
    System.out.println(writer); 
    //元件加入Vector
    output.add(writer);         
    //傳入一個Runnable物件並分派一個新的執行緒
    //建立伺服器主執行緒
    Thread t = new Thread(new Process(cSocket)); 
    //啟動執行緒
    t.start();           
    //取得連線的ip       
    System.out.println(cSocket.getLocalSocketAddress()+ 
    //執行緒的在線次數
         "有"+(t.activeCount()-1)+  
    //顯示連線人次
         "個連接");               
   } 
  }catch(Exception ex){System.out.println("連接失敗");}
 }
 //--------------------------------------------------------------//
 //-3-Process處理程序
 //--------------------------------------------------------------//
 public class Process implements Runnable{   
  //暫存資料的Buffered
  BufferedReader reader;  
  //建立一個Socket變數  
  Socket sock;            
  //----------------------------------------------------------//
  //-3.1-由執行緒呼叫---建立接收
  //----------------------------------------------------------//
  public Process(Socket cSocket)
  {
   try{
    sock = cSocket;
    //取得Socket的輸入資料流
    InputStreamReader isReader =        
    new InputStreamReader(sock.getInputStream()); 
        
    reader = new BufferedReader(isReader);
   }catch(Exception ex){
    System.out.println("連接失敗Process");
   } 
  }
  //--------------------------------------------------------------//
  //-3.2-執行執行緒
  //--------------------------------------------------------------//
  public void run(){
   String message;
   try{
       //讀取資料
    while ((message = reader.readLine())!=null){   
     System.out.println("收到"+message);
     tellApiece(message);
    }
   }catch(Exception ex){System.out.println("有一個連接離開");}
  }
  //--------------------------------------------------------------//
  //-3.3-告訴每人
  //--------------------------------------------------------------//
  public void tellApiece(String message){
   //產生iterator可以存取集合內的元素資料    
   Iterator it = output.iterator(); 
   //向下讀取元件   
   while(it.hasNext()){          
    try{
    //取集合內資料
    PrintStream writer = (PrintStream) it.next();  
    //印出
    writer.println(message); 
    //刷新該串流的緩衝。
    writer.flush();           
    }
    catch(Exception ex){
     System.out.println("連接失敗Process");
    }
   }
  }
 } 
}


此程式為CLIENT端
//--------------------------------------------------------------//
// MyClient.java 2011年04月15日
//--------------------------------------------------------------//
import java.io.*;
import java.net.*;
import java.util.*;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.*;
import java.awt.event.*;
//--------------------------------------------------------------//
//程式流程
//---MyClient   --主類別檔
//-1-main()   --主程式進入點
//-2-MyClient()   --   --設定及宣告  
//-3-EstablishConnection() --方法   --建立連線
//-4-class IncomingReader --內部類別  --接收資料
//-5-actionPerformed()  --方法   --按下之動作 
//--------------------------------------------------------------//
//MyClient主類別檔
//--------------------------------------------------------------//
public class MyClient extends JFrame implements ActionListener{  
 //宣告區
 //設定名子及ip
 String    name,ip="";       
 BufferedReader  reader;           
 PrintStream  writer;
    //建立Socket變數 
 Socket    sock;
 //顯示區域
 JTextArea   incoming = new JTextArea(15,50); 
 //輸入區域
 JTextField   outgoing = new JTextField(20);     
 JLabel    jlmane   = new JLabel("你的名字:");   
 JLabel    jlip  = new JLabel("輸入ip:");   
 JTextField   jfmane   = new JTextField("無名",10);
 JTextField   jfip   = new JTextField("127.0.0.1",10);
 JLabel    state  = new JLabel("請輸入你的名字及你的名字"); 
 
 MenuBar mBar = new MenuBar();      
 //File
 Menu mFile = new Menu("檔案");
    //Save 
 MenuItem mFileSave=new MenuItem("儲存檔案");     
 //--------------------------------------------------------------//
 //-1-主程式進入點
 //--------------------------------------------------------------//
 public static void main(String[] args){
  MyClient client = new MyClient();       //
 }
 //--------------------------------------------------------------//
 //-2-設定及宣告視窗物件
 //--------------------------------------------------------------//
 MyClient (){ 
        //設定及宣告視窗物件 
  //建立視窗JFrame
  super("多入連線Client端");          
  //用來放mane及ip--設定區域
  JPanel maneipPanel  = new JPanel();   
  //建來設定按鍵 
  JButton setmaneip = new JButton("連線設定");
  //按下設定
  setmaneip.addActionListener(this);
  //加入到JPanel
  maneipPanel.add(jlmane);
  //名字
  maneipPanel.add(jfmane);         
  maneipPanel.add(jlip);
  //位子
  maneipPanel.add(jfip); 
  //設定
  maneipPanel.add(setmaneip); 
        //排版BorderLayout設定區域在上方----  
  getContentPane().add(BorderLayout.NORTH,maneipPanel);  
  //JButton("送出")
  JButton sendButton = new JButton("送出");
  //按下
  sendButton.addActionListener(this);       
  //對話區域-----
  //設置為 true,則當行的長度大於所分派的寬度時,將換行
  incoming.setLineWrap(true);         
  //設置為 true,則當行的長度大於所分派的寬度時,將在單詞邊界(空白)處換行
  incoming.setWrapStyleWord(true); 
  //不可編輯的  
  incoming.setEditable(false); 
  //JScrollPane  
  JScrollPane qScroller = new JScrollPane(incoming);
  //垂直滾動  
  qScroller.setVerticalScrollBarPolicy(
    ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); 
  //水平滾動
  qScroller.setHorizontalScrollBarPolicy(
    ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
  JPanel mainPanel = new JPanel();       
  mainPanel.add(qScroller);
  mainPanel.add(outgoing);
  mainPanel.add(sendButton);
  //對話區域在中間------
  getContentPane().add(BorderLayout.CENTER,mainPanel);  
  
  //Menu事件
  mFileSave.addActionListener(this); 
  //加入MenuItem  
  mFile.add(mFileSave);  
  //加入Menu
  mBar.add(mFile);
  //MenuBar
  setMenuBar(mBar);
  //狀態區域在下方----
  getContentPane().add(BorderLayout.SOUTH,state);    
  setSize(600,450);
  setVisible(true);
  //離開 
  addWindowListener(new WindowAdapter()      
  {
   public void windowClosing(WindowEvent e){
    System.out.println("離開聊天室");
    System.exit(0);
   }
  });
 }
 
 //--------------------------------------------------------------//
 //-3-建立連線
 //--------------------------------------------------------------//
 private void EstablishConnection(){
  try{
   //請求建立連線
   sock = new Socket(ip,8888);      
   //建立I/O資料流
   InputStreamReader streamReader =  
     //取得Socket的輸入資料流
      new InputStreamReader(sock.getInputStream());  
   //放入暫存區
   reader = new BufferedReader(streamReader);    
   //取得Socket的輸出資料流
   
   writer = new PrintStream(sock.getOutputStream());
   //連線成功
   state.setText("網路建立-連線成功"); 
   System.out.println("網路建立-連線成功");    
   
  }catch(IOException ex ){
   System.out.println("建立連線失敗");
  }
 }
 //--------------------------------------------------------------//
 //-4-接收資料
 //--------------------------------------------------------------//
 public class IncomingReader implements Runnable{
  public void run(){
   String message;
   try{
    while ((message = reader.readLine()) != null){
    incoming.append(message+'\n');
    }
   }catch(Exception ex ){ex.printStackTrace();}
  }
 } 
 //--------------------------------------------------------------//
 //-5-按下之動作
 //--------------------------------------------------------------//
 public void actionPerformed(ActionEvent e){
  String str=e.getActionCommand();   
  //按下設定
  if(str.equals("連線設定")){
   //設定名字
   name = jfmane.getText();
   //設定ip,此程式目前無作用
   ip  = jfip.getText(); 
   //狀態
   state.setText("設定"+name+":"+ip); 
   //建立連線----
   EstablishConnection();          
   //建立接收資料執行緒----
   Thread readerThread = new Thread(new IncomingReader());  
   readerThread.start();
  //按下送出   
  }else if(str.equals("送出")){    
   //不可沒有ip及送出空白
   if((ip!=null)&&(outgoing.getText()!=""))    
   {
    try{//送出資料
        writer.println((name+":"+outgoing.getText())); 
     //刷新該串流的緩衝。
     writer.flush();         
    }catch(Exception ex ){
     System.out.println("送出資料失敗");
    }
    //清完輸入欄位
    outgoing.setText("");        
   }
  }else if (str.equals("儲存檔案"))       
  {               
   try{             
    FileWriter f=          
      new FileWriter("log.txt");     
    f.write(incoming.getText());      
    f.close();           
    state.setText("儲存檔案成功");
   }catch (IOException e2){
    state.setText("儲存檔案失敗");
   }              
  } 
 }
}

















其它文章

標籤

Oracle (150) Oracle DB (144) Oracle_DB (143) Oracle SQL (135) JAVA (84) css-基本類 (65) MySQL (59) CSS Selector (58) jQuery (49) JavaScript-基本類 (39) Spring Boot (38) JavaScript (37) JavaScript HTML DOM (37) JavaScript-HTML_DOM (36) CSS3 (30) JAVA-基本類 (28) jQuery UI (27) Apache (23) Oracle GROUP BY (20) datepicker (20) Android (18) Oracle Date (17) c (17) JAVA-lang套件 (16) Linux (16) Oracle Sub Query (16) Spring-基本類 (16) jQuery-基本類 (16) MySQL-進階系列教學 (15) Android基本類 (14) Grails (14) Oracle join (14) SQLite (13) Spring (13) WIN7-基本類 (13) grails-基本類 (13) linux cent os (13) CKEditor (12) JAVA-流程控制類 (12) JAVA_Spring (12) PHP (11) Spring MVC (11) MySQL-基本系列教學 (10) Notepad (10) Notepad++ (10) SQLite for java (10) Windows (10) c/c++ (10) eclipse (9) jQuery-Selector (9) sqldeveloper (9) DB_Toad (8) JAVA_IDE_Eclipse (8) JavaScript-String類 (8) MySQL DB Toad (8) MySQL-DATE相關 (8) MySQL-函式相關 (8) Spring Bean (8) Android Studio (7) HTML5 (7) Hibernate (7) JAVA-OCWCD (7) JavaScript-陣列類 (7) Docker (6) JAVA-程式分享 (6) JAVA.util套件 (6) JavaScript-數學類 (6) MinGw (6) MySQL-其它類 (6) Servlet (6) centos (6) Apache_Tomcat (5) Apache套件_POI (5) CSS (5) JavaScript-Date物件 (5) JavaScript-其它類 (5) PostgreSQL (5) httpd (5) log4j (5) 基本資訊 (5) 開發工具 (5) CSS Properties (4) Dev-C++ (4) IntelliJ IDEA (4) Oracle DDL (4) Sublime (4) TortoiseSVN (4) apache_Maven (4) Android NDK (3) Eclipse IDE for C/C++ (3) Hibernate-基本類 (3) JAVA-問題 (3) JAVA-綀習分享 (3) JVM (3) Linux 指令 (3) Proxy Server (3) Spring Mobile (3) Spring web (3) Squid (3) VirtualBox (3) maven (3) zk (3) 生活其它 (3) Bootstrap (2) Filter (2) JAVA_IO (2) JAVA_其它_itext套件 (2) JBoss-問題 (2) JSP (2) Jboss (2) Listener (2) MySQL-語法快速查詢 (2) Spring AOP (2) Spring Batch (2) Spring Boot Actuator (2) Spring i18n (2) Subversive (2) Tomcat 8 (2) UML (2) WebJars (2) WinMerge (2) c++ (2) c語言綀習題 (2) jQuery Mobile (2) jQuery-事件處理 (2) jQuery-套件類 (2) putty (2) svn (2) weblogic (2) Apache_JMeter (1) Apache套件_BeanUtils (1) Apache套件_StringUtils (1) Base64 (1) Google API (1) HTML5-基本類 (1) Heap (1) JAVA 7 (1) JAVA SE 、JAVA EE、JAVA ME (1) JAVA 日期 (1) JAVA-OCJP (1) JAVA-WEB (1) JAVA_IDE (1) JAVA其它 (1) JBoss Server (1) JDK (1) JMX (1) JRE (1) Java RMI (1) Java String (1) Joda Time (1) Linux_其它 (1) MySQL教學 (1) Oracle_VirtualBox (1) SQL Server (1) SWT (1) Session (1) Stack (1) Struts 2 (1) Tool (1) ZK Studio (1) csv (1) grails-其它類 (1) jQuery-進階 (1) java mail (1) java web (1) java8 (1) jsoup (1) mockmvc (1) modules (1) tomcat (1) win10 (1) 其它類 (1) 圖片工具 (1) 模擬器 (1) 讀書分享 (1) 開發資訊 (1)

精選文章

初學 Java 的 HelloWorld 程式

撰寫一個JAVA程式 public class HelloWorld{ public static void main(String[ ] args){ System.out.println("我第一支Java程式!!"); } } ...