2011年10月30日
前兩天休眠后機(jī)器非正常關(guān)機(jī),重新啟動(dòng)后運(yùn)行eclipse。悲催的發(fā)現(xiàn)eclipse
無法啟動(dòng)了。每次雙擊啟動(dòng)后,確定完workspace后,顯示啟動(dòng)畫面,沒過一會(huì)就進(jìn)入灰色無響應(yīng)狀態(tài)。啟動(dòng)畫面始終停留在Loading
workbench狀態(tài)。反復(fù)重啟,狀態(tài)依舊。嘗試解決。
搜索了一下,應(yīng)該是非正常關(guān)機(jī)導(dǎo)致eclipse工作區(qū)的文件狀態(tài)錯(cuò)誤導(dǎo)致。在工作區(qū)目錄中,有一個(gè).metadata目錄,里面是工作區(qū)及各插件的信息,刪除此目錄可以解決問題。
為保險(xiǎn)起見,將.metadata改名移動(dòng)到/tmp目錄,再重啟eclipse,果然可以正常啟動(dòng)eclipse了,但原來工作區(qū)的配置和項(xiàng)目信息也都消失,直接顯示的是歡迎界面。
如何恢復(fù)原來的project配置呢?嘗試對(duì)比了當(dāng)前的.metadata和之前備份的那個(gè)目錄,發(fā)現(xiàn)缺少了很多配置文件。試著一點(diǎn)點(diǎn)恢復(fù)一些目錄,但效
果不理想。因?yàn)椴恢滥男┪募?目錄)可以恢復(fù),哪些恢復(fù)會(huì)帶來問題。將備份的整個(gè)目錄恢復(fù)試試?Eclipse又回到了無法啟動(dòng)的狀態(tài)了。
怎么辦?這時(shí)想到啟動(dòng)停止時(shí)顯示的狀態(tài):"Loading workbench",看來和這個(gè)workbench插件有關(guān)。查看原來的.metadata/.plugins目錄,在眾多文件夾中
com.collabnet.subversion.merge org.eclipse.search
org.eclipse.compare org.eclipse.team.core
org.eclipse.core.resources org.eclipse.team.cvs.core
org.eclipse.core.runtime org.eclipse.team.ui
org.eclipse.debug.core org.eclipse.ui.ide
org.eclipse.debug.ui org.eclipse.ui.intro
org.eclipse.dltk.core org.eclipse.ui.views.log
org.eclipse.dltk.core.index.sql.h2 org.eclipse.ui.workbench
org.eclipse.dltk.ui org.eclipse.ui.workbench.texteditor
org.eclipse.epp.usagedata.recording org.eclipse.wb.discovery.core
org.eclipse.jdt.core org.eclipse.wst.internet.cache
org.eclipse.jdt.ui org.eclipse.wst.jsdt.core
org.eclipse.ltk.core.refactoring org.eclipse.wst.jsdt.ui
org.eclipse.ltk.ui.refactoring org.eclipse.wst.jsdt.web.core
org.eclipse.m2e.core org.eclipse.wst.sse.ui
org.eclipse.m2e.logback.configuration org.eclipse.wst.validation
org.eclipse.mylyn.bugzilla.core org.eclipse.wst.xml.core
org.eclipse.mylyn.tasks.ui org.tigris.subversion.subclipse.core
org.eclipse.php.core org.tigris.subversion.subclipse.graph
org.eclipse.php.ui org.tigris.subversion.subclipse.ui
發(fā)現(xiàn)了兩個(gè):
org.eclipse.ui.workbench 和
org.eclipse.ui.workbench.texteditor。
不管三七二十一,刪了這兩個(gè)目錄,重新啟動(dòng)eclipse。正常啟動(dòng)且原項(xiàng)目信息正確加載。
最近團(tuán)隊(duì)遇到一個(gè)案例??此坪苄〉氖虑?,但仔細(xì)研究起來,徹底分析,每一個(gè)環(huán)節(jié)都沒做好,細(xì)節(jié)部分糟糕得一塌糊涂,最后導(dǎo)致一件事情的結(jié)果:完全失敗。
經(jīng)常有人在聊起公司的時(shí)候問我,你現(xiàn)在最擔(dān)心的事情有哪些? 我當(dāng)然會(huì)重點(diǎn)提到團(tuán)隊(duì)。不過在談及團(tuán)隊(duì)的時(shí)候,我又最擔(dān)心在「細(xì)節(jié)」問題上做不好。
細(xì)節(jié)就是競爭力,尤其是對(duì)小團(tuán)隊(duì)來說,小團(tuán)隊(duì)更應(yīng)該注重細(xì)節(jié)問題。大一點(diǎn)的公司可以追究責(zé)任人,靠流程、靠制度,靠各級(jí)評(píng)審等等一系列的「成本」來提升細(xì)節(jié)能力。小一點(diǎn)的公司或者團(tuán)隊(duì)怎么辦? 恐怕只有依賴每個(gè)人的能力和責(zé)任心了。
細(xì)節(jié)也是鍛煉人的能力的地方,搞清楚每一個(gè)細(xì)節(jié),將每一個(gè)細(xì)節(jié)涉及到的背景知識(shí)和技能掌握好,能力自然也就會(huì)得到提升。繼而,著手做更大的事情也不
會(huì)手忙腳亂。相反,做不好細(xì)節(jié)和小事的人,如果總?cè)轮觥钢匾沟氖虑椋龈小柑魬?zhàn)」的事情,這樣的事情真的到你面前,真的能接住么?
為什么我們?cè)诩?xì)節(jié)上做不好?
對(duì)細(xì)節(jié)問題不夠重視 一件事情到了自己這里,頭腦中先入為主認(rèn)為只是一件小事,是一件簡單的事情。這樣,當(dāng)然就不會(huì)給予足夠的重視。小事不一定不重要,小事不一定意味著做起來就簡單。
對(duì)事情復(fù)雜度缺乏認(rèn)知 不就是給客戶寫一封電子郵件么? 不就是用 HTML 寫一個(gè)頁面么? 不就是做一則橫幅廣告么? 那么,這些事情真的簡單么? 為什么別人為客戶寫的郵件打開率更高? 為什么別人寫的頁面更容易被搜索引擎收錄? 為什么別人做的廣告轉(zhuǎn)化率更好? 背后涉及到哪些知識(shí)? 不想研究一下么? 不能研究一下么?
對(duì)細(xì)節(jié)缺乏耐心 草草了事,應(yīng)付了事,遇到問題馬馬虎虎,輕易得放過了很多可以讓自己得到成長的機(jī)會(huì)?!高@問題我沒想過」「這事情我沒遇到過」「設(shè)計(jì)稿都改過兩次了」... 這類借口在任何一個(gè)團(tuán)隊(duì)都很常見。
缺少責(zé)任心 常常覺得自己這里做不好,還有別人會(huì)把關(guān)呢。擔(dān)心什么? 可如果所有人都這么想呢? 「文案是產(chǎn)品經(jīng)理的事情,關(guān)我甚么事?」如果你能對(duì)文案也有改進(jìn)意見,誰說以后你就不能做產(chǎn)品經(jīng)理做的事情呢?
主觀上不認(rèn)可自己的工作 就給我這么一點(diǎn)錢,要我做這么多工作? 問題是我們?nèi)绻欢嘧鲆稽c(diǎn)工作,不提升一下自己,又怎么能多一點(diǎn)錢呢?
為什么細(xì)節(jié)上做不好? 不同人不同的角度還會(huì)有不同的看法。不過有一點(diǎn)我能肯定,細(xì)節(jié)不會(huì)決定成敗,但做不好細(xì)節(jié),一定會(huì)失敗。
做好細(xì)節(jié),百事可作。
mac中自帶的jdk并不包含源代碼,所以在eclipse中無法查看, 需要到apple上去下載,
https://developer.apple.com/downloads/index.action
Documentation and developer runtime of "Java for OS X 2012-005". Contains JavaDoc, tools documentation, and native framework headers.
目前的版本是:Java for OS X 2012-005 Developer Package
下載下來后,直接安裝,默認(rèn)設(shè)置就可以了,然后可以建個(gè)link,方便選擇。
- sudo -s
- cd /System/Library/Frameworks/JavaVM.framework/Home
- ln -s /Library/Java/JavaVirtualMachines/1.6.0_35-b10-428.jdk/Contents/Home/docs.jar
- ln -s /Library/Java/JavaVirtualMachines/1.6.0_35-b10-428.jdk/Contents/Home/src.jar
- 最后跟windows類似,在eclipse中用command + click點(diǎn)擊查看一個(gè)類的源碼。然后選“add source",選中上面的 src.jar 文件即可
雖然android安裝完成后會(huì)有一套參考手冊(cè),其中包括了api,但是如果在開發(fā)過程中能查看android的源碼(sdk的源碼),將對(duì)我們學(xué)習(xí)android有一定的幫助.畢竟,有時(shí)候源碼比api文檔更能說明問題.
我平常學(xué)習(xí)android用的2.2版本,從網(wǎng)上下載了2.2的源碼(從官方git庫下載太麻煩,是從網(wǎng)友共享的源碼位置下載的).按照網(wǎng)上的說法,我把
解壓后的那一堆文檔放在了android-sdk-root\platforms\android-8\sources目錄下.不過并沒有重啟
eclipse.而是通過這種方法來做的-----在eclipse中,鼠標(biāo)放在一個(gè)android提供的類上,按下ctrl鍵,會(huì)打開一個(gè)新頁面,提示
找不到對(duì)應(yīng)的類的class或者源文件,但這個(gè)新頁面上有個(gè)導(dǎo)入源碼的按鈕,點(diǎn)擊之后選擇下載好的source位置,確定后就可以了.
順便說下我下載android源碼的位置:
http://tech.cncms.com/UploadFiles/20101025/androidsdk2.2_sources.zip下載源碼到maven倉庫: http://search.maven.org/#search|gav|1|g%3A%22com.google.android%22%20AND%20a%3A%22android%22
離開淘寶后,自己創(chuàng)業(yè),產(chǎn)品需要推廣,考慮到當(dāng)今流量最大的聚集在微博上,我們也來做做微博運(yùn)營,我是一個(gè)技術(shù)人員,運(yùn)營對(duì)于我來說,從0開始,站在巨人的肩膀上學(xué)習(xí),稍稍總結(jié)了下。
1. 使用工具:微博第三方插件已經(jīng)提供了很多功能,適合自己的都用起來,這個(gè)我覺得最節(jié)省我的時(shí)間,其他網(wǎng)上提供的軟件都可以使用,重要是適合自己,安全第一。
2. 寫工具:有很多個(gè)性化需求的時(shí)候,如果變相的不能實(shí)現(xiàn),人為處理太慢太花時(shí)間,我們現(xiàn)在是小創(chuàng)業(yè)團(tuán)隊(duì),很多事情都需要自己做,數(shù)據(jù)增長慢,在有限的資源下,寫工具是非常好的方式,作為技術(shù)人員就直接動(dòng)手寫,當(dāng)然也需要看看性價(jià)比。
3.微博定位:
找好本微博的主題,內(nèi)容一般遵循原則:定制+非定制。定制是指針對(duì)你的目標(biāo)群體來選擇內(nèi)容,要讓這部分人感興趣,非定制:是指那種適合任何粉絲的內(nèi)容。
例如:我的目標(biāo)群體是女性,我的定制內(nèi)容就有美容、護(hù)膚、服飾搭配、星座、愛情等女性關(guān)注的話題,非定制的有笑話、經(jīng)典語錄、旅游等大眾類容。根據(jù)內(nèi)容來 建立話題,如#美容護(hù)膚# #開心一笑##XX語錄#等等,我就為自己建立了10個(gè)左右話題,每天的內(nèi)容按照話題來制作。
4.主要工作流程:(這個(gè)圖是轉(zhuǎn)的)

