Google! Android 3(gasolin著)中的一些筆記
android:orientation 版面走向
fill_parent 填滿整個上層元件
wrap_content 包住內容, 隨文字欄位行數的不同而改變介面元件的高度
<EditText android:id="@+id/height" />
@ 提示XML解析器應該把後面的字串解析成識別符號
+ 代表新建一個識別符號
id/ 識別符號會被歸類在id類別下
string.xml
<string name="識別符號">文字敘述</string>
<string name="bmi_height">身高(cm)</string>
main.xml
<TextView android:text ="@string/bmi_height" />
重構模式:
好處為方便修改程式與整理,
findViews();
setListensers();
在android上設計對話框:
private void openOptionDialog(){
AlertDialog.Builder dialog = new AlertDialog.Builder(Main.this);
dialog.setTitle("");
dialog.setMessage("");
dialog.show();
解決產生實體時所造成的記憶體消耗, 使用匿名方法, 並加入確認按鍵
private void openOptionDialog(){
new AlertDialog.Builder(Main.this)
.setTitle(R.string.about_title)
.setMessage(R.string.about_msg)
.setPositiveButton("確認", new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialoginterface, int i){
}
})
.show();
}
使用Toast函式對話框:
private void openOptionDialog(){
/*Toast popup = Toast.makeText(Main.this, "BMI 計算器", Toast.LENGTH_SHORT);
popup.show();*/
//匿名呼叫
Toast.makeText(Main.this, "BMI 計算器", Toast.LENGTH_SHORT).show();
}
2012年1月29日 星期日
2012年1月27日 星期五
C指標
指標 int *ptr; 陣列 int array[10];
陣列指定給指標:
ptr = array; 或者是 ptr = &array[0];
寫array跟&array[0]是相同的
===> a[i]就可寫為 *(a + i)
若指標ptr為指向陣列的第一個元素array[0]
則 *(ptr + 1)表示指向array[1], 第二個元素 ===> *(ptr+i) 指向 array[i]
char *array[] 指標陣列 ===> *array[i]指向文字列的第一個字元
char (*array)[] 指標指向陣列
int *f(); f為函數, 傳回值為指向整數的指標 ---------- 函式返回指標
int (*f)(); f是個指標, 指向一個會傳回整數的函數 --------- 函式指標
const char i=5; 不可改值寫法
typedef int (*fp)(char a);
fp = fun; //fun為一個指向函數的函數指標(參數為char值, 返回值為int)
int x = fun('x');
char (*(*x( )) [] )( ):函數, 傳回一指標,該指標指向指標陣列, 陣列中各元素指向一個會傳回char值的函數
char (*(*x[3]) ( )) [5]: 指標陣列, 有3個元素, 各指向一個會傳回另一指標的函數, 該指標是指向含有5個元素的字元陣列
記憶體配置:
配置一個浮點數指標
float *fp;
fp = (float *)malloc(sizeof(float));
free(fp);
------------------------------------------------------------------------------------
struct grade
{
int math;
int english;
int computer;
};
struct grade *student;
student = (struct grade *) malloc(num * sizeof(struct grade));
------------------------------------------------------------------------------------
鏈結串列:
struct list
{
int num;
char name[10];
char address[50];
struct list *next;
};
typedef struct list node;
typedef node *link;
ptr = ( link ) malloc(sizeof(node));
ptr->next = NULL;
------------------------------------------------------------------------------------
陣列指定給指標:
ptr = array; 或者是 ptr = &array[0];
寫array跟&array[0]是相同的
===> a[i]就可寫為 *(a + i)
若指標ptr為指向陣列的第一個元素array[0]
則 *(ptr + 1)表示指向array[1], 第二個元素 ===> *(ptr+i) 指向 array[i]
char *array[] 指標陣列 ===> *array[i]指向文字列的第一個字元
char (*array)[] 指標指向陣列
int *f(); f為函數, 傳回值為指向整數的指標 ---------- 函式返回指標
int (*f)(); f是個指標, 指向一個會傳回整數的函數 --------- 函式指標
const char i=5; 不可改值寫法
int* const: 指向const的指標 可以改值, 不可以改位址
const
int* const:指向const的const指標
typedef int (*fp)(char a);
fp = fun; //fun為一個指向函數的函數指標(參數為char值, 返回值為int)
int x = fun('x');
char (*(*x( )) [] )( ):函數, 傳回一指標,該指標指向指標陣列, 陣列中各元素指向一個會傳回char值的函數
char (*(*x[3]) ( )) [5]: 指標陣列, 有3個元素, 各指向一個會傳回另一指標的函數, 該指標是指向含有5個元素的字元陣列
錯誤: int
*ptr;
*ptr = 35;
正確: int
*ptr, number = 10;
ptr = &number;
ptri 位址為 0012ff84
ptri +1 位址改為 0012ff88
取得鄰近位址內的值
*(ptr+1)
記憶體配置:
配置一個浮點數指標
float *fp;
fp = (float *)malloc(sizeof(float));
free(fp);
int *num;
num =
(int *)malloc(sizeof(int) * 10)
free(num)
int
array[10][20]
int
**array= (int **)malloc(sizeof(int*)*10);
for(i=0;i<10;i++)
*(array+i) = (int *)malloc(sizeof(int) * 20);
------------------------------------------------------------------------------------
struct grade
{
int math;
int english;
int computer;
};
struct grade *student;
student = (struct grade *) malloc(num * sizeof(struct grade));
------------------------------------------------------------------------------------
鏈結串列:
struct list
{
int num;
char name[10];
char address[50];
struct list *next;
};
typedef struct list node;
typedef node *link;
ptr = ( link ) malloc(sizeof(node));
ptr->next = NULL;
------------------------------------------------------------------------------------
2011年12月30日 星期五
16章 多執行緒
16章 多執行緒
start()
進入待命狀態 可執行狀態
run()
執行狀態
wait()
進入等待狀態
notify()
讓某個等待中的執行緒回到待命狀態
notifyAll()
讓該物件的所有等待的執行緒 回到待命狀態
interrupt()
設定該執行緒的中斷旗標 拋出例外
sleep()單位毫秒
使執行緒進入休眠狀態 休眠時間到後回到待命狀態
join()
結合兩個執行緒
設置優先權:
Thread.MIN_PRIORITY 1
Thread.MAX_PRIORITY 10
Thread.NORM_PRIORITY 5
setPriority()
getPriority()
yield() 讓其他執行緒有執行的機會
Thread.currentThread().getName() 取得目前執行執行緒的名稱
參考: http://programming.im.ncnu.edu.tw/J_index.html
繼承Thread寫法
實現Runnable介面寫法
start()
進入待命狀態 可執行狀態
run()
執行狀態
wait()
進入等待狀態
notify()
讓某個等待中的執行緒回到待命狀態
notifyAll()
讓該物件的所有等待的執行緒 回到待命狀態
interrupt()
設定該執行緒的中斷旗標 拋出例外
sleep()單位毫秒
使執行緒進入休眠狀態 休眠時間到後回到待命狀態
join()
結合兩個執行緒
設置優先權:
Thread.MIN_PRIORITY 1
Thread.MAX_PRIORITY 10
Thread.NORM_PRIORITY 5
setPriority()
getPriority()
yield() 讓其他執行緒有執行的機會
Thread.currentThread().getName() 取得目前執行執行緒的名稱
參考: http://programming.im.ncnu.edu.tw/J_index.html
繼承Thread寫法
public class ThreadExample1 extends Thread { public void run() { // override Thread's run() System.out.println("Here is the starting point of Thread."); for (;;) { // infinite loop to print message System.out.println("User Created Thread"); } } public static void main(String[] argv) { Thread t = new ThreadExample1(); // 產生Thread物件 t.start(); // 開始執行t.run() for (;;) { System.out.println("Main Thread"); } } }
實現Runnable介面寫法
public class ThreadExample2 implements Runnable { public void run() { // implements Runnable run() System.out.println("Here is the starting point of Thread."); for (;;) { // infinite loop to print message System.out.println("User Created Thread"); } } public static void main(String[] argv) { Thread t = new Thread(new ThreadExample2()); // 產生Thread物件 t.start(); // 開始執行Runnable.run(); for (;;) { System.out.println("Main Thread"); } } }
15章 例外處理
15章 例外處理
Exception extends Throwable
Throwable extends Object
Integer.parseInt方法: 將字串轉成int數值
public void fun() throws Exception{
try{
}
catch(Exception e){
throw e;
}
finally{
}
}
toString()以簡單的字串描述該例外
getMessage()列出細節訊息
printStackTrace()將堆疊資訊印在螢幕上,可幫助設計者快速找到錯誤點
Exception extends Throwable
Throwable extends Object
Integer.parseInt方法: 將字串轉成int數值
public void fun() throws Exception{
try{
}
catch(Exception e){
throw e;
}
finally{
}
}
toString()以簡單的字串描述該例外
getMessage()列出細節訊息
printStackTrace()將堆疊資訊印在螢幕上,可幫助設計者快速找到錯誤點
2011年12月26日 星期一
JAVA 基礎物件導向
JAVA 環境變數:
變數初值:
class內的資料成員具有預設值,但在區域變數的變數就沒有預設值,需要定義初值後編譯才會通過
JAVA_HOME=F:\jdk1.6.0_01
path=%JAVA_HOME%\bin;%path%
%path%:動態獲取path環境變數的值。
%JAVA_HOME%:動態獲取名稱為JAVA_HOME環境變數的值。
基本型別:
char
|
2
|
0 ~ 255
|
byte
|
8
|
-128 ~ 127
|
short
|
16
|
-32768 ~ 32767
|
int
|
32
|
-2147483648 ~ 2147483647
|
float
|
32
|
-3.4E38(-3.4*10^38)
~ 3.4E38(-3.4*10^38)
|
double
|
64
|
-1.7E308(-1.7*10^308)
~ 1.7E308(-3.4*10^308)
|
long
|
64
|
-9223372036854775808 ~
9223372036854775807
|
變數初值:
class內的資料成員具有預設值,但在區域變數的變數就沒有預設值,需要定義初值後編譯才會通過
建構子可以接受引數,但是不能傳回值。建構子和方法之間最重要的不同處,就是建構子不能指定傳回值的型別(連void都不行)。
static成員只有一個副本可供類別所有物件共同使用,static就是類別所擁有而不是物件。宣告為static的方法不可以存取non-static類別成員,並且沒有this參照
Final指定不可更改變數(意指常數)
Private final int INCREMENT
= 5;
super.fun() 表示明顯地使用呼叫父類別建構子語法
“is-a”用來表示繼承,一個子類別的物件也就是其父類別物件
父類別:
A, 子類別:B
A a = new A();
B b = new B();
A a1 = b;
子類別物件的參照b指定給父類別型別變數a1
含有指向子類別物件參照的父類別型別變數會叫用子類別的方法
抽象類別:
抽象類別就是作為繼承階層中的父類別,抽象方法的類別必須宣告為抽象類別,而繼承自抽象父類別的每個子類別,必須提供父類別抽象方法的實作部分。
抽象類別不可實體化一個物件
Instanceof: 來判定每個物件的型別是否相容於此型別
向下轉型必須是該物件與要轉型的物件存在有is-a的關係
介面:
若要使用介面時,類別必須指明會實作出這個介面,且必須重新宣告介面的每個方法,如果類別未實作介面的任何方法時,則該類別就是抽象類別,且必須宣告為abstract。介面中所有的方法必須是public以及abstract。使用介面的好處在於類別可以實作多個介面而不是一個。
內部類別物件可以存取外部類別物件的所有變數和方法。
匿名內部類別是指不具名稱的內部類別,且宣告於程式中該內部類別物件建立的地方。
訂閱:
文章 (Atom)