數(shù)據(jù)類型蕊连、常量渡讼、對(duì)象和類、Java 修飾符苛谷、位運(yùn)算符
命名規(guī)則
包:com.trvqd(域名倒過來辅鲸,所有字母小寫)
類或接口:HelloWorld(駝峰,首字母大寫)
方法和變量:helloWorld(駝峰腹殿,首字母小寫)
常量:NAME 独悴、 GET_PLAYER(大寫,多個(gè)單詞下劃線分隔)
數(shù)據(jù)類型
-
基本數(shù)據(jù)類型
Java語言基本類型分為數(shù)值型(整數(shù)類型:byte锣尉,short刻炒,int,long; 浮點(diǎn)類型:float自沧,double)坟奥,字符型(char),布爾型(boolean)拇厢。
byte:
- byte 數(shù)據(jù)類型是8位(bit)爱谁、1字節(jié)、有符號(hào)的孝偎,以二進(jìn)制補(bǔ)碼表示的整數(shù)访敌;
- 最小值是 -128(-2^7);
- 最大值是 127(2^7-1)衣盾;
- 默認(rèn)值是 0寺旺;
- byte 類型用在大型數(shù)組中節(jié)約空間,主要代替整數(shù)势决;
- 例子:byte a = 100阻塑,byte b = -50。
short:
- short 數(shù)據(jù)類型是 16 位(bit)果复、2字節(jié)陈莽、有符號(hào)的以二進(jìn)制補(bǔ)碼表示的整數(shù)
- 最小值是 -32768(-2^15);
- 最大值是 32767(2^15 - 1);
- 默認(rèn)值是 0传透;
- Short 數(shù)據(jù)類型也可以像 byte 那樣節(jié)省空間耘沼;
- 例子:short s = 1000极颓,short r = -20000朱盐。
int:
- int 數(shù)據(jù)類型是32位(bit)、4字節(jié)菠隆、有符號(hào)的以二進(jìn)制補(bǔ)碼表示的整數(shù)兵琳;
- 最小值是 -2,147,483,648(-2^31);
- 最大值是 2,147,483,647(2^31 - 1)骇径;
- 默認(rèn)值是 0 躯肌;
- 一般地整型變量默認(rèn)為 int 類型;
- 例子:int a = 100000, int b = -200000破衔。
long:
- long 數(shù)據(jù)類型是 64 位(bit)清女、8字節(jié)、有符號(hào)的以二進(jìn)制補(bǔ)碼表示的整數(shù)晰筛;
- 最小值是 -9,223,372,036,854,775,808(-2^63)嫡丙;
- 最大值是 9,223,372,036,854,775,807(2^63 -1);
- 默認(rèn)值是 0L读第;
- 這種類型主要使用在需要比較大整數(shù)的系統(tǒng)上曙博;
- 例子: long a = 100000L,Long b = -200000L怜瞒。
float:
- float 數(shù)據(jù)類型是單精度父泳、32位、符合IEEE 754標(biāo)準(zhǔn)的浮點(diǎn)數(shù)吴汪;
- float 在儲(chǔ)存大型浮點(diǎn)數(shù)組的時(shí)候可節(jié)省內(nèi)存空間惠窄;
- 默認(rèn)值是 0.0f;
- 浮點(diǎn)數(shù)不能用來表示精確的值漾橙,如貨幣杆融;
- 例子:float f1 = 234.5f。
double:
- double 數(shù)據(jù)類型是雙精度近刘、64 位擒贸、符合IEEE 754標(biāo)準(zhǔn)的浮點(diǎn)數(shù);
- 浮點(diǎn)數(shù)的默認(rèn)類型為double類型觉渴;
- double類型同樣不能表示精確的值介劫,如貨幣;
- 默認(rèn)值是 0.0d案淋;
- 例子:double d1 = 123.4座韵。
boolean:
- boolean數(shù)據(jù)類型表示一位的信息;
- 只有兩個(gè)取值:true 和 false;
- 這種類型只作為一種標(biāo)志來記錄 true/false 情況誉碴;
- 默認(rèn)值是 false宦棺;
- 例子:boolean one = true。
char:
- char類型是一個(gè)單一的 16 位 Unicode 字符黔帕;
- 最小值是 \u0000(即為0)代咸;
- 最大值是 \uffff(即為65,535);
- char 數(shù)據(jù)類型可以儲(chǔ)存任何字符成黄;
- 例子:char letter = 'A';呐芥。
整型、實(shí)型(常量)奋岁、字符型數(shù)據(jù)可以混合運(yùn)算思瘟。運(yùn)算中,不同類型的數(shù)據(jù)先轉(zhuǎn)化為同一類型闻伶,然后進(jìn)行運(yùn)算滨攻。
轉(zhuǎn)換從低級(jí)到高級(jí)。
低 --------------------------------------------> 高
byte,short,char—> int —> long—> float —> double
-
引用數(shù)據(jù)類型
類(class)蓝翰,接口(interface)光绕,數(shù)組([])
常量
常量在程序運(yùn)行時(shí)是不能被修改的。
在 Java 中使用 final 關(guān)鍵字來修飾常量霎箍。
final double PI = 3.1415927;
對(duì)象和類
一個(gè)類中可以包含以下類型變量:
局部變量:在方法奇钞、構(gòu)造方法或者語句塊中定義的變量被稱為局部變量。變量聲明和初始化都是在方法中漂坏,方法結(jié)束后景埃,變量就會(huì)自動(dòng)銷毀。
成員變量(實(shí)例變量):成員變量是定義在類中顶别,獨(dú)立于方法之外的變量谷徙,沒有 static 修飾。這種變量在創(chuàng)建對(duì)象的時(shí)候?qū)嵗币铩3蓡T變量可以被類中方法完慧、構(gòu)造方法和特定類的語句塊訪問。
類變量(靜態(tài)變量):獨(dú)立于方法之外的變量剩失,用 static 修飾屈尼。
public class Variable{
static int allClicks=0; // 類變量
String str="hello world"; // 實(shí)例變量
public void method(){
int i =0; // 局部變量
}
}
成員變量和類變量的區(qū)別:
1、兩個(gè)變量的生命周期不同
成員變量隨著對(duì)象的創(chuàng)建而存在拴孤,隨著對(duì)象的回收而釋放脾歧。
靜態(tài)變量隨著類的加載而存在,隨著類的消失而消失演熟。
2鞭执、調(diào)用方式不同
成員變量只能被對(duì)象調(diào)用司顿。
靜態(tài)變量可以被對(duì)象調(diào)用,還可以被類名調(diào)用兄纺。
3大溜、數(shù)據(jù)存儲(chǔ)位置不同
成員變量存在于堆內(nèi)存中。
靜態(tài)變量存在于方法區(qū)中估脆。
-
構(gòu)造方法
每個(gè)類都有構(gòu)造方法钦奋。如果沒有顯式地為類定義構(gòu)造方法,Java編譯器將會(huì)為該類提供一個(gè)默認(rèn)構(gòu)造方法旁蔼。
在創(chuàng)建一個(gè)對(duì)象的時(shí)候锨苏,至少要調(diào)用一個(gè)構(gòu)造方法疙教。構(gòu)造方法的名稱必須與類同名棺聊,一個(gè)類可以有多個(gè)構(gòu)造方法。
public class Puppy{
public Puppy(){
}
public Puppy(String name){
// 這個(gè)構(gòu)造器僅有一個(gè)參數(shù):name
}
}
注:1贞谓、如果一個(gè)類中沒有定義構(gòu)造方法限佩,系統(tǒng)會(huì)默認(rèn)提供一個(gè)空參的構(gòu)造方法;
2裸弦、如果一個(gè)類中定義了有參的構(gòu)造方法祟同,系統(tǒng)不會(huì)再提供空參的構(gòu)造方法,需要手動(dòng)定義理疙;
-
創(chuàng)建對(duì)象
對(duì)象是根據(jù)類創(chuàng)建的晕城。在Java中,使用關(guān)鍵字new來創(chuàng)建一個(gè)新的對(duì)象窖贤。創(chuàng)建對(duì)象需要以下三步:
聲明:聲明一個(gè)對(duì)象砖顷,包括對(duì)象名稱和對(duì)象類型。
實(shí)例化:使用關(guān)鍵字new來創(chuàng)建一個(gè)對(duì)象赃梧。
初始化:使用new創(chuàng)建對(duì)象時(shí)滤蝠,會(huì)調(diào)用構(gòu)造方法初始化對(duì)象。
public class Puppy{
public Puppy(String name){
//這個(gè)構(gòu)造器僅有一個(gè)參數(shù):name
System.out.println("小狗的名字是 : " + name );
}
public static void main(String []args){
// 下面的語句將創(chuàng)建一個(gè)Puppy對(duì)象
Puppy myPuppy = new Puppy( "tommy" );
}
}
Java 修飾符
修飾符用來定義類授嘀、方法或者變量物咳,通常放在語句的最前端。
-
訪問控制修飾符
Java中蹄皱,可以使用訪問控制符來保護(hù)對(duì)類览闰、變量、方法和構(gòu)造方法的訪問巷折。
default (即缺省压鉴,什么也不寫): 在同一包內(nèi)可見,不使用任何修飾符盔几。使用對(duì)象:類晴弃、接口、變量、方法上鞠。
private : 在同一類內(nèi)可見际邻。使用對(duì)象:變量、方法芍阎。 注意:不能修飾類(外部類)
public : 對(duì)所有類可見世曾。使用對(duì)象:類、接口谴咸、變量轮听、方法
protected: 對(duì)同一包內(nèi)的類和所有子類可見。使用對(duì)象:變量岭佳、方法血巍。 注意:不能修飾類(外部類)。
訪問控制 訪問控制和繼承
請(qǐng)注意以下方法繼承的規(guī)則:
1.父類中聲明為 public 的方法在子類中也必須為 public珊随。
2.父類中聲明為 protected 的方法在子類中要么聲明為 protected述寡,要么聲明為 public,不能聲明為 private叶洞。
3.父類中聲明為 private 的方法鲫凶,不能夠被繼承。非訪問修飾符
static關(guān)鍵字
static關(guān)鍵字特點(diǎn):
a. 隨著類的加載而加載衩辟;
b. 優(yōu)先于對(duì)象存在螟炫;
c. 被類的所有對(duì)象共享;
d. 可以通過類名調(diào)用艺晴;
static的注意事項(xiàng):
1)在靜態(tài)方法中沒有this關(guān)鍵字
靜態(tài)是隨著類的加載而加載昼钻,this是隨著對(duì)象的創(chuàng)建而存在;
2)非靜態(tài)的成員方法可以訪問靜態(tài)成員變量财饥,靜態(tài)方法不能訪問非靜態(tài)的成員變量(靜態(tài)只能訪問靜態(tài))换吧;
3)靜態(tài)對(duì)象和靜態(tài)方法可以通過對(duì)象調(diào)用,也可以使用類名調(diào)用钥星,推薦使用類名調(diào)用沾瓦;
final 修飾符
1.final 變量
final 變量能被顯式地初始化并且只能初始化一次。被聲明為 final 的對(duì)象的引用不能指向不同的對(duì)象谦炒。但是 final 對(duì)象里的數(shù)據(jù)可以被改變贯莺。也就是說 final 對(duì)象的引用不能改變,但是里面的值可以改變宁改。
final 修飾符通常和 static 修飾符一起使用來創(chuàng)建類常量缕探。
2.final 方法
類中的 final 方法可以被子類繼承,但是不能被子類修改还蹲。
聲明 final 方法的主要目的是防止該方法的內(nèi)容被修改爹耗。
3.final 類
final 類不能被繼承耙考,沒有類能夠繼承 final 類的任何特性。
abstract 修飾符
1.抽象類
抽象類不能用來實(shí)例化對(duì)象潭兽,聲明抽象類的唯一目的是為了將來對(duì)該類進(jìn)行擴(kuò)充倦始。
2.抽象方法
抽象方法是一種沒有任何實(shí)現(xiàn)的方法,該方法的的具體實(shí)現(xiàn)由子類提供山卦。
任何繼承抽象類的子類必須實(shí)現(xiàn)父類的所有抽象方法鞋邑,除非該子類也是抽象類。
如果一個(gè)類包含若干個(gè)抽象方法账蓉,那么該類必須聲明為抽象類枚碗。抽象類可以不包含抽象方法。
synchronized 修飾符
synchronized 關(guān)鍵字聲明的方法同一時(shí)間只能被一個(gè)線程訪問铸本。
transient 修飾符
序列化的對(duì)象包含被 transient 修飾的實(shí)例變量時(shí)肮雨,java 虛擬機(jī)(JVM)跳過該特定的變量君纫。
該修飾符包含在定義變量的語句中私沮,用來預(yù)處理類和變量的數(shù)據(jù)類型。
public transient int limit = 55; // 不會(huì)持久化
public int b; // 持久化
volatile 修飾符
volatile 修飾的成員變量在每次被線程訪問時(shí),都強(qiáng)制從共享內(nèi)存中重新讀取該成員變量的值汪茧。而且,當(dāng)成員變量發(fā)生變化時(shí)限番,會(huì)強(qiáng)制線程將變化值回寫到共享內(nèi)存舱污。這樣在任何時(shí)刻,兩個(gè)不同的線程總是看到某個(gè)成員變量的同一個(gè)值弥虐。
一個(gè) volatile 對(duì)象引用可能是 null扩灯。
位運(yùn)算符
<<n 向左移n次,相當(dāng)于乘以2的n次方
>>n 向右移n次霜瘪,相當(dāng)于除以2的n次方
>>> 無符號(hào)右移和>> 有符號(hào)右移區(qū)別:
>>>:無論高位是0還是1珠插,移動(dòng)后都用0補(bǔ)位
>>:高位是0就補(bǔ)0,高位是1就補(bǔ)1
public class Test {
public static void main(String[] args) {
int a = 60; /* 60 = 0011 1100 */
int b = 13; /* 13 = 0000 1101 */
int c = 0;
c = a & b; /* 12 = 0000 1100 */
System.out.println("a & b = " + c );
c = a | b; /* 61 = 0011 1101 */
System.out.println("a | b = " + c );
c = a ^ b; /* 49 = 0011 0001 */
System.out.println("a ^ b = " + c );
c = ~a; /*-61 = 1100 0011 */
System.out.println("~a = " + c );
c = a << 2; /* 240 = 1111 0000 */
System.out.println("a << 2 = " + c );
c = a >> 2; /* 15 = 1111 */
System.out.println("a >> 2 = " + c );
c = a >>> 2; /* 15 = 0000 1111 */
System.out.println("a >>> 2 = " + c );
}
}