❶ Dalvik虛擬機和JVM的區別。java裡面的,android裡面的區別
1、Dalvik 和標准 Java 虛擬機(JVM)的首要差別
Dalvik 基於寄存器,而 JVM 基於棧。基於寄存器的虛擬機對於更大的程序來說,在它們編譯的時候,花費的時間更短。 JVM位元組碼中,局部變數會被放入局部變數表中,繼而被壓入堆棧供操作碼進行運算,當然JVM也可以只使用堆棧而不顯式地將局部變數存入變數表中。Dalvik位元組碼中,局部變數會被賦給65536個可用的寄存器中的任何一個,Dalvik指令直接操作這些寄存器,而不是訪問堆棧中的元素。
2、Dalvik 和 Java 位元組碼的區別
VM位元組碼由.class文件組成,每個文件一個class。JVM在運行的時候為每一個類裝載位元組碼。相反的,Dalvik程序只包含一個.dex文件,這個文件包含了程序中所有的類。Java編譯器創建了JVM位元組碼之後,Dalvik的dx編譯器刪除.class文件,重新把它們編譯成Dalvik位元組碼,然後把它們寫進一個.dex文件中。這個過程包括翻譯、重構、解釋程序的基本元素(常量池、類定義、數據段)。常量池描述了所有的常量,包括引用、方法名、數值常量等。類定義包括了訪問標志、類名等基本信息。數據段中包含各種被VM執行的函數代碼以及類和函數的相關信息(例如DVM所需要的寄存器數量、局部變數表、操作數堆棧大小),還有實例變數。
3、Dalvik 和 Java 運行環境的區別
Dalvik 經過優化,允許在有限的內存中同時運行多個虛擬機的實例,並且每一個Dalvik 應用作為一個獨立的Linux 進程執行。獨立的進程可以防止在虛擬機崩潰的時候所有程序都被關閉。
Dalvik虛擬機在android2.2之後使用JIT (Just-In-Time)技術,與傳統JVM的JIT並不完全相同,
Dalvik虛擬機有自己的 bytecode,並非使用 Java bytecode。
還有以下幾點:
1、Dalvik主要是完成對象生命周期管理,堆棧管理,線程管理,安全和異常管理,以及垃圾回收等等重要功能。
2、Dalvik負責進程隔離和線程管理,每一個Android應用在底層都會對應一個獨立的Dalvik虛擬機實例,其代碼在虛擬機的解釋下得以執行。
3、不同於Java虛擬機運行java位元組碼,Dalvik虛擬機運行的是其專有的文件格式Dex。
4、dex文件格式可以減少整體文件尺寸,提高I/O操作的類查找速度。
5、odex是為了在運行過程中進一步提高性能,對dex文件的進一步優化。
6、所有的Android應用的線程都對應一個Linux線程,虛擬機因而可以更多的依賴操作系統的線程調度和管理機制。
7、有一個特殊的虛擬機進程Zygote,他是虛擬機實例的孵化器。它在系統啟動的時候就會產生,它會完成虛擬機的初始化、庫的載入、預制類庫和初始化的操作。如果系統需要一個新的虛擬機實例,它會迅速復制自身,以最快的速度提供給系統。對於一些只讀的系統庫,所有虛擬機實例都和Zygote共享一塊內存區域。
❷ 按google play的要求應該是按照jre還是jdk
jre是java用戶使用的,而jdk是供程序員使用的,你只需要jre就好了。
❸ 一個合格的Java開發工程師應該具備哪些技能
.CoreJava,就是Java基礎、JDK的類庫,很多童鞋都會說,JDK我懂,但是懂還不足夠,知其然還要知其所以然,JDK的源代碼寫的非常好,要經常查看,對使用頻繁的類,比如String,集合類(List,Map,Set)等數據結構要知道它們的實現,不同的集合類有什麼區別,然後才能知道在一個具體的場合下使用哪個集合類更適合、更高效,這些內容直接看源代碼就OK了2.多線程並發編程,現在並發幾乎是寫服務端程序必須的技術,那對Java中的多線程就要有足夠的熟悉,包括對象鎖機制、synchronized關鍵字,concurrent包都要非常熟悉,這部分推薦你看看《Java並發編程實踐》這本書,講解的很詳細3.I/O,Socket編程,首先要熟悉Java中Socket編程,以及I/O包,再深入下去就是JavaNIO,再深入下去是操作系統底層的Socket實現,了解Windows和Linux中是怎麼實現socket的4.JVM的一些知識,不需要熟悉,但是需要了解,這是Java的本質,可以說是Java的母體,了解之後眼界會更寬闊,比如Java內存模型(會對理解Java鎖、多線程有幫助)、位元組碼、JVM的模型、各種垃圾收集器以及選擇、JVM的執行參數(優化JVM)等等,這些知識在《深入Java虛擬機》這本書中都有詳盡的解釋,或者去oracle網站上查看具體版本的JVM規范.5.一些常用的設計模式,比如單例、模板方法、代理、適配器等等,以及在CoreJava和一些Java框架里的具體場景的實現,這個可能需要慢慢積累,先了解有哪些使用場景,見得多了,自己就自然而然會去用。6.常用資料庫(Oracle、MySQL等)、SQL語句以及一般的優化7.JavaWeb開發的框架,比如Spring、iBatis等框架,同樣他們的原理才是最重要的,至少要知道他們的大致原理。8.其他一些有名的用的比較多的開源框架和包,Netty網路框架,Apachecommon的N多包,Google的Guava等等,也可以經常去Github上找一些代碼看看
❹ 如何優雅地為程序中的變數和函數命名
簡言之,根據語意來選擇詞彙,別無它法……然而,有時我們會不知用什麼詞彙更合適。
當你想到某個抽象的東西,你更傾向於最先想到的詞語,除非你故意不這樣,這些詞也會搶著出現,直到模糊或改變你的想法。
當你想到一個具體的對象,你覺得詞窮,然後你想描述的已經看到了,然後你繼續尋找更適合它的詞。
哈哈,命名竟成了編程中最難的事~
Martin Fowler曾經在一篇文章中曾經引用過Phil Karlton的話:
There are only two hard things in Computer Science: cache invalidation
and naming things.
他說這句話在很長的一段時間內都是他最喜歡的話。可見命名對於廣大的程序員來說的確是個大問題。
對於我們中國人來說,問題可能出在兩個方面:
– 自打學編程開始就沒被教育過要重視命名。
這可以在譚浩強的《C語言入門》一書中可見一斑。《C語言入門》可以說是很多程序員在大學時學習的第一門編程語言使用的教材。而本書通篇都是各種
a,b,c,x,y,z 的命名方式。這種poor naming的方式被廣大程序員紛紛效仿,導致如今在很多項目代碼中隨處可見。
– 命名需要一定的英文功底,而國內程序員的英文水平參差不齊。
很多程序員被教育後開始逐漸重視命名,但是受限於英文水平,不知道使用什麼合適的英文詞彙來命名。有的甚至直接把中文直譯為英文的方式命名,或者直接用拼音來命名,反而得不償失。
命名的重要性我想不需要過於強調。如今的軟體開發早已不是求伯君那種單槍匹馬的時代。你寫下的每一行代碼都會在不久的以後被團隊的其他人甚至你自己多次查看。如果是個開源項目,那麼更會被全球各地的人查看源代碼。所以代碼的可讀性就變得尤為重要。如果讀者能夠輕松讀出你的代碼的意圖,那麼就說明你的命名功底相當扎實。
比如在一個管理系統中,你使用這樣的代碼: a = b * c
很容易讓人摸不著頭腦,雖然程序能夠正常運作,但恐怕沒人敢輕易修改這行他們不了解的代碼。而如果修改成為這樣: weeklypay =
hours_worked * pay_rate; 那恐怕極少有人不懂這行代碼的意圖。
糟糕的命名也會導致大量無謂的注釋,這是一個很容易跳進去的陷阱。下一段代碼怕別人不明白你的意圖,那麼就加上注釋。這貌似是一個很精妙的想法,實際上卻南轅北轍。比如以下的注釋:
int d; // elapsed time in days
貌似很容易讓人讀懂,但是問題還是很多。首先注釋不能跟著所有的引用,在定義處了解了d的含義,繼續往下看的話卻很容易忘記;其次代碼更新了,很可能會忘記修改注釋,反而給把讀者帶入歧途。
與其用這樣的注釋,還不如直接重命名: int elapsedTimeInDays; 這樣清晰易懂,還不用維護注釋,何樂而不為?
那麼如何著手來提高的自己的命名技巧那?
首先尋找一份公認的代碼規范,並嚴格按照這樣的標准執行。比如google開源了自己內部使用的語言編碼規范,我們可以直接拿來使用。比如請看Google
Java的style guide,相當詳實。除此之外還有C++等。這里收集了Google對各種語言的編碼規范,非常具有參考價值。
標準的代碼規范中的每一條都是有勝出的理由,值得我們遵從。但某些命名問題不一定只有一種最好的解決方式,這就需要團隊自己建立起約定。比如對於Java單元測試類的命名方式,不同的團隊可能不一樣。比如有的團隊喜歡以should開頭,有的喜歡test開頭,有的喜歡駱駝命名法,有些喜歡下劃線命名法,每種方式有各自的利弊,沒有一種能完全脫穎而出,所以需要團隊自行制定。一旦確定使用某一種,那麼一定要保持一致。
某些命名規范其實是可以進行自動化檢查的,比如在Java應用的構建過程中可以引用checkStyle這款插件,對命名進行一些基本的檢查,比如方法名、變數名是否遵循了一定模式等。這樣在一定程度上可以強制大家遵守某些約定。自己以前曾經寫過一篇文章,請參見這里。
最後要在團隊中建立起code review的機制,通過code
review來相互監督糾正命名問題,並且這樣更容易達成一致的命名約定,方便協作開發。code
review可以採取非正式會議評審的方式。最簡單的方式就是每天找個固定時間大家一起聚在一個顯示器前review每個人的代碼,現場提出問題,當事人記錄下來會後更改。這種方式非常高效。另外有的團隊在嵌入代碼時可能會引入一些代碼評審機制,比如pull
request, cherry pick等。這種review方式比較重量級,反饋周期也較長,好處是可以保證最終遷入的代碼是沒有問題的。
很多語言和框架為了更加可讀,都把命名玩出花來了。比如JavaScript生態圈中重要的單元測試工具Jasmine把測試函數以it命名,這樣可以與參數連接起來成為一種表意的自然語言:
如何優雅地為程序中的變數和函數命名?
- 不同的代碼段採用不同的命名長度。通常來說,循環計數器(loop
counters)採用1位的單字元來命名,循環判斷變數(condition/loop
variables)採用1個單詞來命名,方法採用1-2個單詞命名,類採用2-3個單詞命名,全局變數採用3-4個單詞命名。
- 對變數採用具體的命名(specific names)方式,」value」, 「equals」,
「data」在任何情況下都不是一種有效的命名方式。
- 採用有意義的命名(meaningful names)。變數的名字必須准確反映它的含義和內容。
- 不要用 o_, obj_, m_ 等前綴命名。變數不需要前綴標簽來表示自己是一個變數。
- 遵循公司的變數命名規則,在項目中堅持使用同一種變數命名方式。例如txtUserName, lblUserName,
cmbSchoolType等,否則會對可讀性造成影響,而且會令查找/替換工具(find/replace tools)不可用。
- 遵循當前語言的變數命名規則,不要不統一(inconsistently)地使用大/小寫字母。例如:userName, UserName,
USER_NAME, m_userName, username, …。
以Java為例:
* 類名使用駝峰命名法(Camel Case):VelocityResponseWriter
* 包名使用小寫:com.company.project.ui
* 變數使用首字母小寫的駝峰命名法(Mixed Case):studentName
* 常量使用大寫:MAX_PARAMETER_COUNT = 100
* 枚舉類(enum class)採用駝峰命名法,枚舉值(enum values)採用大寫。
* 除了常量和枚舉值以外,不要使用下劃線』_』
- 在同一個類不同的場景(contexts)中不要復用變數名。例如在方法、初始化方法和類中。這樣做可以提高可讀性和可維護性。
- 不要對不同使用目的的變數使用同一個變數名,而是賦予它們不同的名字。這同樣對保持可讀性和可維護性很重要。
- 變數名不要使用非ASCII字元(non-ASCII chars)。這樣做可能會在跨平台使用時產生問題。
-
不要使用過長的變數名(例如50個字元)。過長的變數名會導致代碼醜陋(ugly)和難以閱讀(hard-to-read),還可能因為字元限制在某些編譯器上存在兼容性問題。
- 僅使用一種自然語言(natural language)來命名變數。例如,同時使用德語和英語來命名變數會導致(理解)不一致和降低可讀性。
- 使用有意義的方法名。方法名必須准確表達該方法的行為,在多數情況下以動詞(verb)開頭。(例如:createPasswordHash)
- 遵循公司的方法命名規則,在項目中堅持使用同一種方法命名方式。例如 getTxtUserName(), getLblUserName(),
isStudentApproved(),否則會對可讀性造成影響,而且會令查找/替換工具不可用。
- 遵循當前語言的變數命名規則,不要不統一地使用大/小寫字母。例如:getUserName, GetUserName, getusername,
…。
以Java為例:
* 方法使用首字母小寫的駝峰命名法:getStudentSchoolType
* 方法參數使用首字母小寫的駝峰命名法:setSchoolName(String schoolName)
- 使用有意義的方法參數命名,這樣做可以在沒有文檔的情況下盡量做到「自解釋(documentate itself)」
總之,命名問題只是整個編碼規范中的一小部分,但是起的作用舉足輕重,它是判斷一個程序員是否專業的必要標准。
❺ java編碼規范有哪些
這個就有點多了,可以借鑒比較成熟公司的編碼規范看看,一般規范,比如代碼命名規范,常量定義,集合處理,異常處理,注釋等等。
❻ 谷歌瀏覽器怎麼啟用java
你好;根據你的提示,可能是你的瀏覽器不支持這個功能,你可以使用QQ瀏覽器,它的安裝包很小,占不了多大的內存,功能卻很強大,它使用全新的架構對它的極速內核做了全面的優化,瀏覽網頁的速度也得到進一步的提升,有效的提升網頁兼容性,減少系統漏洞。您可以使用電腦上微信,邊上網邊聊天。帶來高效的微信溝通體驗。謝謝望採納
❼ 最近在學習開發安卓,搭建環境時碰到了幾個問題,eclipse哪個版本的適合開發安卓,怎麼安裝ADT最新版本的
安裝SDK
這里主要介紹如何安裝Android的SDK開發包和配置開發環境。如果你還沒有下載SDK,點擊下面的鏈接開始。
Download the Android SDK
系統和軟體配置要求
要通過Android
SDK中提供的代碼和工具進行Android應用程序的開發,需要一個合適的用於開發的電腦和合適的開發環境,具體要求如下:
支持的開發環境
Eclipse
Eclipse 3.2,3.3(Europa)
Android開發工具插件(可選)
其他的開發環境或者IDE
JDK5.0或者JDK6.0(僅有JRE是不夠的)
安裝SDK
下載好SDK包後,將zip文件解壓縮至合適的地方。在下文中,我們默認你的SDK安裝目錄為$SDK_ROOT 你可以選擇將$SDK_ROOT/tools加入到你的路徑中
1.Linux下,打開文件~/.bash_profile或者~/.bashrc,找到設定PATH環境變數的一行,將$SDK_ROOT/tools的完整路徑加入其中。如果沒有找到設定PATH變數的行,你可以自己添加一行:
export PATH=${PATH}:<你的$SDK_ROOT/tools的完全路徑>
2.Mac下,在你的home目錄中找到文件.bash_profile,和Linux的一樣處理。如果還沒有在機器上設定這個文件,你可以創建一個.bash_profile文件。
3.Windows下,右鍵點擊【我的電腦】,選擇【屬性】,在【高級】頁中,點擊【環境變數】按鍵,在彈出的對話框中雙擊「系統變數」中的變數「Path」,將$SDK/tools的完全路徑加入其中。
通過將$SDK/tools加入系統路徑,在運行adb和其它一些命令行工具時就不需要鍵入完全路徑名了。需要注意到是,當你升級了SDK後,如果安裝路徑有變動的話,不要忘記了更新你的PATH變數的設置,將其指向變動後的路徑。
安裝Eclipse插件(ADT)
如果你選擇Eclipse作為Android的開發環境,可以安裝一個專門為Android定製的插件:Android Development Tools(ADT),ADT插件集成
了對Android工程和工具的支持,它包含了大量功能強大的擴展,使得創建、運行、調試Android程序更簡單更快捷。
如果你不打算使用Eclipse,那麼就不需要下載或者安裝ADT插件。
為了下載和安裝ADT插件,請按照下面的步驟設置Eclipse的遠程更新站點:
1.啟動Eclipse,依次選擇Help
> Software Updates > Find and Install....
此主題相關圖片如下:
2.在彈出的窗口中,選擇Search for new
features to install,然後點擊Next
3.點擊New Remote Site
4.在彈出的對話框中,為遠程站點輸入一個自定義的名字(例如:Android Plugin),然後輸入下面的內容作為其默認的URL:然後點擊OK
https://dl-ssl.google.com/android/eclipse/
5.現在你應該可以在搜索列表中看見剛才新加入的站點了(默認已經選中了),點擊Finish
6.在隨後的Search Results對話框中,選中Android Plugin > Eclipse Integration > Android Development
Tools,然後點擊Next
7.閱讀許可協議,然後選擇Accept terms of the license
agreement,點擊Next
8.點擊Finish
9.ADT插件沒有signed,在安裝過程中會彈出確認窗口,你只需要點擊 Install All就可以了
10.重啟Eclipse
11.重啟後,在Eclipse的Preferences中指定SDK的路徑:
a.選擇Window >
Preferences...打開Preference的面板。(Mac
OS X:Eclipse > Preferences)
b.在左側的面板中選擇Android
c.在主面板中,點擊Browse...定位到SDK的目錄
d.點擊Apply,然後點擊OK
更新ADT插件
按照下面的步驟將你的ADT插件升級到最新版本:
1.選擇Help > Software Updates > Find
and Install...
2.選擇Search for updates of the currently
installed features,然後點擊Finish
3.如果ADT插件有任何更新,選擇並且安裝
第二篇:創建一個hello Android工程
創建一個新項目是很簡單的,只要你安裝了Android SDK,並且你的Eclipse軟體版本在3.2或3.3,你就可以開始開發了。
首先, 看一下要創建"Hello, World"程序從高級層面上有哪些步驟:
1, 通過File -> New ->
Project 菜單,建立新項目"Android Project"
2, 填寫新項目各種參數。
3, 編輯自動生成的代碼模板。
盡此而已,我們通過下面的詳細說明來完成每個步驟。
1,創建一個新的Android項目
啟動Eclipse,
選擇File -> New -> Project 菜單, 如果你安裝好了Android的Eclipse插件,你將會在彈出的對話框中看到"Android Project" 的選項。
此主題相關圖片如下:
選擇「Android
Project」,點擊Next 按鈕。
2, 填寫項目的細節參數.
下面的對話框需要你輸入與項目有關的參數:
此主題相關圖片如下:
這個表格中詳細介紹了每個參數的含義:
Project Name: 包含這個項目的文件夾的名稱。
Package Name: 包名,遵循JAVA規范,用包名來區分不同的類是很重要的,例子中用到的是"com.google.android",你應該按照你的計劃起一個有別於這個的路徑的名稱。
Activity Name: 這是項目的主類名,這個類將會是Android的Activity類的子類。一個Activity類是一個簡單的啟動程
序和控製程序的類。它可以根據需要創建界面,但不是必須的。
Application Name:一個易讀的標題在你的應用程序上。
在"選擇欄"的"Use default location" 選項,允許你選擇一個已存在的項目。
3,編輯自動生成的代碼。
當項目創建後,你剛才創建的HelloAndroid就會是包含下面的代碼.
public class
HelloAndroid extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle)
{
super.onCreate(icicle);
setContentView(R.layout.main);
}
}
下面我們開始修改它
[構建界面]
當一個項目建立好以後,最直接的效果,就是在屏幕上顯示一些文本,下面是完成後的代碼,稍後我們在逐行解釋。
public class
HelloAndroid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
TextView tv = new
TextView(this);
tv.setText("Hello,
Android");
setContentView(tv);
}
}
注意你還需要添加 import android.widget.TextView; 在代碼開端處。
在Android程序中, 用戶界面是由叫做Views類來組織的。一個View可以簡單理解為可以繪制的對象,像選擇按鈕,一
個動畫,或者一個文本標簽(這個程序中),這個顯示文本標簽的View子類叫做TextView.
如何構造一個TextView:
TexiView tv = new
TextView(this);
TextView的構造參數是Android程序的Context實例, Context可以控制系統調用, 它提供了諸如資源解析, 訪問資料庫等
等。Activity類繼承自Context類,因為我們的HelloAndroid 是Activity的子類,所以它也是一個Context類,所以我們能用"this"在TextView構造中。
當我們構造完TextView後,我們需要告訴它顯示什麼:
tv.setText("Hello,
Android");
這個步驟很簡單,當我們完成了這些步驟以後,最後要把TextView顯示在屏幕上。
setContentView(tv);
Activity的setContentView()方法指示出系統要用哪個View作為Activity的界面, 如果一個Activity類沒有執行這個方法,將會沒有界面並且顯示白屏。在這個程序中,我們要顯示文本,所以我們傳入已創建好的TextView。
好了,程序代碼已經寫好,下面看看運行效果。
運行代碼:
Hello, Android
使用Android的Eclipse插件就可以很輕松的運行你的程序,選擇Run -> Open Run
Dialog。你將會看到下面的對話框
此主題相關圖片如下:
下一步,高亮"Android Application" 標簽, 然後按下左上角的圖標(就是像一片紙帶個小星星那個),或者直接雙擊"Android Application" 標簽, 你將會看到一個新的運行項目,名為"New_configuration".
此主題相關圖片如下:
取一個可以表意的名稱,比如"Hello, Android", 然後通過Browser按鈕選取你的項目(如果你有很多個項目在Eclipse中,確保你選擇要運行的項目), 然後插件會自動搜索在你的項目中的Activity類並且將所有找到的添加在"Activity"標簽的下拉列表中。我們只有"Hello,
Android"一個項目,所以它會作為默認選擇。
點擊"Apply"
按鈕,下圖
此主題相關圖片如下:
到這里,已經完成了,你只需要點擊"Run"按鈕,然後 Android的模擬器將會啟動,你的應用程序就會被顯示出來。
此主題相關圖片如下:
❽ 如何編出健壯的代碼 java編程30條規則
❾ 在java中,進行程序開發時需要遵循的步驟是什麼
看看你是什麼什麼情況,
假如你是學生,你要做的是:
1.根據老師給的題目上google或者網路找代碼
2.復制下來試試行不行,不行的話繼續上網找
3.找到好的交給老師
假如你是碼農,你要做的是:
1.根據領導的要求或者文檔對需求進行分析,想想腫么寫,那個流程怎樣
2.寫你的程序的config,通過寫config看看你對這個項目有什麼疑惑或者不明白的,有的就問領導,沒的就走第三步
3.想想你的程序你有沒有什麼技術不懂,不懂得上網找demo,測試,然後根據demo的源代碼來修改,陷入你的項目
4.標記你的完整的版本號,然後交給測試部,根據測試部反饋過來的信息來對產品修復bug
❿ java編碼規范有哪些
盡量使用完整的英文描述符,採用適用於相關領域的術語,採用大小寫混合使名字可讀。