Java基礎(chǔ)之?dāng)?shù)據(jù)類型痊末、內(nèi)存蚕苇、修飾符、代碼塊

Java 數(shù)據(jù)類型

  • 基本數(shù)據(jù)類型

    • 數(shù)值:int凿叠、short涩笤、long
    • 字符:char
    • 布爾:boolean
  • 引用數(shù)據(jù)類型

    • class(類)
    • interface(接口)
    • 數(shù)組[]
  • 所占字節(jié)數(shù)1 byte= 8 bits

    • int:4字節(jié)
    • char: 規(guī)定2字節(jié)。若使用UTF-8編碼盒件,數(shù)字和英文等占1個(gè)字節(jié)蹬碧,中文3個(gè)字節(jié);若用GBK編碼炒刁,中文是2個(gè)字節(jié)
    • float:4字節(jié)
    • short:2字節(jié)
    • long:8字節(jié)
    • double:8字節(jié)

注意:Java中整數(shù)默認(rèn)的是Int恩沽,小數(shù)默認(rèn)double

float f = 2.3; // 2.3默認(rèn)為double,不能轉(zhuǎn)為float翔始,可能丟失精度
float f = 2.3f; // true 末尾加f罗心,表示這是一個(gè)float型

long l = 12343565475989778034; // false, 默認(rèn)為int,但是超出了范圍
long l = 12343565475989778034l; // 末尾加l绽昏,表示這是long型

但是如下代碼第一行是正確的协屡。

byte b = 4; // 默認(rèn)int,但經(jīng)過檢查4是在byte型范圍內(nèi)的全谤,發(fā)生int -> byte的隱式強(qiáng)轉(zhuǎn)
b =  b + 3; // false肤晓,和為int,int型不能賦值給byte
// aa和bb都是變量认然,其和不能確定是否在范圍內(nèi)
byte aa = 3;
byte bb = 4;
byte cc = aa + bb; // false

byte cc = 3 + 4; // 但若明確給出常量补憾,則true
  • 變量(局部)僅在一對{}內(nèi)有效,然后被銷毀卷员。局部代碼塊盈匾,可以決定局部變量的生命周期。
{
  int a = 3;
}
System.out.println(a); // false, 已經(jīng)出了這對{}毕骡,被銷毀了
  • switch語句
// 若不加break削饵,從匹配到的那個(gè)case開始,之后如果都沒break未巫,都執(zhí)行窿撬,不會跳出
switch (expression) {
  case x: 
    code;
    break;
  case y:
    code;
    break;
  default:
    code;
    break
}

函數(shù)重載和重寫(覆寫@Override)

  • 函數(shù)重載
    • 同一個(gè)類中
    • 同名
    • 參數(shù)不同,或者類型不同
    • 函數(shù)重載和返回類型無關(guān)叙凡!
  • 函數(shù)覆寫(@Override)
    • 繼承了父類或者實(shí)現(xiàn)了借口劈伴,有事需要Override父類的方法,定義子類特有的方法握爷。
    • 返回類型跛璧,參數(shù)列表严里,函數(shù)名都一致。修飾符一般也一致追城,總的來說刹碾,除了內(nèi)部實(shí)現(xiàn)全部一樣。

數(shù)組--引用類型

  • 數(shù)組的定義
int[] a = {1, 23, 3};
int[] b = new int[4]; // 此種定義方式必須指定數(shù)組長度
int[] c = new int[]{1, 2, 3}; // 一般不這么寫

  • 二維數(shù)組
int[][] arr2= new int[3][]; // 至少給第一維指定長度
// 每行的列數(shù)相同,3行2列
int[][] = arr2 = new int[3][2];
// 每行列數(shù)不一樣
int[][] arr2= new int[3][];
arr2[0] = new int[2]; // 第1行
arr2[1] = new int[3]; // 第2行
arr2[2] = new int[4]; // 第3行

棧內(nèi)存和堆內(nèi)存

  • 棧內(nèi)存:存儲的是局部對象漓柑,作用域結(jié)束就被釋放
  • 堆內(nèi)存:存儲的是數(shù)組和對象教硫,凡是new建立的都在堆內(nèi)存中
int[] arr = new int[3];
// 這句右邊new一個(gè)引用數(shù)據(jù)到堆內(nèi)存,給三個(gè)值默認(rèn)初始化為0
// a指向這個(gè)數(shù)組對象辆布,即地址。也可以說new出來的數(shù)組把它的地址給了arr
// arr = null; 表示空茶鉴,不綁定地址了

int[] a = new int[3];
int[] b = new int[5];
a = b; // 把b的地址綁定到a锋玲,a和b都指向b的地址了

System.out.println(arr); // 打印的是地址,格式為"[I@number",表示int涵叮,number為16進(jìn)制表示的地址

