Ⅰ 如何用手機進行編程
這里介紹3種可以在手機上編程的app,分別是c語言編譯器(c語言)、AIDE集成開發環境(java)、QPython3(python),都不需要root,可以直接編寫程序並運行,下面我簡單介紹一下這3個app的安裝和簡單使用,主要內容如下:
1.下載安裝,這里以我的vivo手機為例,直接打開「應用商店」,搜索「C語言編譯器」,如下,直接點擊下載安裝:
測試代碼如下,這里編寫了2個函數,分別是2數之和和2數只差,很簡單:
程序運行截圖如下,需要先輸入2個數,才能正常運行:
1.下載安裝,這直接在應用商店裡搜素「AIDE」就行,直接下載安裝,如下:
這里測試一下,主要代碼如下,官方自帶的例子:
程序運行截圖如下:
1.下載安裝,這里直接在應用商店裡搜索「QPython3」就行,直接下載安裝,如下:
主界面如下,主要分為「終端」、「編輯器」、「程序」、「QPYPI」、「課程」、「社區」這6個模塊,終端類似IDLE,編輯器類似記事本,QPYPI是第三方包和工具,程序存儲官方自帶的示例,課程是一些教學案例:
這里測試一下官方自帶的例子—speaky.py,在「程序」這個模塊下,代碼如下:
點擊運行按鈕,程序運行截圖如下:
至此,這3個app都介紹完畢。總的來說,使用起來都不錯,各有各的功能,當然,還有許多其他的app也可以在手機上進行編程,像c4droid(c/c++),termux(高級終端,類似linux)等,這里我就不詳細介紹了,感興趣的可以在網上搜索一下,有相關教程和示例可供參考,希望以上分享的內容能對你有所幫助吧。
很高興能回答你的問題
我就自己使用過的一些手機編程軟體來進行說明。之前學習網頁開發,為了讓自己隨時隨地使用編程,攜帶方便。
第一種 html-css-js
這款軟體,看著名字就知道是和html相關的網頁開發,它是由踏宇 科技 開發的一款手機開發網頁的APP。不僅有編程、編譯功能,還可以進行網頁開發學習,內附很多關於網頁設計(css,js)。真正做到編寫,學習兩不誤。
這是代碼編寫界面:
這是學習界面:
但哎,我現在基本不使用它來編程了,當你使用到手機鍵盤里的,你就知道為啥了。
第二種,C++pro
這一款手持編程APP軟體,是我比較喜歡的一款,功能很強大,不僅可以編寫C語言、C++、C#而且還可以編寫PHP、Nodejs、go等。可以說,你擁有了這一款APP,就相當於同時擁有了多個編程APP軟體啦。
這是打開後的主界面。不難發現有很多種語言的編寫模塊。更加強大的是,它還可以在編寫代碼後做一個選擇,選擇要運行的語言工具。
當然如果大量代碼運行的話,可能會比較遲緩。
兩款手機編程APP分享給大家!
這里介紹3種可以在手機上編程的app,分別是c語言編譯器(c語言)、AIDE集成開發環境(java)、QPython3(python),都不需要root,可以直接編寫程序並運行,下面我簡單介紹一下這3個app的安裝和簡單使用,主要內容如下:
1.下載安裝,這里以我的vivo手機為例,直接打開「應用商店」,搜索「C語言編譯器」,如下,直接點擊下載安裝:
測試代碼如下,這里編寫了2個函數,分別是2數之和和2數只差,很簡單:
程序運行截圖如下,需要先輸入2個數,才能正常運行:
1.下載安裝,這直接在應用商店裡搜素「AIDE」就行,直接下載安裝,如下:
這里測試一下,主要代碼如下,官方自帶的例子:
程序運行截圖如下:
1.下載安裝,這里直接在應用商店裡搜索「QPython3」就行,直接下載安裝,如下:
主界面如下,主要分為「終端」、「編輯器」、「程序」、「QPYPI」、「課程」、「社區」這6個模塊,終端類似IDLE,編輯器類似記事本,QPYPI是第三方包和工具,程序存儲官方自帶的示例,課程是一些教學案例:
這里測試一下官方自帶的例子—speaky.py,在「程序」這個模塊下,代碼如下:
點擊運行按鈕,程序運行截圖如下:
至此,這3個app都介紹完畢。總的來說,使用起來都不錯,各有各的功能,當然,還有許多其他的app也可以在手機上進行編程,像c4droid(c/c++),termux(高級終端,類似linux)等,這里我就不詳細介紹了,感興趣的可以在網上搜索一下,有相關教程和示例可供參考,希望以上分享的內容能對你有所幫助吧。
用手機進行編程,也是腦洞大開了啊,不過話說回來,手機上到底能不能進行編程呢?當然是可以的,現在手機的性能可以說不亞於電腦的,那麼我下面給大家分享幾個用手機編程的辦法。
1.c語言編譯器
這個軟體可以說是學習c語言的實用工具了,給大家介紹一下它的特點,就是小,沒錯內存只有10M左右,而且軟體干凈啊,使用起來沒有什麼廣告,用起來效率也是非常高的。
2.JAVA編輯器
如果你喜歡使用JAVA這個語言的話,這款軟體留非常的適合你,專門做JAVA代碼開發,你可以用它做一些小 游戲 ,功能非常的強大,而且使用的功能又很簡單。
可以在線編輯demo 跑基本環境 但是涉及到功能模塊開發 還是需要電腦的,
手機只能簡單編輯腳本 以及 代碼的部分存儲
坐公交坐地鐵或排隊等待的時候閑著沒事可以在手機上編程學習,但是總得來說手機上編程不怎麼舒適。
第一款: pythonista3 phython編程app,特點:編寫方便,交互感強,API強大
a.編輯器包含: 1. 語法高亮 2.自動補全符號 3.個性化python鍵盤 等功能
b.清晰的標簽,讓你在各個文件間輕松切換!
c.完美的提示窗口,手機上編寫命令行也能從容自如
d.方便的2d引擎庫,快速寫出一個小 游戲 吧
第二款: mimo 學習編程app,特點:適合學習,操作簡單,界面萌化
a.趣聞教學: 可以選擇一門語言進行學習,內容非常易懂,操作也簡單,mimo支持23種編程語言的教程,值得玩一玩。
b.編輯也很方便
第三款:my phython quiz 幫你復習python的app。 特點:碎片化學習
沒事在路上多刷刷題吧,有助於增強熟練度。
第四款: Udacity 目前最全,最優質的編程課程app。 特點:老師優質,矽谷資源,最新 科技
屏幕太小了,小心點眼睛。
網路搜索以下軟體,或者編程器
NO.1 c4droid
一款手機上的c語言編譯器。
個人認為手機上最好用的,沒有之一!c4droid是款Android設備上的C/C++程序編譯器。
NO.2 AIDE
功能強大,內置學習教程。
AIDE是一個Android Java集成開發環境,可以讓你在Android系統內進行Android軟體和 游戲 的開發。
NO.3 我的應用iapp
專為手機研發,代碼編寫簡單,學習容易。
iapp還很年輕,特別需要大家的支持!
NO.4 cppdroid
和c4droid一樣,是一款手機上的c語言編譯器。
安卓上的C/C++編譯環境,可以幫助你在手機上編寫c/c++程序 ,和c4droid各有優點,cppdroid最大的優點就是可以即時報錯,寫一個字元就檢查一遍,保證程序的正確性,而且編譯速度快,雖然還有部分地方趕不上c4droid,但是和c4droid搭配還是不錯的。
網路可以查查
Ⅱ 手機上怎麼製作編程
手機上要想編程的話,只能編寫編程的代碼,因為代碼編程完之後,需要放到電腦中才能正常的完成編程的程序設置更改。
Ⅲ 如何在Android上編寫高效的Java代碼
Java平台一般有三個版本:Java ME(微型版,用於某些手機)、Java SE(標准版,用於台式電腦)、Java EE(企業版,用於伺服器端應用)。在談到Java時,我們通常是指Java SE,因為只有這個版本包含虛擬機和編譯器。
首先,Java代碼會被編譯成稱為位元組碼的中間格式。當位元組碼在目標電腦上運行時,虛擬機會快速將它解析成目標電腦硬體和操作系統所需要的本機格式。
除了為開發者提供「一次編寫,到處運行」的優勢,Java還能通過垃圾回收器(GC)實現自動內存管理,開發者可免去手動在代碼中釋放無用對象的內存。雖然這個功能非常有用,且大大降低了在代碼中引入內存問題的風險,但是它會增加運行時的開銷,因為需要不停地執行垃圾回收進程。
本文開頭將比較Java SE和用於Android開發的Java之間的差異。首先我會介紹開發者習慣的Java
SE語言結構以及它們是如何在Android上運行的。其次,我會介紹如何優化Android中的Java代碼,如何優化內存分配,以及如何恰當地處理多線程。
比較Android上的Dalvik Java和Java SE
雖然遠在Android出現之前,開發者就能用Java編程語言為移動設備編寫應用程序,但它只是Java中功能極為有限的一個版本,稱為Java
ME(微型版)。不同的移動設備還需編寫不同的代碼,因此,寫一個應用程序就能在支持Java
ME的任何手機上運行是幾乎不可能的。此外,由於當時不存在很好的在線商店,應用發布過程極其復雜。
Android的問世為開發者提供了構建智能手機強大應用的機會,開發者只需用Java編程語言以及他們熟知的標准Java
API編寫代碼。然而,盡管Android開發者仍使用Java SE編譯器來編譯應用程序,你會發現,James
Gosling開發的Java和Android設備上的Java存在許多不同之處。
在Android設備上運行的VM(虛擬機)稱為Dalvik。它最初由谷歌的Dan
Bornstein開發,適用於CPU和內存受限的移動設備。Java SE和Dalvik Java存在一些差異,主要體現在虛擬機上。Java
SE使用了棧機設計,而Dalvik被設計成了基於寄存器的機器。Android SDK中有一個dx工具,它會把Java
SE棧機器的位元組碼轉換成基於寄存器的Dalvik機器位元組碼,該轉換步驟由IDE自動完成。
基於棧的虛擬機和基於寄存器的虛擬機的定義以及差異將不列入我們的討論范圍。由於歷史原因,Android使用基於寄存器的虛擬機。雖然基於寄存器的虛擬機最多可以比基於棧的虛擬機快32%,但這只限於執行時解釋位元組碼的虛擬機(也就是說,解釋型虛擬機)。在Android
2.2版本(也稱為Froyo)之前,Dalvik虛擬機都是純解釋型的。Froyo版本引入了JIT編譯器(即時編譯),這是Java
SE很早就有的一個優勢。
JIT編譯,也稱為動態翻譯。它在執行前把位元組碼翻譯成本機代碼(如圖1所示),這樣主要有兩個好處。首先,它消除了那些純解釋型虛擬機的開銷;其次,它能對本機代碼執行優化,這通常是靜態編譯代碼無法做到的。例如,JIT編譯器可以在它運行的CPU上選擇最合適的優化,也可以根據應用程序的輸入來分析代碼是如何運行的,以便進行下一步的優化。
圖1Android Java和Java SE翻譯步驟
雖然Android的Dalvik JIT編譯器有很大的發展前景,但要達到如Java SE的JIT編譯器般穩定、成熟度尚需很長一段時間。不過,Dalvik JIT的出現為Android提供了巨大的性能優勢,而且它也在不斷得以改善。
JAVA
SE虛擬機和Dalvik虛擬機的另一個區別是,後者進行了優化,可運行在同一個機器上的多個實例中。它在開機時會啟動一個叫做zygote的進程,該進程會創建第一個Dalvik實例,由這個實例創建所有其他的實例。當應用程序啟動時,zygote進程會收到一個創建新虛擬機實例的請求,並給該應用程序創建一個新進程(如圖2所示)。如果開發者已習慣於Java
SE開發,這樣的設計可能看起來不切實際,但它有一個很大的優勢,可以避免由一個應用程序運行失敗導致Dalvik虛擬機崩潰,繼而引發多應用程序崩潰。
圖2在Android中啟動新Dalvik虛擬機實例
Android和Java
SE除了運行的虛擬機不同之外,它們實現API的方式也不一樣。Android中屬於java和javax包中的API都來自Apache
Harmony(這是一個開源項目,旨在重新實現Java SE軟體棧,該項目從2011年11月不再維護)。在開發方面,這些API和Java
SE包中的類似,但也存在一些差別。例如,谷歌對HttpUrlConnection類進行了Java SE版本中所沒有的重大升級。
此外,Android平台移除了Java
SE中無關的API。例如,Swing/AWT包被完全移除,因為Android使用不同的UI框架。其他被移除的API還有RMI、CORBA、ImageIO和JMX。它們或者被替換為特定的Android版本(在android包空間內),或者因為一些實際原因根本不存在。
優化Android上的Java代碼
經過多年的改進,Java
SE具備了一些簡化編寫復雜代碼結構的新特性。其中的一些特性會讓整個流程變得更簡單,但開發者需要了解何時以及如何正確地使用它們。另外,由於Java
SE大多用於伺服器端開發(使用Java企業版的API),因而開發人員專門對伺服器端Java代碼進行了優化。註解和Java虛擬機對腳本語言的支持就是對伺服器端開發進行優化的例證。雖然這些工具在構建後端開發時很強大,但在開發Android客戶端代碼時,這些特性的作用很小,甚至起反作用。Java開發者已經習慣於無限量的RAM和CPU,而Android開發需要密切關注性能和內存分配。簡單地說,開發者需要使用稍微不同的方法對待Android和後端的開發。
然而,隨著Android的首次發布,情況有所改變。曾經一些在Android上盡量不用的Java規范重新被推薦,這主要因為Android目前的JIT編譯器解決了這些規范導致的性能問題。
本文將討論編寫Android應用程序需要了解的Java代碼。我們不會深究Java編程語言的細節,而是重點關注對Android開發重要的東西。不過,開發者仍需了解,大多數適用於Java SE的規則和建議同樣適用於Android和Dalvik虛擬機。
Android上的類型安全枚舉
Java SE 5.0新增了許多方便開發者的新特性。其中最值得期待的是引入了類型安全枚舉。枚舉在代碼中用來表示屬於某一組的幾個選擇。在早期版本的Java中,可以用多個整型常量解決這個問題。雖然這在技術上可行,但是很容易出錯。請看下面的代碼:
public class Machine {
public static final int STOPPED = 10;
public static final int INITIALIZING = 20;
public static final int STARTING = 30;
public static final int RUNNING = 40;
public static final int STOPPING = 50;
public static final int CRASHED = 60;
private int mState;
public Machine() {
mState = STOPPED;
}
public int getState() {
return mState;
}
public void setState(int state) {
mState = state;
}
}
問題是,雖然這些常量是期望的,但是沒有機制保證setState()方法接收不同的值。如果要在設置方法中添加檢查,那麼一旦得到的是非預期值,開發者就需要處理錯誤。開發者所需要的是在編譯時檢查非法賦值。類型安全的枚舉解決了這個問題,如下所示:
public class Machine {
public enum State {
STOPPED, INITIALIZING, STARTING, RUNNING, STOPPING, CRASHED
}
private State mState;
public Machine() {
mState = State.STOPPED;
}
public State getState() {
return mState;
}
public void setState(State state) {
mState = state;
}
}
注意在聲明不同類型安全值的地方新加的內部枚舉類。這在編譯時就會解決非法賦值的問題,所以代碼更不容易出錯。
如果Dalvik虛擬機還沒有JIT編譯器優化代碼,不建議在Android平台上使用枚舉類型,因為和使用整型常量相比,這種設計帶來的內存和性能損失更大。這就是為什麼在一些老版本的Android
API中還存在如此多的整型常量的原因。如今有了更強的JIT編譯器以及一個不斷改進的Dalvik虛擬機,開發者不必再擔心這個問題,放心大膽地使用類型安全枚舉即可。
然而,仍然存在一些情況使用整型常量是更好的選擇。像int這樣的Java基本類型,不會增加GC的開銷。此外,Android SDK中許多已有的API仍然依賴基本類型,比如Handler類——在這種情況下,你沒有太多的選擇。
Android中增強版的for循環
Java SE 5.0還引入了增強版的for循環,提供了一個通用的縮寫表達式來遍歷集合和數組。首先,比較以下五種方法:
void loopOne(String[] names) {
int size = names.length;
for (int i = 0; i < size; i++) {
printName(names[i]);
}
}
void loopTwo(String[] names) {
for (String name : names) {
printName(name);
}
}
void loopThree(Collection<String> names) {
for (String name : names) {
printName(name);
}
}
void loopFour(Collection<String> names) {
Iterator<String> iterator = names.iterator();
while (iterator.hasNext()) {
printName(iterator.next());
}
}
// 不要在ArrayList上使用增強版的for循環
void loopFive(ArrayList<String> names) {
int size = names.size();
for (int i = 0; i < size; i++) {
printName(names.get(i));
}
}
上面顯示了四種不同遍歷集合和數組的方式。前面兩種有著相同的性能,所以如果只是讀取元素的話,可以放心地對數組使用增強版for循環。對Collection對象來說,增強版for循環和使用迭代器遍歷元素有著相同的性能。ArrayList對象應避免使用增強版for循環。
如果不僅需要遍歷元素,而且需要元素的位置,就一定要使用數組或者ArrayList,因為所有其他Collection類在這些情況下會更慢。
一般情況下,如果在讀取元素幾乎不變的數據集時對性能要求很高,建議使用常規數組。然而,數組的大小固定,添加數據會影響性能,所以編寫代碼時要考慮所有因素。
隊列、同步和鎖
通常情況下,應用程序會在一個線程中生產數據,在另一個線程中使用它們。常見的例子是在一個線程中獲取網路上的數據,在另一個線程(操作UI的主線程)中把這些數據展現給用戶。這種模式稱為生產者/消費者模式,在面向對象編程課程中,開發者用演算法來實現該模式可能要花上幾個小時。下面會介紹一些簡化生產者/消費者模式實現的現成類。
1. 更智能的隊列
雖然已有現成的類並能用更少的代碼實現該功能,但許多Java開發者仍然選擇使用LinkedList以及同步塊實現隊列功能。開發者可在java.util.concurrent包中找到同步相關的類。此外,本包還包含信號量、鎖以及對單個變數進行原子操作的類。考慮下面使用標準的LinkedList實現線程安全隊列的代碼。
public class ThreadSafeQueue {
private LinkedList<String> mList = new LinkedList<String>();
private final Object mLock = new Object();
public void offer(String value) {
synchronized (mLock) {
mList.offer(value);
mLock.notifyAll();
}
}
public synchronized String poll() {
synchronized (mLock) {
while (mList.isEmpty()) {
try {
mLock.wait();
} catch (InterruptedException e) {
//簡潔起見忽略異常處理
}
}
return mList.poll();
}
}
}
雖然這段代碼是正確的,並有可能在考試中得滿分,但實現和測試這樣一段代碼只是在浪費時間。實際上,所有前面的代碼可用下面一行代替。
LinkedBlockingQueue<String> blockingQueue =
new LinkedBlockingQueue<String>();
上面的一行代碼能像前面的例子一樣提供相同類型的阻塞隊列,甚至能提供額外的線程安全操作。java.util.concurrent包含許多可選的隊列以及並發映射類,所以,一般情況下,建議使用它們,而不是像之前的示例那樣使用更多代碼。
2. 更智能的鎖
Java提供的synchronized關鍵字允許開發者創建線程安全的方法和代碼塊。synchronized關鍵字易於使用,也很容易濫用,對性能造成負面影響。當需要區分讀數據和寫數據時,synchronized關鍵字並不是最有效的。幸好,java.util.concurrent.locks包中的工具類對這種情況提供了很好的支持。
public class ReadWriteLockDemo {
private final ReentrantReadWriteLock mLock;
private String mName;
private int mAge;
private String mAddress;
public ReadWriteLockDemo() {
mLock = new ReentrantReadWriteLock();
}
public void setPersonData(String name, int age, String address) {
ReentrantReadWriteLock.WriteLock writeLock = mLock.writeLock();
try {
writeLock.lock();
mName = name;
mAge = age;
mAddress = address;
} finally {
writeLock.unlock();
}
}
public String getName() {
ReentrantReadWriteLock.ReadLock readLock = mLock.readLock();
try {
readLock.lock();
return mName;
} finally {
readLock.unlock();
}
}
// 重復代碼不再贅述
}
上面的代碼展示了在什麼地方使用ReentrantReadWriteLock,它允許多個並發線程對數據進行只讀訪問,並確保同一時間只有一個線程寫入相同的數據。
在代碼中使用synchronized關鍵字仍然是處理鎖問題的有效方法,但無論何種情況下,都要考慮ReentrantReadWriteLock是否是
Ⅳ 手機上怎麼編程
這里介紹幾個可以在手機上編程的軟體,感興趣的可以下載一下,試著操作一下:
1.Python:這里推薦一個軟體—QPython3,集成了Python3解釋器、Console控制台和QEdit編輯器,可以直接編輯運行python代碼,也可以進行簡單的安卓開發,下面我簡單介紹一下這個軟體的安裝和使用:
安裝的話,直接在手機應用中搜索就行,如下:
打開軟體,終端測試效果如下,就行電腦版的python shell:
QEdit編輯器,編輯完python代碼後,可以直接運行:
效果如下:
2.Java:這里推薦一個軟體—AIDE,一個Java集成環境,可以直接新建Java項目,進行Java代碼的編輯和運行,還可以進行游戲開發,功能強大,內置學習教程,很適合初學者學習掌握,下面我簡單介紹一下這個軟體的安裝和使用:
安裝的話,與上面一樣,直接在手機應用中搜索就行:
打開軟體如下,可以直接新建Java文件,編寫Java代碼並運行:
當然,也可以直接開發簡單的安卓游戲,並直接在手機上安裝運行:
游戲效果如下:
3.HTML:這里推薦一個軟體—w3cschool編程學院,可以在線瀏覽查看前端開發的資料,包括html,css,javascript等,同時可以在線編輯代碼並運行,是一個很不錯的學習前端開發的軟體,下面我簡單介紹一下這個軟體的安裝和使用:
安裝的話,直接在應用商店中搜索就行:
打開軟體,就可以搜索前端編程的資料,如下:
在線編輯運行代碼的效果如下:
4.C/C++:這里推薦一個軟體—C++編譯器(C4droid),一款很不錯的C/C++編譯器,安裝完GCC插件後,可以直接編輯運行C/C++代碼,是一款很不錯的手機編程軟體(這里也可以使用「C語言編譯器」這個軟體,效果也不錯),下面我簡單介紹一下這個軟體的安裝和使用:
安裝的話,與上面類似,直接搜就行:
安裝完成後,這里需要下載一個GCC插件(編譯器),之後才能正常編譯運行代碼:
5.Termux:這是一個高級終端,類似手機版的XShell,可以直接在手機上登錄Linux伺服器,支持bash,zsh命令,可以編輯和運行C/C++,Python,Ruby等代碼,只需要安裝對應的插件就行,就像在Linux系統上使用一樣,下面我簡單介紹一下這個軟體的安裝和使用:
安裝的話,直接在手機應用商店中搜索就行,首次安裝,需要耐心等待一會兒:
打開這個軟體,界面效果如下,類似xshell一樣,可以運行shell命令:
安裝完python後,就可以直接運行python代碼,當然,其他語言也可以:
就介紹這5個在手機上編程的軟體,使用起來都還不錯,感興趣的話,可以在手機上下載一下,嘗試一下,當然,如果真想練習編程,建議還是在電腦上進行,調試起來更方便,希望以上分享的內容能對你有所幫助吧,也歡迎大家留言、評論。
Ⅳ 如何在Android上編寫高效的Java代碼
1、避免建立對象
世界上沒有免費的對象。雖然GC為每個線程都建立了臨時對象池,可以使創建對象的代價變得小一些,但是分配內存永遠都比不分配內存的代價大。如果在用戶界面循環中分配對象內存,就會引發周期性的垃圾回收, 除非必要,應盡量避免盡力對象的實例。
2、使用本地方法
在處理字串的時候,不要吝惜使用String.indexOf(), String.lastIndexOf()等特殊實現的方法。這些方法都是使用C/C++實現的,比起Java循環快10到100倍。
但也並非要完全使用本地方法,調用本地方法的代價要高於調用解釋方法。所以如果可以避免,就不應使用本地方法去做一些並不復雜的運算。
3、選擇虛類而不是介面
4、用靜態方法比虛方法好
如果不需要訪問一個對象的成員變數,那麼請把方法聲明成static。虛方法執行的更快,因為它可以被直接調用而不需要一個虛函數表。另外你也可以通過聲明體現出這個函數的調用不會改變對象的狀態。
5、不用getter和setter
在很多本地語言如C++中,都會使用getter(比如:i = getCount())來避免直接訪問成員變數(i = mCount)。在C++中這是一個非常好的習慣,因為編譯器能夠內聯訪問,如果你需要約束或調試變數,你可以在任何時候添加代碼。在Android上,這就不是個好主意了。虛方法的開銷比直接訪問成員變數大得多。在通用的介面定義中,可以依照OO的方式定義getters和setters,但是在一般的類中,你應該直接訪問變數。
6、將成員變數緩存到本地
訪問成員變數比訪問本地變數慢得多,下面一段代碼:
for (int i = 0; i < this.mCount; i++)mpItem(this.mItems[i]);你應該寫成:int count = this.mCount;Item[] items = this.mItems;for (int i = 0; i < count; i++)mpItems(items[i]);(顯示的使用」this」是為了表明這些是成員變數)
另一個相似的原則是:永遠不要在for的第二個條件中調用任何方法。如下面方法所示,在每次循環的時候都會調用getCount()方法,這樣做比你在一個int先把結果保存起來開銷大很多。
for (int i = 0; i < this.getCount();i++)
mpItems(this.getItem(i));同樣如果你要多次訪問一個變數,也最好先為它建立一個本地變數
7、使用常量
將一個方法或類聲明為」final」不會帶來性能的提升,但是會幫助編譯器優化代碼。舉例說,如果編譯器知道一個」getter」方法不會被重載,那麼編譯器會對其採用內聯調用。
也可以將本地變數聲明為」final」,同樣,這也不會帶來性能的提升。使用」final」只能使本地變數看起來更清晰些