5.常用的微博話題(這個(gè)圖片也是轉(zhuǎn)的)

6. 關(guān)注項(xiàng)目:微博和主動(dòng)@,評(píng)論,私信,群,邀請(qǐng),勛章,策劃產(chǎn)品活動(dòng),參與微活動(dòng)
7.微博運(yùn)營最重要的是:一段時(shí)間需要總結(jié)挑選合適的方法執(zhí)行,沒有效果的去除。
如:微博發(fā)布時(shí)間/數(shù)量
我(轉(zhuǎn),不是我)曾在粉絲超過一萬之后就開始研究的我的微博改什么時(shí)候發(fā)布,每天發(fā)布多少。我現(xiàn)在粉絲中做了一個(gè)投票:你們一般什么時(shí)候織微博。最后有200多人參加, 我大概劃分了5個(gè)時(shí)段,9-12點(diǎn),12-17點(diǎn) 17-19點(diǎn) 19-22點(diǎn) 22-24點(diǎn) 0-3點(diǎn),做多選擇3個(gè)答案,結(jié)果出來之后就有個(gè)大概了。接下來我用一周的時(shí)間從9點(diǎn)—24點(diǎn)之間每1小時(shí)發(fā)布一條信息??偣?6條信息,我就分析每條信 息的轉(zhuǎn)發(fā)、回復(fù)數(shù)量,一周之后我就可以摸清粉絲的上網(wǎng)時(shí)間規(guī)律。然后我選擇哪幾個(gè)時(shí)間段重點(diǎn)維護(hù),并在那幾個(gè)時(shí)間段進(jìn)一步研究發(fā)布數(shù)量規(guī)律,我又分為每1小時(shí),每0.5小時(shí)兩個(gè)因素來研究發(fā)布數(shù)量。
JMock是幫助創(chuàng)建mock對(duì)象的工具,它基于Java開發(fā),在Java測(cè)試與開發(fā)環(huán)境中有不可比擬的優(yōu)勢(shì),更重要的是,它大大簡化了虛擬對(duì)象的使用。本文中,通過一個(gè)簡單的測(cè)試用例來說明JMock如何幫助我們實(shí)現(xiàn)這種孤立測(cè)試。
我們?cè)跍y(cè)試某類時(shí),由于它要與其他類發(fā)生聯(lián)系,因此往往在測(cè)試此類的代碼中也將與之聯(lián)系的類也一起測(cè)試了。這種測(cè)試,將使被測(cè)試的類直接依賴于其他類,一旦其他類發(fā)生改變,被測(cè)試類也隨之被迫改變。更重要的是,這些其他類可能尚未經(jīng)過測(cè)試,因此必須先測(cè)試這些類,才能測(cè)試被測(cè)試類。這種情況下,測(cè)試驅(qū)動(dòng)開發(fā)成為空談。而如果其他類中也引用了被測(cè)試類,我們到底先測(cè)試哪一個(gè)類?因此,在測(cè)試中,如果我們能將被測(cè)試類孤立起來,使其完全不依賴于其他類的具體實(shí)現(xiàn),這樣,我們就能做到測(cè)試先行,先測(cè)試哪個(gè)類,就先實(shí)現(xiàn)哪個(gè)類,而不管與之聯(lián)系的類是否已經(jīng)實(shí)現(xiàn)。
虛擬對(duì)象(mock object)就是為此需要而誕生的。它通過JDK中的反射機(jī)制,在運(yùn)行時(shí)動(dòng)態(tài)地創(chuàng)建虛擬對(duì)象。在測(cè)試代碼中,我們可以驗(yàn)證這些虛擬對(duì)象是否被正確地調(diào)用了,也可以在明確的情況下,讓其返回特定的假想值。而一旦有了這些虛擬對(duì)象提供的服務(wù),被測(cè)試類就可以將虛擬對(duì)象作為其他與之聯(lián)系的真實(shí)對(duì)象的替身,從而輕松地搭建起一個(gè)很完美的測(cè)試環(huán)境。
JMock是幫助創(chuàng)建mock對(duì)象的工具,它基于Java開發(fā),在Java測(cè)試與開發(fā)環(huán)境中有不可比擬的優(yōu)勢(shì),更重要的是,它大大簡化了虛擬對(duì)象的使用。
本文中,通過一個(gè)簡單的測(cè)試用例來說明JMock如何幫助我們實(shí)現(xiàn)這種孤立測(cè)試。有三個(gè)主要的類,User,UserDAO,及UserService。本文中,我們只需測(cè)試UserService,準(zhǔn)備虛擬UserDAO。對(duì)于User,由于本身僅是一個(gè)過于簡單的POJO,可以不用測(cè)試。但如果你是一個(gè)完美主義者,也可以使用JMock的虛擬它。在這領(lǐng)域,JMock幾乎無所不能。
這里我用到的是:(我用的是maven依賴)
<dependency>
<groupId>org.jmock</groupId>
<artifactId>jmock</artifactId>
<version>2.5.1</version>
</dependency>
<dependency>
<groupId>org.jmock</groupId>
<artifactId>jmock-junit3</artifactId>
<version>2.5.1</version>
</dependency>
在官方的網(wǎng)站上也有的下載。 地址: http://jmock.org/dist/jmock-2.5.1-jars.zip
public class User {
private String name;
public User() {
}
public User(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
UserDAO負(fù)責(zé)與數(shù)據(jù)庫打交道,通過數(shù)據(jù)庫保存、獲取User的信息。盡管我們可以不用知道JMock如何通過JDK 的反射機(jī)制來實(shí)現(xiàn)孤立測(cè)試,但至少應(yīng)知道,JDK的反射機(jī)制要求這些在運(yùn)行時(shí)創(chuàng)建的動(dòng)態(tài)類必須定義接口。在使用JMock的環(huán)境中,由于我們要虛擬 UserDAO,意味著UserDAO必須定義接口
public interface UserDAO {
public User getUser(Long id);
}
public interface UserService {
public void setUserDAO(UserDAO userDAO);
public User getUser(Long id);
}
public class UserServiceImpl implements UserService {
private UserDAO userDAO;
public UserServiceImpl() {
}
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
public User getUser(Long id) {
return userDAO.getUser(id);
}
}
import org.jmock.Expectations;
import org.jmock.integration.junit3.MockObjectTestCase;
public class UserServiceTest extends MockObjectTestCase {
private UserService userService = new UserServiceImpl();
private UserDAO userDAO = null;
public UserServiceTest(String testName) {
super(testName);
}
protected void setUp() throws Exception {
userDAO = mock(UserDAO.class);
userService.setUserDAO(userDAO);
}
public void testGetUser() {
String name = "lsb";
final User fakeUser = new User(name);
checking(new Expectations(){{
oneOf(userDAO).getUser(1L);
will(returnValue(fakeUser));
}});
User user = userService.getUser(1L);
assertNotNull(user);
assertEquals(name, user.getName());
}
protected void tearDown() throws Exception {
}
}
在開發(fā)Android和iPhone應(yīng)用程序時(shí),我們往往需要從服務(wù)器不定的向手 機(jī)客戶端即時(shí)推送各種通知消息,iPhone上已經(jīng)有了比較簡單的和完美的推送通知解決方案,可是Android平臺(tái)上實(shí)現(xiàn)起來卻相對(duì)比較麻煩,最近利用 幾天的時(shí)間對(duì)Android的推送通知服務(wù)進(jìn)行初步的研究。在Android手機(jī)平臺(tái)上,Google提供了C2DM(Cloudto Device Messaging)服務(wù)。
Android Cloud to Device Messaging (C2DM)是一個(gè)用來幫助開發(fā)者從服務(wù)器向Android應(yīng)用程序發(fā)送數(shù)據(jù)的服務(wù)。該服務(wù)提供了一個(gè)簡單的、輕量級(jí)的機(jī)制,允許服務(wù)器可以通知移動(dòng)應(yīng)用程序直接與服務(wù)器進(jìn)行通信,以便于從服務(wù)器獲取應(yīng)用程序更新和用戶數(shù)據(jù)。C2DM服務(wù)負(fù)責(zé)處理諸如消息排隊(duì)等事務(wù)并向運(yùn)行于目標(biāo)設(shè)備上的應(yīng)用程序分發(fā)這些消息。
使用C2DM框架的要求
1. 需要Android2.2及以上的系統(tǒng)版本
2. 使用C2DM功能的Android設(shè)備上需要設(shè)置好Google的賬戶。
3. C2DM需要依賴于Google官方提供的C2DM服務(wù)器,由于國內(nèi)的網(wǎng)絡(luò)環(huán)境,這個(gè)服務(wù)經(jīng)常不可用,如果想要很好的使用,我們的App Server必須也在國外,這個(gè)恐怕不是每個(gè)開發(fā)者都能夠?qū)崿F(xiàn)的
要使用C2DM來進(jìn)行Push操作,基本上要使用以下6個(gè)步驟

(1)注冊(cè):Android設(shè)備把使用C2DM功能的用戶賬戶(比如android.c2dm.demo@gmail.com)和App名稱發(fā)送給C2DM服務(wù)器。
(2)C2DM服務(wù)器會(huì)返回一個(gè)registration_id值給Android設(shè)備,設(shè)備需要保存這個(gè)registration_id值。
(3)Android設(shè)備把獲得的registration_id和C2DM功能的用戶賬戶(android.c2dm.demo@gmail.com)發(fā)送給自己的服務(wù)器,不過一般用戶賬戶信息因?yàn)楹头?wù)器確定好的,所以不必發(fā)送。
這樣Android設(shè)備就完成了C2DM功能的注冊(cè)過程,接下來就可以接收C2DM服務(wù)器Push過來的消息了。
(4)服務(wù)器獲得數(shù)據(jù)。這里圖中的例子Chrome To Phone,服務(wù)器接收到Chrome瀏覽器發(fā)送的數(shù)據(jù)。數(shù)據(jù)也可以是服務(wù)器本地產(chǎn)生的。這里的服務(wù)器是Google AppEngine(很好的一項(xiàng)服務(wù),可惜在國內(nèi)被屏了),要換成自己的服務(wù)器。服務(wù)器還要獲取注冊(cè)使用C2DM功能的用戶賬戶(android.c2dm.demo@gmail.com)的ClientLogin權(quán)限Auth。
(5)服務(wù)器把要發(fā)送的數(shù)據(jù)和registration_id一起,并且頭部帶上獲取的Auth,使用POST的方式發(fā)送給C2DM服務(wù)器。
(6)C2DM服務(wù)器會(huì)以Push的方式把數(shù)據(jù)發(fā)送給對(duì)應(yīng)的Android設(shè)備,Android設(shè)備只要在程序中按之前和服務(wù)器商量好的格式從對(duì)應(yīng)的key中獲取數(shù)據(jù)即可。
轉(zhuǎn)自:
地理位置索引支持是MongoDB的一大亮點(diǎn),這也是全球最流行的LBS服務(wù)foursquare 選擇MongoDB的原因之一。我們知道,通常的數(shù)據(jù)庫索引結(jié)構(gòu)是B+ Tree,如何將地理位置轉(zhuǎn)化為可建立B+Tree的形式,下文將為你描述。
首先假設(shè)我們將需要索引的整個(gè)地圖分成16×16的方格,如下圖(左下角為坐標(biāo)0,0 右上角為坐標(biāo)16,16):