訪問修飾符

  • public:任何類任何包都可以訪問
  • private:僅限于當(dāng)前類中訪問
  • default(什么修飾符都不寫惭蹂,默認(rèn)):同一個(gè)包的都可以訪問,不同包的子類也不能訪問
  • protected:同一個(gè)包割粮,不同包只有子類可訪問盾碗。(范圍比default大一點(diǎn))

public static void main(String args[])

這是固定格式!

為什么必須這樣寫舀瓢?

  • public:外界(JVM)調(diào)用main()函數(shù)廷雅,為了方便訪問,設(shè)為最高權(quán)限

  • static:靜態(tài)函數(shù)京髓,非類成員函數(shù)航缀,無需new新對象就可通過類名.main()直接調(diào)用。

  • void:main()函數(shù)就是執(zhí)行任務(wù)堰怨,不需要返回什么值芥玉。

  • main():JVM識別main()字樣,當(dāng)滿足public static void main(String args[])這樣的寫法時(shí)备图,則把其當(dāng)成程序的入口開始執(zhí)行灿巧。

  • String args[]:命令行參數(shù),規(guī)定必須要有

public static void abc(String args[]) // 函數(shù)名不是main揽涮,不是主函數(shù)
public static void main() // 缺少命令行參數(shù) String args[]也不是主函數(shù)
static void abc(String args[]) // 不是主函數(shù)抠藕,一定要是public static void main(String args[])

靜態(tài)static

靜態(tài)函數(shù)

靜態(tài)函數(shù)一般作為工具函數(shù),里面不可以用類成員绞吁,只能全用靜態(tài)成員或者方法幢痘,但是成員函數(shù)卻可以用靜態(tài)數(shù)據(jù)和方法。

靜態(tài)變量

static int money這樣就是一個(gè)靜態(tài)數(shù)據(jù)了家破⊙账担可以被很多對象共享购岗,對象A改變了a,對象B中的a也改變了门粪。大家用同一份money喊积。

package Test;


public class StaticDemo {

    private static int money = 100;

    public int getMonney() {
        return money;
    }

    public void useMoney() {
        money--;
    }

    public static void main(String[] args) {
        StaticDemo a = new StaticDemo();
        StaticDemo b = new StaticDemo();
        // a用了一塊
        a.useMoney();
        // 還剩99
        System.out.println(a.getMonney());
        // b用的是同一份money
        b.useMoney();
        // 還剩98
        System.out.println(b.getMonney());
    }
}
  • 成員變量和靜態(tài)變量
    1. 成員變量隨對象的建立而建立,隨對象消亡而消亡玄妈。< -- > 靜態(tài)變量隨著(和對象即實(shí)例區(qū)別開)的加載而加載乾吻,隨類的消亡而消亡。即靜態(tài)成員是先于實(shí)例存在的拟蜻,還沒new出對象就存在了绎签。
    2. 成員對象只能是new出新實(shí)例后調(diào)用。< -- > 靜態(tài)成員可以直接使用酝锅,類名.靜態(tài)變量即可诡必。
    3. 成員變量被稱為實(shí)例變量。< -- > 靜態(tài)變量被稱為類 變量搔扁。
    4. 成員變量位于堆內(nèi)存的對象中爸舒,是對象的特有數(shù)據(jù)。 < -- > 靜態(tài)變量位于方法區(qū)(的靜態(tài)區(qū))中稿蹲,也叫對象的共享數(shù)據(jù)扭勉。

Q:static為何不能調(diào)用非靜態(tài)方法或者數(shù)據(jù)?

A:因?yàn)殪o態(tài)數(shù)據(jù)先于對象就已經(jīng)產(chǎn)生苛聘,成員變量還不存在涂炎,不能訪問。同理static函數(shù)中不能出現(xiàn)this焰盗、super關(guān)鍵字璧尸。

Q: 什么時(shí)候用static?

A:1. 靜態(tài)變量熬拒,共享數(shù)據(jù)時(shí)爷光,各個(gè)對象都使用同一個(gè)數(shù)據(jù),不必作為對象特有的數(shù)據(jù)時(shí)候澎粟。如每個(gè)學(xué)生的姓名是特有的蛀序,但是每個(gè)學(xué)生可以共用同一個(gè)圖書館。

  1. 靜態(tài)方法活烙,無需訪問類成員時(shí)(非靜態(tài))徐裸,就可以定義為靜態(tài),一般為工具函數(shù)啸盏。

各種代碼塊

public class Abc {
  
