10.android:gravity與android:layout_gravity
11.android:paddingLeft诚撵、android:layout_marginLeft 11
1.JDK和JRE的區(qū)別
很多程序員已經(jīng)干了一段時間java了依然不明白jdk與jre的區(qū)別。
1.JDK
就是Java Development Kit.簡單的說JDK是面向開發(fā)人員使用的SDK啦辐,它提供了Java的開發(fā)環(huán)境和運行環(huán)境。SDK是Software
Development Kit 一般指軟件開發(fā)包竖瘾,可以包括函數(shù)庫吁系、編譯程序等。
2.JRE
是Java Runtime Enviroment是指Java的運行環(huán)境嫉嘀,是面向Java程序的使用者猾浦,而不是開發(fā)者陆错。
3.如果安裝了JDK,會發(fā)同你的電腦有兩套JRE金赦,一套位于\jre 另外一套位于 C:\Program Files\Java\jre1.5.0_15 目錄下音瓷,后面這套比前面那套少了Server端的Java虛擬機,不過直接將前面那套的Server端Java虛擬機復制過來就行了夹抗。而且在安裝JDK可以選擇是否安裝這個位于 C:\Program Files\Java 目錄下的JRE绳慎。如果你只安裝JRE,而不是JDK漠烧,那么只會在C:\Program Files\Java 目錄下安裝唯一的一套JRE杏愤。
4.JRE的地位就象一臺PC機一樣,我們寫好的Win32應用程序需要操作系統(tǒng)幫我們運行已脓,同樣的盯桦,我們編寫的Java程序也必須要JRE才能運行异袄。所以當你裝完JDK后蛉拙,如果分別在硬盤上的兩個不同地方安裝了兩套JRE宙攻,那么你可以想象你的電腦有兩臺虛擬的Java PC機,都具有運行Java程序的功能堕担。所以我們可以說已慢,只要你的電腦安裝了JRE,就可以正確運行Java應用程序照宝。
5蛇受、為什么Sun要讓JDK安裝兩套相同的JRE句葵?這是因為JDK里面有很多用Java所編寫的開發(fā)工具(如javac.exe厕鹃、jar.exe等)兢仰,而且都放置在 \lib\tools.jar 里。從下面例子可以看出剂碴,先將tools.jar改名為tools1.jar把将,然后運行javac.exe,顯示如下結果: Exception in thread "main"
java.lang.NoClassDefFoundError: com/sun/tools/javac /Main 這個意思是說忆矛,你輸入javac.exe與輸入 java
-cp c:\jdk\lib\tools.jar com.sun.tools.javac.Main 是一樣的察蹲,會得到相同的結果。從這里我們可以證明javac.exe只是一個包裝器(Wrapper)催训,而制作的目的是為了讓開發(fā)者免于輸入太長的指命洽议。而且可以發(fā)現(xiàn)\lib目錄下的程序都很小,不大于2 9K漫拭,從這里我們可以得出一個結論亚兄。就是JDK里的工具幾乎是用Java所編寫,所以也是Java應用程序采驻,因此要使用JDK所附的工具來開發(fā)Java程序审胚,也必須要自行附一套JRE才行,所以位于C:\Program Files\Java目錄下的那套JRE就是用來運行一般Java程序用的礼旅。
6膳叨、如果一臺電腦安裝兩套以上的JRE,誰來決定呢痘系?這個重大任務就落在java.exe身上菲嘴。Java.exe的工作就是找到合適的JRE來運行Java程序。 Java.exe依照底下的順序來查找JRE:自己的目錄下有沒有JRE汰翠;父目錄有沒有JRE临谱;查詢注冊表: [HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Runtime Environment] 所以java.exe的運行結果與你的電腦里面哪個JRE被執(zhí)行有很大的關系。
ADD
:(小小結)
1.JVM -- java virtual machineJVM
就是我們常說的java虛擬機奴璃,它是整個java實現(xiàn)跨平臺的最核心的部分悉默,所有的java程序會首先被編譯為.class的類文件,這種類文件可以在虛擬機上執(zhí)行苟穆,也就是說class并不直接與機器的操作系統(tǒng)相對應抄课,而是經(jīng)過虛擬機間接與操作系統(tǒng)交互,由虛擬機將程序解釋給本地系統(tǒng)執(zhí)行雳旅。
2.JRE -- java runtime environmentJRE是指java運行環(huán)境跟磨。光有JVM還不能成class的執(zhí)行,因為在解釋class的時候JVM需要調用解釋所需要的類庫lib攒盈。在JDK的安裝目錄里你可以找到jre目錄抵拘,里面有兩個文件夾bin和lib,在這里可以認為bin里的就是jvm,lib中則是jvm工作所需要的類庫型豁,而jvm和 lib和起來就稱為jre僵蛛。所以尚蝌,在你寫完java程序編譯成.class之后,你可以把這個.class文件和jre一起打包發(fā)給朋友充尉,這樣你的朋友就可以運行你寫程序了飘言。(jre里有運行.class的java.exe)
3.JDK -- java development kitJDK是java開發(fā)工具包,基本上每個學java的人都會先在機器上裝一個JDK驼侠,那他都包含哪幾部分呢姿鸿?讓我們看一下JDK的安裝目錄。在目錄下面有六個文件夾倒源、一個src類庫源碼壓縮包苛预、和其他幾個聲明文件。其中笋熬,真正在運行java時起作用的是以下四個文件夾:bin碟渺、include、lib突诬、 jre∩慌模現(xiàn)在我們可以看出這樣一個關系,JDK包含JRE旺隙,而JRE包含JVM绒极。bin:最主要的是編譯器(javac.exe)include:java和JVM交互用的頭文件lib:類庫jre:java運行環(huán)境(注意:這里的bin、lib文件夾和jre里的bin蔬捷、lib是不同的)總的來說JDK是用于java程序的開發(fā),而jre則是只能運行class而沒有編譯的功能垄提。
eclipse
、idea等其他IDE有自己的編譯器而不是用JDK bin目錄中自帶的周拐,所以在安裝時你會發(fā)現(xiàn)他們只要求你選中jre路徑就ok了铡俐。
2.final的作用
1、final類:final類不能被繼承妥粟,因此final類的成員方法沒有機會被覆蓋审丘,默認都是final的。在設計類時候勾给,如果這個類不需要有子類滩报,類的實現(xiàn)細節(jié)不允許改變,并且確信這個類不會再被擴展播急,那么就設計為final類脓钾。 final方法不能被子類的方法覆蓋,但可以被繼承桩警。
2可训、final方法:如果一個類不允許其子類覆蓋某個方法,則可以把這個方法聲明為final方法。使用final方法的原因有二:第一握截、把方法鎖定飞崖,防止任何繼承類修改它的意義和實現(xiàn)。第二川蒙、高效蚜厉。編譯器在遇到調用final方法時候會轉入內(nèi)嵌機制长已,大大提高執(zhí)行效率畜眨。
3、final變量(常量)用final修飾的成員變量表示常量术瓮,只能被賦值一次康聂,賦值后值無法改變! final修飾的變量有三種:靜態(tài)變量胞四、實例變量和局部變量恬汁,分別表示三種類型的常量。從下面的例子中可以看出辜伟,一旦給final變量初值后氓侧,值就不能再改變了。另外导狡,final變量定義的時候约巷,可以先聲明,而不給初值旱捧,這種變量也稱為final空白独郎,無論什么情況,編譯器都確泵渡模空白final在使用之前必須被初始化氓癌。但是,final空白在final關鍵字final的使用上提供了更大的靈活性贫橙,為此贪婉,一個類中的final數(shù)據(jù)成員就可以實現(xiàn)依對象而有所不同,卻有保持其恒定不變的特征卢肃。
4谓松、final參數(shù)當函數(shù)參數(shù)為final類型時,你可以讀取使用該參數(shù)践剂,但是無法改變該參數(shù)的值鬼譬。注:父類的private成員方法是不能被子類方法覆蓋的,因此private類型的方法默認是final類型的逊脯。 final不能用于修飾構造方法优质。
3.多態(tài)
1.什么是多態(tài)
面向對象的三大特性:封裝、繼承、多態(tài)巩螃。從一定角度來看演怎,封裝和繼承幾乎都是為多態(tài)而準備的。這是我們最后一個概念避乏,也是最重要的知識點爷耀。
2.多態(tài)的定義:指允許不同類的對象對同一消息做出響應。即同一消息可以根據(jù)發(fā)送對象的不同而采用多種不同的行為方式拍皮。(發(fā)送消息就是函數(shù)調用)
實現(xiàn)多態(tài)的技術稱為:動態(tài)綁定(dynamic
binding)歹叮,是指在執(zhí)行期間判斷所引用對象的實際類型,根據(jù)其實際的類型調用其相應的方法铆帽。
3.多態(tài)的作用:消除類型之間的耦合關系咆耿。
現(xiàn)實中,關于多態(tài)的例子不勝枚舉爹橱。比方說按下 F1 鍵這個動作萨螺,如果當前在 Flash 界面下彈出的就是 AS 3 的幫助文檔;如果當前在 Word 下彈出的就是 Word 幫助愧驱;在 Windows 下彈出的就是 Windows 幫助和支持慰技。同一個事件發(fā)生在不同的對象上會產(chǎn)生不同的結果。
4.多態(tài)存在的三個必要條件一组砚、要有繼承吻商;二、要有重寫惫确;三手报、父類引用指向子類對象。
5.?多態(tài)的好處:
1.可替換性(substitutability)改化。多態(tài)對已存在代碼具有可替換性掩蛤。例如,多態(tài)對圓Circle類工作陈肛,對其他任何圓形幾何體揍鸟,如圓環(huán),也同樣工作句旱。
? 2.
可擴充性(extensibility)阳藻。多態(tài)對代碼具有可擴充性。增加新的子類不影響已存在類的多態(tài)性谈撒、繼承性腥泥,以及其他特性的運行和操作。實際上新加子類更容易獲得多態(tài)功能啃匿。例如蛔外,在實現(xiàn)了圓錐蛆楞、半圓錐以及半球體的多態(tài)基礎上,很容易增添球體類的多態(tài)性夹厌。
? 3.
接口性(interface-ability)豹爹。多態(tài)是超類通過方法簽名,向子類提供了一個共同接口矛纹,由子類來完善或者覆蓋它而實現(xiàn)的臂聋。如圖8.3 所示。圖中超類Shape規(guī)定了兩個實現(xiàn)多態(tài)的接口方法或南,computeArea()以及computeVolume()孩等。子類,如Circle和Sphere為了實現(xiàn)多態(tài)迎献,完善或者覆蓋這兩個接口方法瞎访。
? 4.
靈活性(flexibility)腻贰。它在應用中體現(xiàn)了靈活多樣的操作吁恍,提高了使用效率。
? 5.
簡化性(simplicity)播演。多態(tài)簡化對應用軟件的代碼編寫和修改過程冀瓦,尤其在處理大量對象的運算和操作時,這個特點尤為突出和重要写烤。
6.Java
中多態(tài)的實現(xiàn)方式:接口實現(xiàn)翼闽,繼承父類進行方法重寫,同一個類中進行方法重載洲炊。
4.default的含義1.default是缺省默認的意思感局,default在switch語句中不管放在哪都是從第一個case開始執(zhí)行,當所有的case都不滿足條件時,才執(zhí)行default
2.default
在最后一行時下面的break可以省略不寫暂衡,但如果沒有在最后一行default下面需要加上break询微,否則執(zhí)行完default后會繼續(xù)執(zhí)行下面的代碼直到遇到break跳出循環(huán)如:
class Demo {
public static void main(String[] args) {
int x = 5;
switch (x) {
case 1:
System.out.println("A");
break;
case 2:
System.out.println("B");
break;
default:
System.out.println("
結束");
case 3:
System.out.println("C");
break;
case 4:
System.out.println("D");
break;
}
}
輸出結果為:結束C
一、首先我們來講講:重載(Overloading)
1
狂巢、方法重載是讓類以統(tǒng)一的方式處理不同類型數(shù)據(jù)的一種手段撑毛。多個同名函數(shù)同時存在,具有不同的參數(shù)個數(shù)/類型唧领。重載Overloading是一個類中多態(tài)性的一種表現(xiàn)藻雌。
2、Java的方法重載斩个,就是在類中可以創(chuàng)建多個方法胯杭,它們具有相同的名字,但具有不同的參數(shù)和不同的定義受啥。
調用方法時通過傳遞給它們的不同參數(shù)個數(shù)和參數(shù)類型來決定具體使用哪個方法, 這就是多態(tài)性做个。
3
、重載的時候,方法名要一樣叁温,但是參數(shù)類型和個數(shù)不一樣再悼,返回值類型可以相同也可以不相同。無法以返回型別作為重載函數(shù)的區(qū)分標準膝但。
下面是重載的例子:
package c04.answer;//
這是包名
//
這是這個程序的第一種編程方法冲九,在main方法中先創(chuàng)建一個Dog類實例,然后在Dog類的構造方法中利用this關鍵字調用不同的bark方法跟束。
不同的重載方法bark是根據(jù)其參數(shù)類型的不同而區(qū)分的莺奸。
??? //注意:除構造器以外,編譯器禁止在其他任何地方中調用構造器冀宴。
package c04.answer;
public class Dog {
Dog()
{
this.bark();
}
void bark()//bark()
方法是重載方法
{
System.out.println(\"no barking!\");
this.bark(\"female\", 3.4);
}
void bark(String m,double l)//
注意:重載的方法的返回值都是一樣的灭贷,
{
System.out.println(\"a barking dog!\");
this.bark(5, \"China\");
}
void bark(int a,String n)//
不能以返回值區(qū)分重載方法,而只能以“參數(shù)類型”和“類名”來區(qū)分
{
System.out.println(\"a howling dog\");
}
public static void main(String[] args)
{
Dog dog = new Dog();
//dog.bark(); [Page]
//dog.bark(\"male\", \"yellow\");
//dog.bark(5, \"China\");
然后我們再來談談?重寫(Overriding)
1
略贮、父類與子類之間的多態(tài)性甚疟,對父類的函數(shù)進行重新定義。如果在子類中定義某方法與其父類有相同的名稱和參數(shù)逃延,我們說該方法被重寫 (Overriding)览妖。在Java中,子類可繼承父類中的方法揽祥,而不需要重新編寫相同的方法讽膏。
但有時子類并不想原封不動地繼承父類的方法,而是想作一定的修改拄丰,這就需要采用方法的重寫府树。
方法重寫又稱方法覆蓋。
2
料按、若子類中的方法與父類中的某一方法具有相同的方法名奄侠、返回類型和參數(shù)表,則新方法將覆蓋原有的方法站绪。
如需父類中原有的方法遭铺,可使用super關鍵字,該關鍵字引用了當前類的父類恢准。
3
魂挂、.子類函數(shù)的訪問修飾權限不能少于父類的;下面是重寫的例子:
概念:即調用對象方法的機制馁筐。
學習總結?:
? ? 多態(tài)性是面向對象編程的一種特性涂召,和方法無關,簡單說敏沉,就是同樣的一個方法能夠根據(jù)輸入數(shù)據(jù)的不同果正,做出不同的處理炎码,即方法的重載——有不同的參數(shù)列表(靜態(tài)多態(tài)性)
?而當子類繼承自父類的相同方法,輸入數(shù)據(jù)一樣秋泳,但要做出有別于父類的響應時潦闲,你就要覆蓋父類方法,
? ? 即在子類中重寫該方法——相同參數(shù)迫皱,不同實現(xiàn)(動態(tài)多態(tài)性)
重寫的主要優(yōu)點?是能夠定義某個子類特有的特征:
public?class?Father{
public?void?speak(){
System.out.println(Father);
}
}
public?class?Son?extends?Father{
public?void?speak(){
System.out.println("son");
}
}
這也叫做多態(tài)性歉闰,重寫方法只能存在于具有繼承關系中,重寫方法只能重寫父類非私有的方法卓起。
當上例中Father類speak()方法被private時和敬,Son類不能重寫出Father類speak()方法,此時Son類speak()方法相當與在Son類中定義的一個speak()方法戏阅。
Father類speak()方法一但被final時昼弟,無論該方法被public,protected及默認所修飾時,Son類根本不能重寫Father類speak()方法奕筐,
試圖編譯代碼時舱痘,編譯器會報錯。例:
public?class?Father{
final?public?void?speak(){
System.out.println("Father");
}
}
public?class?Son?extends?Father{
public?void?speak(){
System.out.println("son");
}
}???????//編譯器會報錯救欧;
Father類speak()方法被默認修飾時衰粹,只能在同一包中锣光,被其子類被重寫笆怠,如果不在同一包則不能重寫。
Father類speak()方法被protoeted時誊爹,不僅在同一包中蹬刷,被其子類被重寫,還可以不同包的子類重寫频丘。
重寫方法的規(guī)則?:
1办成、參數(shù)列表必須完全與被重寫的方法相同,否則不能稱其為重寫而是重載搂漠。
2迂卢、返回的類型必須一直與被重寫的方法的返回類型相同,否則不能稱其為重寫而是重載桐汤。
3而克、訪問修飾符的限制一定要大于被重寫方法的訪問修飾符(public>protected>default>private)
4、重寫方法一定不能拋出新的檢查異痴或者比被重寫方法申明更加寬泛的檢查型異常员萍。例如:
父類的一個方法申明了一個檢查異常IOException,在重寫這個方法是就不能拋出Exception,只能拋出IOException的子類異常拣度,可以拋出非檢查異常碎绎。
而重載的規(guī)則:
1螃壤、必須具有不同的參數(shù)列表;
2筋帖、可以有不責罵的返回類型奸晴,只要參數(shù)列表不同就可以了;
3日麸、可以有不同的訪問修飾符蚁滋;
4、可以拋出不同的異常赘淮;
重寫與重載的區(qū)別在于:
重寫多態(tài)性起作用辕录,對調用被重載過的方法可以大大減少代碼的輸入量,同一個方法名只要往里面?zhèn)鬟f不同的參數(shù)就可以擁有不同的功能或返回值梢卸。
用好重寫和重載可以設計一個結構清晰而簡潔的類走诞,可以說重寫和重載在編寫代碼過程中的作用非同一般.
6.鍵盤事件類KeyListener,KeyEvent
1.鍵盤事件類(KeyEvent)是容器內(nèi)的任意組件獲得焦點時,組件發(fā)生鍵擊事件蛤高,當按下蚣旱,釋放或鍵入某一個鍵時,組件對象將產(chǎn)生該事件戴陡。使用鍵盤事件必須給組件添加一個KeyListener 接口的事件處理器塞绿,該接口包含以下 3 個方法恤批。
? voidkeyPressed(KeyEvent e)
:按下按鍵時發(fā)生。
? voidkeyReleased(KeyEvent e)
:松開按鍵時發(fā)生喜庞。
? voidkeyTyped(KeyEvent e)
:敲擊鍵盤,發(fā)生在按鍵按下后延都,按鍵放開前。
2.
鍵盤事件類的方法有以下幾種晰房。
getKeyChar()
:返回在鍵盤上按下的字符。
getKeyCode()
:返回在鍵盤上按下的字符碼殊者。
getKeyLocation()
:返回鍵位置。
getKeyModifiersText()
:返回描述修飾符的文
isActionKey()
:判斷鍵是否是操作鍵幽污。
setKeyChar()
:改變鍵字符為指定的字符嚷辅。
setModifiers(int modifiers)
:改變鍵修飾符為指定的鍵修飾符距误。
paramString()
:生成事件狀態(tài)的字符串簸搞。
8.隨機產(chǎn)生26個英文字母
Math.rardom()*26+97
1.‘a(chǎn)’不是字符串哦,“a”這個才是字符串扁位!呵呵?
char c = (char)(Math.random() * 26 + 'a');
這里面其實進行了一次系統(tǒng)默認的數(shù)據(jù)類型轉換和一個強制類型數(shù)據(jù)類型轉換默認的數(shù)據(jù)類型轉換也稱為隱式的數(shù)據(jù)類型轉換當然了強制。趁俊。稱為顯式首先 Math.random() * 26 + 'a' 這里面就進行了隱式轉換
Math.random() * 26
的結果是0-26的double 那么就是一個double+char 的表達式這個時候根據(jù)規(guī)則會從小數(shù)據(jù)類型默認的轉換為大數(shù)據(jù)類型然后進行計算也就是說 0-26的一個double + 97.000000 那么它的結果當然也是一個double型最后強制的將這個double型轉為char型
總結:小-大隱式大-小顯式?
另外顯式的轉換會丟失數(shù)據(jù)域仇!比如double d=4.9; int i =(int)d;
到這里你認識 i是多少?想一下寺擂!
是4暇务!呵呵?
字母對應以外的數(shù)字就會得到字母以外的字符比如32 應該就是回車了
37 38 39 40
對應的←↑→↓了?
不過255以上得到的字符應該得到個垃圾值因為char只能存放0-255的數(shù)據(jù)
2.'a'是char 不是string
當和char相加減時,其實是和它的ASCII碼做運算
'a'
的ASCII碼是97
a~z
在ASCII碼中是連續(xù)的所有'a'加上0-25就是小寫的字母
3.這個很明顯是數(shù)據(jù)類型轉換時產(chǎn)生的疑問?
打個比方說'a'+1到底等于多少?
這里的'a'是char型1是你說的double型.這時候就要提到java中很有意思的東西了.
就是自動類型提升.char->byte->short->int->long->float->double
這里就可以看出來'a'被先轉換成了數(shù)字與1相加,然后在(char)強制轉換成了char型變成了字母b
在實際開發(fā)中LayoutInflater這個類還是非常有用的怔软,它的作用類似于findViewById()垦细。不同點是LayoutInflater是用來找res/layout/下的xml布局文件,并且實例化挡逼;而findViewById()是找xml布局文件下的具體widget控件(如Button括改、TextView等)。具體作用: 1家坎、對于一個沒有被載入或者想要動態(tài)載入的界面嘱能,都需要使用LayoutInflater.inflate()來載入;
2虱疏、對于一個已經(jīng)載入的界面惹骂,就可以使用Activiyt.findViewById()方法來獲得其中的界面元素。
LayoutInflater 是一個抽象類做瞪,在文檔中如下聲明:
publicabstractclass?LayoutInflater?extends?Object
獲得 LayoutInflater 實例的三種方式
1.LayoutInflater
? inflater = getLayoutInflater();? //調用Activity的getLayoutInflater()
2.LayoutInflater? localinflater =(LayoutInflater)context.getSystemService
???????????(Context.LAYOUT_INFLATER_SERVICE);
3.LayoutInflater? inflater = LayoutInflater.from(context);
其實对粪,這三種方式本質是相同的,從源碼中可以看出:
getLayoutInflater():
Activity 的 getLayoutInflater() 方法是調用 PhoneWindow 的getLayoutInflater()方法穿扳,看一下該源代碼:
public?PhoneWindow(Context context) {??????????super(context);?????????? mLayoutInflater = LayoutInflater.from(context);??}
可以看出它其實是調用? LayoutInflater.from(context)衩侥。
LayoutInflater.from(context):
publicstaticLayoutInflater from(Context context) {? ????? LayoutInflater LayoutInflater = ?????????????? (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);if(LayoutInflater ==null)? {thrownewAssertionError("LayoutInflater? not found."); ????? }returnLayoutInflater;? ??}
可以看出它其實調用? context.getSystemService()。
結論:所以這三種方式最終本質是都是調用的Context.getSystemService()矛物。
inflate 方法?通過 sdk 的 api 文檔,可以知道該方法有以下幾種過載形式跪但,返回值均是 View 對象履羞,如下:
public?View inflate? (int?resource, ViewGroup root)??public?View inflate? (XmlPullParser parser, ViewGroup? root)????public?View inflate (XmlPullParser parser,? ViewGroup? root,?boolean?attachToRoot)????public?View? inflate (int?resource, ViewGroup root,?booleanattachToRoot)
示意代碼:
LayoutInflater inflater =? (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);????View? view = inflater.inflate(R.layout.custom,?(ViewGroup)findViewById(R.id.test));????//EditText? editText = (EditText)findViewById(R.id.content);// error??EditText? editText = (EditText)view.findViewById(R.id.content);
對于上面代碼,指定了第二個參數(shù)? ViewGroup root屡久,當然你也可以設置為 null 值忆首。
注意:
·inflate方法與 findViewById 方法不同被环;
·inflater 是用來找 res/layout下的 xml 布局文件,并且實例化浸锨;
·findViewById() 是找具體 xml 布局文件中的具體 widget 控件(如:Button、TextView 等)柱搜。
10.android:gravity與android:layout_gravity。
他們的區(qū)別在于:
android:gravity 屬性是對該view中內(nèi)容的限定.比如一個button 上面的text. 你可以設置該text 相對于view的靠左聪蘸,靠右等位置.
android:layout_gravity
是用來設置該view相對與父view 的位置.比如一個button 在linearlayout里健爬,你想把該button放在linearlayout里靠左、靠右等位置就可以通過該屬性設置.
即android:gravity用于設置View中內(nèi)容相對于View組件的對齊方式阱持,而android:layout_gravity用于設置View組件相對于Container的對齊方式魔熏。
12.進度條變化函數(shù)
// 科普小知識,整形除以整形是整形镶骗,100以內(nèi)肯定是0.幾躲雅,所以用整形除以(float)型,結果為0.幾幾強制轉換為int型*100加百分號就是百分比了
textv.setText("播放進度"+ (int)(first / (float)max * 100) +"%"+"緩存進度"
??????????????????????????? +(int) (second) / (float) max * 100 +"%");
第一種事50% 第二種是80.0%
15.構造方法作用
構造方法就是與類同名的那個方法相寇,它的作用是可以用來初始化
class Person //
人類{
public Person(String n,int a) //
構造方法
?{
?name = n; age = a;
}
?private string name;
?private int age;
}
static void main(String[] args){
Person p = new Person("
張三",14);//這就是作用
}
??? new
一個對象的時候要用到構造函數(shù),例如Hello hello = new Hello();這時調用的是Hello的無參數(shù)構造方法;
Hello hello = new Hello("hi");這個是調用Hello有參數(shù)構造方法,
在JAVA中如果不寫構造方法的話,會默認加上一個無參數(shù)的構造方法,但是如果已經(jīng)有了一個有參數(shù)的構造方法,那么無參數(shù)的構造方法就不會默認被加上.如果Hello類中已經(jīng)有了一個有參數(shù)的構造方法,這時再使用 Hello hello = new Hello();來創(chuàng)建對象的時候就會出錯,這就是為什么書上要強調寫了有參數(shù)的構造方法就最好加一個無參數(shù)的構造方法.
1.比如說一個Class類中有很多屬性,你在測試類中要用到時唤衫,如果你只有一個無參的構造函數(shù)绵脯,那么你使用這個類的并且輸出類的屬性值的時候,你就需要new 一個對象 然后用對象.屬性 給他賦值赃承,但是如果你有一個帶參數(shù)的構造函數(shù) 那么你在調用他的時候就只需要new一下的同時就給它賦值悴侵,
Class class=new Class
(“屬性值1”,“屬性值2”)抓于;這樣就可以了!方便了很多驮宴,這樣就是初始化!
2.?
當你的所用來創(chuàng)建對象的類中的有些方法為private(私有方法)堵泽,在其他類中恢总,你即使創(chuàng)建該類的實例對象,你還是不能調用那些私有的方法和屬性纹安,這時砂豌,你可以通過構造方法去調用該類中的私有方法和設置屬性,或者輸出塔粒。
當你的類中筐摘,你并沒有寫構造方法時,系統(tǒng)會自動為你添加一個無參的構造方法? public 類名(){}
就是默認在你的類中有這么一個構造方法