《如何成为AndroidAndroidAndroidAndroid高手》官方讨论群:65882321国士工作室电话::::15711060468Email:Email:Email:Email:guoshiandroid@gmail.
com博客::::http://www.
cnblogs.
com/guoshiandroid/关于国士工作室我们(国士工作室)是一支专注于Android平台企业级应用开发的技术团队,对娱乐多媒体应用有着深刻的理解及研发能力,致力服务于企业用户.
为音视频等娱乐多媒体网站、门户网站、SNS、论坛、电子商务等传统网络应用向移动互联网发展提供解决方案和技术支持,为企业提供Android培训服务等多种业务.
我们尤其擅长于提供从Android客户端到服务端的一站式解决方案和技术支持,服务端可以采用JavaEE,也可以采用轻量级流行的LAMP技术体系.
目前,研发出了比KU6、优酷更加强大和完善的Android视频网站娱乐多媒体客户端软件,并在持续升级中.
目前,我们正在务实而卓有成效的与音视频等娱乐多媒体网站、门户网站、SNS、论坛、电子商务等传统网络服务商合作,发展迅速,渴望有志之士的加入,和我们一起为成为世界最好的Android软件开发和咨询、培训公司而奋斗,为移动互联网和智能手机时代贡献力量!
联系我们电话:15711060468Email:Email:Email:Email:guoshiandroid@gmail.
com博客::::http://www.
cnblogs.
com/guoshiandroid/《如何成为AndroidAndroidAndroidAndroid高手》官方讨论群:65882321国士工作室电话::::15711060468Email:Email:Email:Email:guoshiandroid@gmail.
com博客::::http://www.
cnblogs.
com/guoshiandroid/注意:该文档参考和使用了网络上的很多免费开放的内容,并以免费开放的方式发布,希望为移动互联网和智能手机时代贡献绵薄之力!
可以随意转载,但不得使用该文档谋利.
另外:国士工作室已免费发布原创教程《大话企业级Android开发》,请访问国士工作室博客http://www.
cnblogs.
com/guoshiandroid/获取教程.
2007年底Google宣布举办总奖金高达1000万美元的开发者大奖赛,鼓励程序开发者在Android上写出实用而又具有创意的应用程序;2009年5月27日,在Google的I/O开发者聚会上,Google发布了总奖金接近2000万美元的第二次大奖赛的消息,开发者们开始了新一轮的较量;Android是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件.
Android一出生就被打上了富二代的胎记,不仅仅是因为诞生于当今的网络霸主Google,更主要还有一个空前强大和壮观的开放手机联盟OHA(OpenHandsetAlliance)提供全力的支持.
OHA是什么OHA涵盖了中国移动、T-Mobile、Sprint等移动运营商,包括HTC、Motolora、三星等手机制造商,有Google为代表的手机软件商,还有Inter、Nvidia为标志的底层硬件厂商和AstonishingTribe等商业运作公司,该组织声称组织的所有成员都会基于Android来开发新的手机业务.
但是,要成为Android高手并不是一件容易的事情.
并不是很多人想象的能够飞快的写出几行漂亮的代码去解决一些困难的问题就是Android高手了.
真正的Android高手需要考虑的问题远远不是写些漂亮的代码就足够的.
下面是成为一名真正的Android高手必须掌握和遵循的一些准则:1,学会懒惰2,精通Android体系架构、MVC、常见的设计模式、控制反转(IoC)3,编写可重用、可扩展、可维护、灵活性高的代码4,高效的编写高效的代码5,学会至少一门服务器端开发技术一:学会懒惰没搞错吧竟然让程序开发人员学会懒惰程序开发人员可能是世界上最为忙碌的一类人啦!
对,没错,学会懒惰!
正因为程序开发人员忙碌,正因为程序开发人员可能会在客户无限变化的需求之下没日没夜的加班,所以要学会懒惰,这样,你就可以把更多的时《如何成为AndroidAndroidAndroidAndroid高手》官方讨论群:65882321国士工作室电话::::15711060468Email:Email:Email:Email:guoshiandroid@gmail.
com博客::::http://www.
cnblogs.
com/guoshiandroid/间浪费在美好的事物身上!
如何懒惰:1,Don'tReinventtheWheel(不要重复发明轮子).
2,InventingtheWheel(发明轮子).
1,Don'tReinventtheWheel(不要重复发明轮子).
"轮子理论",也即"不要重复发明轮子",这是西方国家的一句谚语,原话是:Don'tReinventtheWheel.
"不要重复发明轮子"意思是企业中任何一项工作实际上都有人做过,我们所需要做的就是找到做过这件事情的人.
拿到软件领域中就是指有的项目或功能,别人已经做过,我们需要用的时候,直接拿来用即可,而不要重新制造.
Android号称是首个为移动终端打造的真正开放和完整的移动软件.
Android发布后不久Google公司就发布了操作系统核心(Kernel)与部分驱动程序的源代码,到目前位置除了GoogleMap等Google公司的核心组件没有开放源代码外,Android基本完成了完全的开源,这就极大的促进了Android的普及和移植.
受到Android开放行为和开源精神的影响,在世界各地,有成千上万的程序员喜欢和别人分享自己的聪明才智和自己编写的代码.
你可以在Google的Android讨论组或者Google搜索引擎上搜索到很多优秀的程序代码.
这样做并不是鼓励大家整天等着让别人为你编写代码,而是你可以"站在伟人的肩膀上",充分发扬"拿来主义",聪明地应用别人的程序代码可以节省你大量的时间.
下面笔者为大家介绍几个通用的类,这些类来自笔者平日的收集,如果你能把它们加入到你自己的类库中,迟早你会发现自己在进行Android开发的时候受益无穷:1)从输入流中获取数据并以字节数组返回,这种输入流可以来自Android本地也可以来自网络.
importjava.
io.
ByteArrayOutputStream;importjava.
io.
InputStream;publicclassStreamTool{/***从输入流获取数据*@paraminputStream*@return*@throwsException*/《如何成为AndroidAndroidAndroidAndroid高手》官方讨论群:65882321国士工作室电话::::15711060468Email:Email:Email:Email:guoshiandroid@gmail.
com博客::::http://www.
cnblogs.
com/guoshiandroid/publicstaticbyte[]readInputStream(InputStreaminputStream)throwsException{byte[]buffer=newbyte[1024];//你可以根据实际需要调整缓存大小intlen=-1;ByteArrayOutputStreamoutSteam=newByteArrayOutputStream();while((len=inputStream.
read(buffer))!
=-1){outSteam.
write(buffer,0,len);}outSteam.
close();inputStream.
close();returnoutSteam.
toByteArray();}}2)通过Android客户端上传数据到服务器:可以上传简单的表单,也可以方便的上传带有的文件,此类远远比Android自身的HttpClient更高效、更易于使用:importjava.
io.
DataOutputStream;importjava.
io.
InputStream;importjava.
net.
HttpURLConnection;importjava.
net.
URL;importjava.
net.
URLEncoder;importjava.
util.
ArrayList;importjava.
util.
List;importjava.
util.
Map;importorg.
apache.
http.
HttpResponse;importorg.
apache.
http.
NameValuePair;importorg.
apache.
http.
client.
HttpClient;importorg.
apache.
http.
client.
entity.
UrlEncodedFormEntity;importorg.
apache.
http.
client.
methods.
HttpPost;importorg.
apache.
http.
impl.
client.
DefaultHttpClient;importorg.
apache.
http.
message.
BasicNameValuePair;《如何成为AndroidAndroidAndroidAndroid高手》官方讨论群:65882321国士工作室电话::::15711060468Email:Email:Email:Email:guoshiandroid@gmail.
com博客::::http://www.
cnblogs.
com/guoshiandroid/publicclassHttpRequester{/***直接通过HTTP协议提交数据到服务器,实现如下面表单提交功能:**@paramactionUrl上传路径(注:避免使用localhost或127.
0.
0.
1这样的路径测试,因为它会指向手机模拟器,你可以使用http://www.
itcast.
cn或http://192.
168.
1.
10:8080这样的路径测试)*@paramparams请求参数key为参数名,value为参数值*@paramfile上传文件*/publicstaticStringpost(StringactionUrl,Mapparams,FormFile[]files){try{StringBOUNDARY7d4a6d158c9";//数据分隔线StringMULTIPART_FORM_DATA="multipart/form-data";URLurl=newURL(actionUrl);HttpURLConnectionconn=(HttpURLConnection)url.
openConnection();conn.
setConnectTimeout(5*1000);conn.
setDoInput(true);//允许输入conn.
setDoOutput(true);//允许输出conn.
setUseCaches(false);//不使用Cache《如何成为AndroidAndroidAndroidAndroid高手》官方讨论群:65882321国士工作室电话::::15711060468Email:Email:Email:Email:guoshiandroid@gmail.
com博客::::http://www.
cnblogs.
com/guoshiandroid/conn.
setRequestMethod("POST");conn.
setRequestProperty("Connection","Keep-Alive");conn.
setRequestProperty("Charset","UTF-8");conn.
setRequestProperty("Content-Type",MULTIPART_FORM_DATA+";boundary="+BOUNDARY);StringBuildersb=newStringBuilder();for(Map.
Entryentry:params.
entrySet()){//构建表单字段内容sb.
append("--");sb.
append(BOUNDARY);sb.
append("\r\n");sb.
append("Content-Disposition:form-data;name=\""+entry.
getKey(r\n\r\n");sb.
append(entry.
getValue());sb.
append("\r\n");}DataOutputStreamoutStream=newDataOutputStream(conn.
getOutputStream());outStream.
write(sb.
toString().
getBytes());//发送表单字段数据for(FormFilefile:files){//发送文件数据StringBuildersplit=newStringBuilder();split.
append("--");split.
append(BOUNDARY);split.
append("\r\n");split.
append("Content-Disposition:form-data;name=\""+file.
getFormname()+"\";filename=\""+file.
getFilname(r\n");split.
append("Content-Type:"+file.
getContentType()+"\r\n\r\n");outStream.
write(split.
toString().
getBytes());if(file.
getInStream()!
=null){byte[]buffer=newbyte[1024];《如何成为AndroidAndroidAndroidAndroid高手》官方讨论群:65882321国士工作室电话::::15711060468Email:Email:Email:Email:guoshiandroid@gmail.
com博客::::http://www.
cnblogs.
com/guoshiandroid/intlen=0;while((len=file.
getInStream().
read(buffer))!
=-1){outStream.
write(buffer,0,len);}file.
getInStream().
close();}else{outStream.
write(file.
getData(),0,file.
getData().
length);}outStream.
write("\r\n".
getBytes());}byte[]end_dataBOUNDARY+"--\r\n").
getBytes();//数据结束标志outStream.
write(end_data);outStream.
flush();intcah=conn.
getResponseCode();if(cah!
=200)thrownewRuntimeException("请求url失败");InputStreamis=conn.
getInputStream();intch;StringBuilderb=newStringBuilder();while((ch=is.
read())!
=-1){b.
append((char)ch);}outStream.
close();conn.
disconnect();returnb.
toString();}catch(Exceptione){thrownewRuntimeException(e);}}《如何成为AndroidAndroidAndroidAndroid高手》官方讨论群:65882321国士工作室电话::::15711060468Email:Email:Email:Email:guoshiandroid@gmail.
com博客::::http://www.
cnblogs.
com/guoshiandroid//***提交数据到服务器*@paramactionUrl上传路径(注:避免使用localhost或127.
0.
0.
1这样的路径测试,因为它会指向手机模拟器,你可以使用http://www.
itcast.
cn或http://192.
168.
1.
10:8080这样的路径测试)*@paramparams请求参数key为参数名,value为参数值*@paramfile上传文件*/publicstaticStringpost(StringactionUrl,Mapparams,FormFilefile){returnpost(actionUrl,params,newFormFile[]{file});}publicstaticbyte[]postFromHttpClient(Stringpath,Mapparams,Stringencode)throwsException{Listformparams=newArrayList();//用于存放请求参数for(Map.
Entryentry:params.
entrySet()){formparams.
add(newBasicNameValuePair(entry.
getKey(),entry.
getValue()));}UrlEncodedFormEntityentity=newUrlEncodedFormEntity(formparams,"UTF-8");HttpPosthttppost=newHttpPost(path);httppost.
setEntity(entity);HttpClienthttpclient=newDefaultHttpClient();//看作是浏览器HttpResponseresponse=httpclient.
execute(httppost);//发送post请求returnStreamTool.
readInputStream(response.
getEntity().
getContent());}《如何成为AndroidAndroidAndroidAndroid高手》官方讨论群:65882321国士工作室电话::::15711060468Email:Email:Email:Email:guoshiandroid@gmail.
com博客::::http://www.
cnblogs.
com/guoshiandroid//***发送请求*@parampath请求路径*@paramparams请求参数key为参数名称value为参数值*@paramencode请求参数的编码*/publicstaticbyte[]post(Stringpath,Mapparams,Stringencode)throwsException{//Stringparams="method=save&name="+URLEncoder.
encode("老毕","UTF-8")+"&age=28&";//需要发送的参数StringBuilderparambuilder=newStringBuilder("");if(params!
=null&&!
params.
isEmpty()){for(Map.
Entryentry:params.
entrySet()){parambuilder.
append(entry.
getKey()).
append("=").
append(URLEncoder.
encode(entry.
getValue(),encode)).
append("&");}parambuilder.
deleteCharAt(parambuilder.
length()-1);}byte[]data=parambuilder.
toString().
getBytes();URLurl=newURL(path);HttpURLConnectionconn=(HttpURLConnection)url.
openConnection();conn.
setDoOutput(true);//允许对外发送请求参数conn.
setUseCaches(false);//不进行缓存conn.
setConnectTimeout(5*1000);conn.
setRequestMethod("POST");//下面设置http请求头conn.
setRequestProperty("Accept","image/gif,image/jpeg,image/pjpeg,image/pjpeg,application/x-shockwave-flash,application/xaml+xml,application/vnd.
ms-xpsdocument,application/x-ms-xbap,application/x-ms-application,application/vnd.
ms-excel,application/vnd.
ms-powerpoint,application/msword,*/*");《如何成为AndroidAndroidAndroidAndroid高手》官方讨论群:65882321国士工作室电话::::15711060468Email:Email:Email:Email:guoshiandroid@gmail.
com博客::::http://www.
cnblogs.
com/guoshiandroid/conn.
setRequestProperty("Accept-Language","zh-CN");conn.
setRequestProperty("User-Agent","Mozilla/4.
0(compatible;MSIE8.
0;WindowsNT5.
2;Trident/4.
0;.
NETCLR1.
1.
4322;.
NETCLR2.
0.
50727;.
NETCLR3.
0.
04506.
30;.
NETCLR3.
0.
4506.
2152;.
NETCLR3.
5.
30729)");conn.
setRequestProperty("Content-Type","application/x-www-form-urlencoded");conn.
setRequestProperty("Content-Length",String.
valueOf(data.
length));conn.
setRequestProperty("Connection","Keep-Alive");//发送参数DataOutputStreamoutStream=newDataOutputStream(conn.
getOutputStream());outStream.
write(data);//把参数发送出去outStream.
flush();outStream.
close();if(conn.
getResponseCode()==200){returnStreamTool.
readInputStream(conn.
getInputStream());}returnnull;}}2,InventingtheWheel(发明轮子).
发明轮子不错,发明轮子!
我们不仅要发明轮子,更要成为努力成为世界上发明轮子的主导力量,唯有这样,才能谈的上中华名族软件大业的真正强大.
在Android,要发明轮子,就是我们要主动的是解决一些世界上他人未解决的难题或者创造新的编程框架或者对Android进行深度的改造以适合自己的业务发展需要.
Google发布了Android后不久,中国移动便投入了大量的人力和物力,在Android的基础上创建融入自己业务并开发、封装了新的功能的和框架的OMS,这是Android中发明轮子的一个非常重要的例子.
可能你会说,这发明轮子也太难了吧,别急,我们慢慢来,开发一个框架特定领域的框架吧!
你可能会一脸无辜的说,开发一个框架是说的那么容易吗当然不是啦.
但是也并非不可能,《如何成为AndroidAndroidAndroidAndroid高手》官方讨论群:65882321国士工作室电话::::15711060468Email:Email:Email:Email:guoshiandroid@gmail.
com博客::::http://www.
cnblogs.
com/guoshiandroid/首先,我们分析一下框架的魅力的源泉,看看Spring、Struts等JavaEE框架,在看看.
NET框架,当然也可以看看发展的如火如荼、层出不穷的PHP框架,她们的强大和魅力的源泉都在于:IoC(InversionofControl).
Don'tcallus,we'llcallyou(别找我,我会来找你的).
我们下面就自己发明一个轮子的模型,实际展示一个框架最初核心的类,让你一饱眼福:1)下面的类是文件下载类,支持文件的多线程断点续传,使用该类的即可安全、高效的下载任何类型的二进制文件:importjava.
io.
File;importjava.
io.
FileInputStream;importjava.
io.
FileOutputStream;importjava.
io.
RandomAccessFile;importjava.
net.
HttpURLConnection;importjava.
net.
URL;importjava.
util.
LinkedHashMap;importjava.
util.
Map;importjava.
util.
Properties;importjava.
util.
UUID;importjava.
util.
concurrent.
ConcurrentHashMap;importjava.
util.
regex.
Matcher;importjava.
util.
regex.
Pattern;importcn.
itcast.
service.
FileService;importandroid.
content.
Context;importandroid.
util.
Log;/***文件下载器*/publicclassFileDownloader{privateContextcontext;privateFileServicefileService;《如何成为AndroidAndroidAndroidAndroid高手》官方讨论群:65882321国士工作室电话::::15711060468Email:Email:Email:Email:guoshiandroid@gmail.
com博客::::http://www.
cnblogs.
com/guoshiandroid/privatestaticfinalStringTAG="FileDownloader";/*已下载文件大小*/privateintdownloadSize=0;/*原始文件大小*/privateintfileSize=0;/*线程数*/privateDownloadThread[]threads;/*下载路径*/privateURLurl;/*本地保存文件*/privateFilesaveFile;/*下载记录文件*/privateFilelogFile;/*缓存各线程最后下载的位置*/privateMapdata=newConcurrentHashMap();/*每条线程下载的大小*/privateintblock;privateStringdownloadUrl;//下载路径/***获取线程数*/publicintgetThreadSize(){returnthreads.
length;}/***获取文件大小*@return*/publicintgetFileSize(){《如何成为AndroidAndroidAndroidAndroid高手》官方讨论群:65882321国士工作室电话::::15711060468Email:Email:Email:Email:guoshiandroid@gmail.
com博客::::http://www.
cnblogs.
com/guoshiandroid/returnfileSize;}/***累计已下载大小*@paramsize*/protectedsynchronizedvoidappend(intsize){downloadSize+=size;}/***更新指定线程最后下载的位置*@paramthreadId线程id*@parampos最后下载的位置*/protectedvoidupdate(intthreadId,intpos){this.
data.
put(threadId,pos);}/***保存记录文件*/protectedsynchronizedvoidsaveLogFile(){this.
fileService.
update(this.
downloadUrl,this.
data);}/***构建文件下载器*@paramdownloadUrl下载路径*@paramfileSaveDir文件保存目录*@paramthreadNum下载线程数*/publicFileDownloader(Contextcontext,StringdownloadUrl,FilefileSaveDir,int《如何成为AndroidAndroidAndroidAndroid高手》官方讨论群:65882321国士工作室电话::::15711060468Email:Email:Email:Email:guoshiandroid@gmail.
com博客::::http://www.
cnblogs.
com/guoshiandroid/threadNum){try{this.
context=context;this.
downloadUrl=downloadUrl;fileService=newFileService(context);this.
url=newURL(downloadUrl);if(!
fileSaveDir.
exists())fileSaveDir.
mkdirs();this.
threads=newDownloadThread[threadNum];HttpURLConnectionconn=(HttpURLConnection)url.
openConnection();conn.
setConnectTimeout(6*1000);conn.
setRequestMethod("GET");conn.
setRequestProperty("Accept","image/gif,image/jpeg,image/pjpeg,image/pjpeg,application/x-shockwave-flash,application/xaml+xml,application/vnd.
ms-xpsdocument,application/x-ms-xbap,application/x-ms-application,application/vnd.
ms-excel,application/vnd.
ms-powerpoint,application/msword,*/*");conn.
setRequestProperty("Accept-Language","zh-CN");conn.
setRequestProperty("Referer",downloadUrl);conn.
setRequestProperty("Charset","UTF-8");conn.
setRequestProperty("User-Agent","Mozilla/4.
0(compatible;MSIE8.
0;WindowsNT5.
2;Trident/4.
0;.
NETCLR1.
1.
4322;.
NETCLR2.
0.
50727;.
NETCLR3.
0.
04506.
30;.
NETCLR3.
0.
4506.
2152;.
NETCLR3.
5.
30729)");conn.
setRequestProperty("Connection","Keep-Alive");conn.
connect();printResponseHeader(conn);if(conn.
getResponseCode()==200){this.
fileSize=conn.
getContentLength();//根据响应获取文件大小if(this.
fileSizelogdata=fileService.
getData(downloadUrl);if(logdata.
size()>0){for(Map.
Entryentry:logdata.
entrySet())data.
put(entry.
getKey(),entry.
getValue()+1);}this.
block=this.
fileSize/this.
threads.
length+1;if(this.
data.
size()==this.
threads.
length){for(inti=0;i0)randOut.
setLength(this.
fileSize);randOut.
seek(this.
data.
get(i+1));this.
threads[i]=newDownloadThread(this,this.
url,randOut,this.
block,this.
data.
get(i+1),i+1);this.
threads[i].
setPriority(7);this.
threads[i].
start();}else{this.
threads[i]=null;}}this.
fileService.
save(this.
downloadUrl,this.
data);booleannotFinish=true;//下载未完成while(notFinish){//循环判断是否下载完毕Thread.
sleep(900);notFinish=false;//假定下载完成for(inti=0;igetHttpResponseHeader(HttpURLConnectionhttp){Mapheader=newLinkedHashMap();for(inti=0;;i++){Stringmine=http.
getHeaderField(i);if(mine==null)break;header.
put(http.
getHeaderFieldKey(i),mine);}returnheader;}/***打印Http头字段*@paramhttp*/publicstaticvoidprintResponseHeader(HttpURLConnectionhttp){《如何成为AndroidAndroidAndroidAndroid高手》官方讨论群:65882321国士工作室电话::::15711060468Email:Email:Email:Email:guoshiandroid@gmail.
com博客::::http://www.
cnblogs.
com/guoshiandroid/Mapheader=getHttpResponseHeader(http);for(Map.
Entryentry:header.
entrySet()){Stringkey=entry.
getKey()!
=nullentry.
getKey(print(key+entry.
getValue());}}privatestaticvoidprint(Stringmsg){Log.
i(TAG,msg);}publicstaticvoidmain(String[]args){/*FileDownloaderloader=newFileDownloader(context,"http://browse.
babasport.
com/ejb3/ActivePort.
exe",newFile("D:\\androidsoft\\test"),2);loader.
getFileSize();//得到文件总大小try{loader.
download(newDownloadProgressListener(){publicvoidonDownloadSize(intsize){print("已经下载:"+size);}});}catch(Exceptione){e.
printStackTrace();}*/}}2)下面的类是真正支持下载的线程类:《如何成为AndroidAndroidAndroidAndroid高手》官方讨论群:65882321国士工作室电话::::15711060468Email:Email:Email:Email:guoshiandroid@gmail.
com博客::::http://www.
cnblogs.
com/guoshiandroid/importjava.
io.
InputStream;importjava.
io.
RandomAccessFile;importjava.
net.
HttpURLConnection;importjava.
net.
URL;importandroid.
util.
Log;publicclassDownloadThreadextendsThread{privatestaticfinalStringTAG="DownloadThread";privateRandomAccessFilesaveFile;privateURLdownUrl;privateintblock;/*下载开始位置*/privateintthreadId=-1;privateintstartPos;privateintdownLength;privatebooleanfinish=false;privateFileDownloaderdownloader;publicDownloadThread(FileDownloaderdownloader,URLdownUrl,RandomAccessFilesaveFile,intblock,intstartPos,intthreadId){this.
downUrl=downUrl;this.
saveFile=saveFile;this.
block=block;this.
startPos=startPos;this.
downloader=downloader;this.
threadId=threadId;this.
downLength=startPos-(block*(threadId-1));}《如何成为AndroidAndroidAndroidAndroid高手》官方讨论群:65882321国士工作室电话::::15711060468Email:Email:Email:Email:guoshiandroid@gmail.
com博客::::http://www.
cnblogs.
com/guoshiandroid/@Overridepublicvoidrun(){if(downLength的初始化类的方法,当类第一次被使用的时候这个方法会被执行.
方法会将42赋给intVal,然后把一个指向类中常量表的引用赋给strVal.
当以后要用到这些值的时候,会在成员变量表中查找到他们.
下面我们做些改进,使用"final"关键字:Java代码22staticfinalintintVal=42;23staticfinalStringstrVal="Hello,world!
";现在,类不再需要方法,因为在成员变量初始化的时候,会将常量直接保存到类文件中.
用到intVal的代码被直接替换成42,而使用strVal的会指向一个字符串常量,而不是使用成员变量.
将一个方法或类声明为"final"不会带来性能的提升,但是会帮助编译器优化代码.
举例说,如果编译器知道一个"getter"方法不会被重载,那么编译器会对其采用内联调用.
《如何成为AndroidAndroidAndroidAndroid高手》官方讨论群:65882321国士工作室电话::::15711060468Email:Email:Email:Email:guoshiandroid@gmail.
com博客::::http://www.
cnblogs.
com/guoshiandroid/你也可以将本地变量声明为"final",同样,这也不会带来性能的提升.
使用"final"只能使本地变量看起来更清晰些(但是也有些时候这是必须的,比如在使用匿名内部类的时候)(xing:原文是oryouhaveto,e.
g.
foruseinananonymousinnerclass)谨慎使用foreachforeachforeachforeachforeach可以用在实现了Iterable接口的集合类型上.
foreach会给这些对象分配一个iterator,然后调用hasNext()和next()方法.
你最好使用foreach处理ArrayList对象,但是对其他集合对象,foreach相当于使用iterator.
下面展示了foreach一种可接受的用法:Java代码24publicclassFoo{25intmSplat;26staticFoomArray[]=newFoo[27];2728publicstaticvoidzero(){29intsum=0;30for(inti=0;i时代软件的主流应用模式将是"手机客户端+互联网络应用服务端",这种模式要求做移动互联网开发的程序员不但要掌握像Android这样的手机终端软件技术还要掌握开发互联网络应用的服务器端技术.
目前,软件企业普遍存在这样的问题,做移动互联网开发Android终端软件的程序员不了解web应用技术,而做web应用的程序员不了解移动终端技术,这样就导致了客户端与服务端在衔接上出现了问题.
目前的现状是:既掌握移动互联网Android终端技术,又掌握web应用技术的程序员比较稀缺,随着中国步入移动互联网时代,企业对这种移动互联网时代综合性人才的需求很旺盛.
如果不了解web应用技术,最终会遇到了技术和发展的瓶颈;另一方面,Google联合OHA推出的真正优势之一也在于和和互联网结合,Google的用意之一也是想开辟新的终端去使用Google的优势服务.
服务器端开发技术目前主流的有Sun的JavaEE、微软的.
NET,开源的以PHP和MySQL为代表的LAMP体系,我们该选择哪一种呢从理论上讲,很多人倾向于选择JavaEE,毕竟它们都是使用Java作为开发语言的,但是很多人面对JavaEE众多的框架就望而生畏,其实在学习JavaEE的时候可以从Struts入手,随着业务的需求逐步深入.
当然,选择微软的.
NET也行,毕竟该技术体系也占有很大市场份额.
其实,笔者认为,选择LAMP可以是会获得最高的"性价比"的,一方面PHP是现在Web方面的主流语言,大多数新型的网站尤其是创业性质的网站一般都会选用PHP作为服务端开发语言,另一方面,前面也说过,Android是为移动互联而生的,两者达到了完美的契合.
如果您精通Android,又精通LAMP、JavaEE、.
NET,请联系笔者:官方博客:http://www.
cnblogs.
com/guoshiandroid/官方Email:guoshiandroid@gmail.
com官方讨论QQ群:65882321
Moack怎么样?Moack(蘑菇主机)是一家成立于2016年的商家,据说是国人和韩国合资开办的主机商家,目前主要销售独立服务器,机房位于韩国MOACK机房,网络接入了kt/lg/kinx三条线路,目前到中国大陆的速度非常好,国内Ping值平均在45MS左右,而且商家的套餐比较便宜,针对国人有很多活动。不过目前如果购买机器如需现场处理,由于COVID-19越来越严重,MOACK办公楼里的人也被感染...
2021年9月中秋特惠优惠促销来源:数脉科技 编辑:数脉科技编辑部 发布时间:2021-09-11 03:31尊敬的新老客户:9月优惠促销信息如下,10Mbps、 30Mbps、 50Mbps、100Mbps香港优质或BGPN2、阿里云线路、华为云线路,满足多种项目需求!支持测试。全部线路首月五折起。数脉官网 https://my.shuhost.com/香港特价数脉阿里云华为云 10MbpsCN...
RAKsmart发布了新年钜惠活动,即日起到2月28日,商家每天推出限量服务器秒杀,美国服务器每月30美元起,新上了韩国服务器、GPU服务器、香港/日本/美国常规+站群服务器、1-10Gbps不限流量大带宽服务器等大量库存;VPS主机全场提供7折优惠码,同时针对部分特惠套餐无码直购每月仅1.99美元,支持使用PayPal或者支付宝等方式付款,有中英文网页及客服支持。爆款秒杀10台/天可选精品网/大...
时代软件为你推荐
小企业如何做品牌中小企业如何树立品牌形象,提高知名度?163yeahyeah邮箱和163邮箱的区别在哪里 那个好用degradeios邮件eset腾讯官方电话腾讯公司电话多少厦门三五互联科技股份有限公司厦门三五互联科技股份有限公司怎么样?123456hd手机卡上出现符号hd怎么取消免费代理加盟哪有免费的代理可以做的?地址栏图标网站添加地址栏图标代码怎么写?付款方式工程付款方式有哪些
Oray域名注册服务商 vps是什么意思 已经备案域名 5折 bluehost ix主机 10t等于多少g 外国域名 tightvnc 租空间 免费mysql 河南移动邮件系统 jsp空间 免费防火墙 双11秒杀 腾讯实名认证中心 东莞数据中心 卡巴斯基是免费的吗 申请免费空间和域名 国外免费云空间 更多