  // 構(gòu)造代碼塊重贺,沒有static。每new一個(gè)對象,就執(zhí)行一次气笙,故稱為構(gòu)造代碼塊
  // 針對不同的對象次企,進(jìn)行相同的初始化,而構(gòu)造函數(shù)對不同的對象進(jìn)行不同的初始化潜圃,如給不同的人傳入不同的名字和年齡進(jìn)行初始化
  {
    System.out.println("我是構(gòu)造代碼塊")
  }
  // 構(gòu)造函數(shù)
  Abc() {
    System.out.pritnln("我是構(gòu)造函數(shù)缸棵,后于構(gòu)造代碼塊執(zhí)行");
  }
  // 靜態(tài)代碼塊最先執(zhí)行谭期,不論放在main()前面還是后面堵第,都先于main加載,且只執(zhí)行一次
  static {
  System.out.println("我最先");
}

  public static void main(String args[]) {
    Abc a = new Abc(); // 先進(jìn)入先構(gòu)造代碼塊隧出,
    // 以下是局部代碼塊踏志,b只在這對{}內(nèi)有效
    {
      int b = 3;
    }
    System.out.println(b); // false,b已經(jīng)被釋放
  }
}

U偷伞U帷!總的來說赏廓,執(zhí)行順序:static代碼塊 --> main() --> 構(gòu)造代碼塊 --> 構(gòu)造方法


by @sunhaiyu

2016.12.8

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市傍妒,隨后出現(xiàn)的幾起案子幔摸,更是在濱河造成了極大的恐慌,老刑警劉巖颤练,帶你破解...
    沈念sama閱讀 217,542評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件既忆,死亡現(xiàn)場離奇詭異,居然都是意外死亡嗦玖,警方通過查閱死者的電腦和手機(jī)患雇,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宇挫,“玉大人苛吱,你說我怎么就攤上這事∑鞅瘢” “怎么了翠储?”我有些...
    開封第一講書人閱讀 163,912評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長橡疼。 經(jīng)常有香客問我援所,道長,這世上最難降的妖魔是什么欣除? 我笑而不...
    開封第一講書人閱讀 58,449評論 1 293
  • 正文 為了忘掉前任住拭,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘滔岳。我一直安慰自己杠娱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評論 6 392
  • 文/花漫 我一把揭開白布澈蟆。 她就那樣靜靜地躺著墨辛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪趴俘。 梳的紋絲不亂的頭發(fā)上睹簇,一...
    開封第一講書人閱讀 51,370評論 1 302
  • 那天,我揣著相機(jī)與錄音寥闪,去河邊找鬼太惠。 笑死,一個(gè)胖子當(dāng)著我的面吹牛疲憋,可吹牛的內(nèi)容都是我干的凿渊。 我是一名探鬼主播,決...
    沈念sama閱讀 40,193評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼缚柳,長吁一口氣:“原來是場噩夢啊……” “哼埃脏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起秋忙,我...
    開封第一講書人閱讀 39,074評論 0 276
  • 序言:老撾萬榮一對情侶失蹤彩掐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后灰追,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體堵幽,經(jīng)...
    沈念sama閱讀 45,505評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評論 3 335
  • 正文 我和宋清朗相戀三年弹澎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了朴下。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,841評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡苦蒿,死狀恐怖殴胧,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情刽肠,我是刑警寧澤溃肪,帶...
    沈念sama閱讀 35,569評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站音五,受9級特大地震影響惫撰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜躺涝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評論 3 328
  • 文/蒙蒙 一厨钻、第九天 我趴在偏房一處隱蔽的房頂上張望扼雏。 院中可真熱鬧,春花似錦夯膀、人聲如沸诗充。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蝴蜓。三九已至,卻和暖如春俺猿,著一層夾襖步出監(jiān)牢的瞬間茎匠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評論 1 269
  • 我被黑心中介騙來泰國打工押袍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留诵冒,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,962評論 2 370
  • 正文 我出身青樓谊惭,卻偏偏與公主長得像汽馋,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子圈盔,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法豹芯,類相關(guān)的語法,內(nèi)部類的語法驱敲,繼承相關(guān)的語法告组,異常的語法,線程的語...
    子非魚_t_閱讀 31,631評論 18 399
  • 一:java概述:1癌佩,JDK:Java Development Kit,java的開發(fā)和運(yùn)行環(huán)境便锨,java的開發(fā)工...
    ZaneInTheSun閱讀 2,650評論 0 11
  • (一)Java部分 1围辙、列舉出JAVA中6個(gè)比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨(dú)云閱讀 7,104評論 0 62
  • Win7下如何打開DOS控制臺? a:開始--所有程序--附件--命令提示符 b:開始--搜索程序和文件--cmd...
    逍遙嘆6閱讀 1,595評論 4 12
  • 淚盡成陌 戀雪讀書憧憬小貓爵士放案,樹梢明月橋上樹影清風(fēng)靜謐姚建。 向日葵,喜歡微笑吱殉,每天朝著太陽歡樂掸冤,從不把自己的不開心...
    淚盡成陌閱讀 1,071評論 0 0