單純的[x,y]的數(shù)據(jù)是無法建立索引的,所以MongoDB在建立索引的時(shí)候,會(huì)根據(jù)相應(yīng)字段的坐標(biāo)計(jì)算一個(gè)可以用來做索引的hash值,這個(gè)值叫做geohash,下面我們以地圖上坐標(biāo)為[4,6]的點(diǎn)(圖中紅叉位置)為例。
我們第一步將整個(gè)地圖分成等大小的四塊,如下圖:

劃分成四塊后我們可以定義這四塊的值,如下(左下為00,左上為01,右下為10,右上為11):
這樣[4,6]點(diǎn)的geohash值目前為 00
然后再將四個(gè)小塊每一塊進(jìn)行切割,如下:

這時(shí)[4,6]點(diǎn)位于右上區(qū)域,右上的值為11,這樣[4,6]點(diǎn)的geohash值變?yōu)椋?011
繼續(xù)往下做兩次切分:


最終得到[4,6]點(diǎn)的geohash值為:00110100
這樣我們用這個(gè)值來做索引,則地圖上點(diǎn)相近的點(diǎn)就可以轉(zhuǎn)化成有相同前綴的geohash值了。
我們可以看到,這個(gè)geohash值的精確度是與劃分地圖的次數(shù)成正比的,上例對(duì)地圖劃分了四次。而MongoDB默認(rèn)是進(jìn)行26次劃分,這個(gè)值在建立索引時(shí)是可控的。具體建立二維地理位置索引的命令如下:
db.map.ensureIndex({point : "2d"}, {min : 0, max : 16, bits : 4})
其中的bits參數(shù)就是劃分幾次,默認(rèn)為26次。
摘要: java中的引用分為4種:String Reference, WeakReference, softReference,PhantomReference Strong Reference: 我們平常用的最多的就是強(qiáng)引用了 如:String s = new String("opps");這種形式的引用稱為強(qiáng)引用,這種引用有以下幾個(gè)特點(diǎn) 1.強(qiáng)引用可以直接訪問目標(biāo)對(duì)象&...
閱讀全文