# JAVA之旅(一)——基本常識,JAVA概念,開發工具,關鍵字/標識符,變量/常量,進制/進制轉換,運算符,三元運算
* * *
> Android老鳥重新學一遍JAVA是什么感覺?枯燥啊,乏味啊,而且歸納寫博客,都是很痛苦的事情,但是程序之路這么長,你必須精通的不能再精通一門語言才行(有點說大了哈),但是最起碼你要如魚得水吧,我準備的資料有:
* JAVA編程思想
* 深入淺出JAVA
* 黑馬,傳智,慕課,極客學院等…的視頻
* Google搜索
> 我們既然是重新學一遍,那我們盡量就是用記事本去敲代碼好了,這里我用notepad++,好了,我們直接開始吧!
## 一.基本常識
### 1.什么是軟件?
* 軟件:一系列按照特定組織的計算機數據和指令的集合
* 常用的軟件:系統軟件
* DOS windows Linux等
* 應用軟件:QQ,微信等
* 軟件的出現實現了人與計算機之間更好的交互交互方式
* 圖形化界面:很容易上手的,GUI圖像
* 命令行交互:需要控制臺,輸入特定的指令,讓計算機完成一些操作,比較麻煩
### 2.CMD命令
> 這里我列舉一些常見的命令,大家以后工作用的上的
* dir:列出當前目錄下的文件及文件夾(和ls類似)
* md:創建目錄
* rd:刪除目錄
* cd: 進入指定目錄
* cd ..:退回到上級目錄
* cd/:退回到根目錄
* del:刪除文件
* exit:退出cmd
### 3.計算機語言
> 通過Dos命令演示,我們知道操作計算機就是和計算機進行一些交互,像說話一樣,我們叫他做什么,他就做什么,前提是你說的指令他能識別,這就是計算機語言,計算機語言種類眾多,有C/C++ ,C#,等,而我們要學習的語言是JAVA
## 二.JAVA概念
### 1.什么是JAVA
> JAVA是sun公司在1995年推出的一門高級編程語言,核心思想就是面向對象,隨著JAVA技術在web端的不斷成熟,已經成為web人員首選的語言,而且簡單易學,安全可靠,跨平臺的編程序言
### 2.三種架構
* J2EE 企業版
> 是為開發企業環境下的應用程序提供的一套解決方案,包含Servlet,JSP,主要針對的是web應用程序
* J2SE 標準版
> 是為開發普通和商務應用給出的解決方案,這也是最基礎的,主要做一些小程序
* J2ME 家庭版
> 主要用來開發電子消費產品和嵌入式設備的解決方案,主要應用于小型電子消費類產品,比如手機中的應用程序等?
> JAVA5.0 里程碑的更新后更名:JAVAEE,JAVASE,JAVAME
### 3.JAVA特性
> java語言的特點,首先說一下跨平臺性
* 什么是跨平臺性??
通過java語言編寫的應用程序在不同的系統平臺上都可用運行
* 原理是什么??
只需要安裝JVM(虛擬機),就可以(JDK中有)
## 三.開發工具
* JDK:[http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html](http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html)
> 下載安裝就不說了,多說無益
* 配置JAVA環境
> 不多說
> 我們要驗證是否安裝成功了,只要在CMD下輸入
* java jdk
* javac 環境
* java -version 版本
## 四.Hello JAVA
> 這里我就不用開發工具了,我就用notepad++來寫了?
> 我們寫一段代碼:
~~~
//公共的 類 類名
public class HelloJAVA{
//公共的 靜態 無返回值 main方法 數組
public static void main(String [] str){
//輸出HelloJAVA
System.out.println("HelloJAVA");
}
}
~~~
> 運行的結果

> 這里有一個細節

> 我們在cmd中輸入
~~~
javac HelloJAVA.java
~~~
> 編譯之后會的到HelloJAVA.class,這才是計算機看得懂的語言,我們再輸入
~~~
java HelloJAVA
~~~
> 就會輸出HelloJAVA了,如上圖
## 五.關鍵字
> JAVA語言的基本組成
* 關鍵字
* 標識符
* 注釋
* 常量和變量
* 運算符
* 語句
* 函數
* 數組
> 我們后面會一個個學的,先來看看大概
* abstract 表明類或者成員方法具有抽象屬性
* assert 用來進行程序調試
* boolean 基本數據類型之一,布爾類型
* break 提前跳出一個塊
* byte 基本數據類型之一,字節類型
* case 用在switch語句之中,表示其中的一個分支
* catch 用在異常處理中,用來捕捉異常
* char 基本數據類型之一,字符類型
* class 類
* const 保留關鍵字,沒有具體含義
* continue 回到一個塊的開始處
* default 默認,例如,用在switch語句中,表明一個默認的分支
* do 用在do-while循環結構中
* double 基本數據類型之一,雙精度浮點數類型
* else 用在條件語句中,表明當條件不成立時的分支
* enum 枚舉
* extends 表明一個類型是另一個類型的子類型,這里常見的類型有類和接口
* final 用來說明最終屬性,表明一個類不能派生出子類,或者成員方法不能被覆蓋,或者成員域的值不能被改變
* finally 用于處理異常情況,用來聲明一個基本肯定會被執行到的語句塊
* float 基本數據類型之一,單精度浮點數類型
* for 一種循環結構的引導詞
* goto 保留關鍵字,沒有具體含義
* if 條件語句的引導詞
* implements 表明一個類實現了給定的接口
* import 表明要訪問指定的類或包
* instanceof 用來測試一個對象是否是指定類型的實例對象
* int 基本數據類型之一,整數類型
* interface 接口
* long 基本數據類型之一,長整數類型
* native 用來聲明一個方法是由與計算機相關的語言(如C/C++/FORTRAN語言)實現的
* new 用來創建新實例對象
* package 包
* private 一種訪問控制方式:私用模式
* protected 一種訪問控制方式:保護模式
* public 一種訪問控制方式:共用模式
* return 從成員方法中返回數據
* short 基本數據類型之一,短整數類型
* static 表明具有靜態屬性
* strictfp 用來聲明FP_strict(單精度或雙精度浮點數)表達式遵循IEEE 754算術規范
* super 表明當前對象的父類型的引用或者父類型的構造方法
* switch 分支語句結構的引導詞
* synchronized 表明一段代碼需要同步執行
* this 指向當前實例對象的引用
* throw 拋出一個異常
* throws 聲明在當前定義的成員方法中所有需要拋出的異常
* transient 聲明不用序列化的成員域
* try 嘗試一個可能拋出異常的程序塊
* void 聲明當前成員方法沒有返回值
* volatile 表明兩個或者多個變量必須同步地發生變化
* while 用在循環結構中
## 六.標識符
> 在程序中自定義的一些名稱?
> 由26個字母大小寫,數字,0-9,下劃線,美元符?
> 定義合法標識符規則
* 數字不可以開頭
* 不可以使用關鍵字
> java中嚴格區分大小寫?
> 注意:在起名字的時候,閱讀性,盡量有意義?
> java中名稱規范
* 包名:多個單詞組成時,所有的字母小寫
* 類名,接口名:多單詞組成時,所有單詞首字母大寫
* 變量名和函數名:多單詞組成時,第一個單詞首字母小寫,后面的首字母全- 大寫
* 常量名:所有字母大寫
## 七.常量
> 固定不變的數據叫做常量?
> java中常量的分類
* 1.整數常量:所有整數
* 2.小數常量:所有小數
* 3.布爾型常量:true/false
* 4.字符常量:加一個表示”
* 5.字符串常量:一個或多個字符雙”“?
–6.null常量:只有一個數值null
> 對于整數:java有三種表現形式
* 十進制 0-9 滿十進一
* 八進制 0-7 滿八進一
* 十六進制 0-9 A-F 滿十六進一 用0x開頭表示
## 八進制
> 進制的由來:?
> 任何數據在計算機中都是以二進制的形式存在的,二進制早期緣由來自開關,一個整數在內存中一樣是二進制,但是使用一大串1或者0的數值很麻煩,所以就想縮短一點,將二進制中的三位用一位表示,這三位可以取得的最大值超過7就進一位,這就是八進制,后來慢慢的十進制,十六進制,越來越短了
### 進制的轉換
* 十進制——>二進制
> 原理就是對十進制進行/2 運算,我們可以這樣去計算?
> 比如6:6/2 = 3 余 0?
> 3 / 2 = 1 余 1?
> 那就是從個位數開始011,讀起來就是110了?
> 而在JAVA中,其實可以直接用代碼換算的,我們可以這樣寫
~~~
//公共的 類 類名
public class HelloJJAVA{
//公共的 靜態 無返回值 main方法 數組
public static void main(String [] str){
//輸出6的二進制轉換
System.out.println(Integer.toBinaryString(6));
}
}
~~~
> 還是用回Eclipse,不然不習慣了,嘿嘿?
> 輸出的結果

* 二進制——>十進制
> 既然2可以轉10,那10也可以轉2,原理都是相同的, 你除,我乘,二進制轉十進制也很簡單,我們以上面那個6的二進制110為例?
> 二進制110轉換成十進制?
> 0*2的0次方 + 1*2的1次方 + 1*2的2次方?
> 0 + 2 + 4 = 6
* 二進制——>十六進制
> 我們拿90來換算,轉換成二進制是01011010,我們看圖

> 我們知道二進制每四位就是一個16位,這樣我們就可以拆分。讓四位去二進制,然后算出來的10在16位中是A表示,所有是0x5A?
> 這樣的話,二進制轉八進制就更簡單了,直接每三位換算,不足三位的前面補0也可以?
> 這里還有一個要注意,就是負數的二進制轉換,其實就是取反+1,怎么個說法?就是0轉換成1 1 轉換成0 結果+1 就得出了
## 九.變量
> 在變量了解之前,我們先了解一下一個概念——數據類型
### 數據類型
> Java基本類型共有八種,基本類型可以分為三類,字符類型char,布爾類型boolean以及數值類型byte、short、int、long、float、double。數值類型又可以分為整數類型byte、short、int、long和浮點數類型float、double。JAVA中的數值類型不存在無符號的,它們的取值范圍是固定的,不會隨著機器硬件環境或者操作系統的改變而改變。實際上,JAVA中還存在另外一種基本類型void,它也有對應的包裝類 java.lang.Void,不過我們無法直接對它們進行操作。8 種類型表示范圍如下:
* byte:8位,最大存儲數據量是255,存放的數據范圍是-128~127之間。
* short:16位,最大數據存儲量是65536,數據范圍是-32768~32767之間。
* int:32位,最大數據存儲容量是2的32次方減1,數據范圍是負的2的31次方到正的2的31次方減1。
* long:64位,最大數據存儲容量是2的64次方減1,數據范圍為負的2的63次方到正的2的63次方減1。
* float:32位,數據范圍在3.4e-45~1.4e38,直接賦值時必須在數字后加上f或F。
* double:64位,數據范圍在4.9e-324~1.8e308,賦值時可以加d或D也可以不加。
* boolean:只有true和false兩個取值。
* char:16位,存儲Unicode碼,用單引號賦值。
> Java決定了每種簡單類型的大小。這些大小并不隨著機器結構的變化而變化。這種大小的不可更改正是Java程序具有很強移植能力的原因之一。下表列出了Java中定義的簡單類型、占用二進制位數及對應的封裝器類。

> 對于數值類型的基本類型的取值范圍,我們無需強制去記憶,因為它們的值都已經以常量的形式定義在對應的包裝類中了。如:
* 基本類型byte 二進制位數:Byte.SIZE最小值:Byte.MIN_VALUE最大值:Byte.MAX_VALUE
* 基本類型short二進制位數:Short.SIZE最小值:Short.MIN_VALUE最大值:Short.MAX_VALUE
* 基本類型char二進制位數:Character.SIZE最小值:Character.MIN_VALUE-最大值:Character.MAX_VALUE
* 基本類型double 二進制位數:Double.SIZE最小值:Double.MIN_VALUE最大值:Double.MAX_VALUE
> 注意:float、double兩種類型的最小值與Float.MIN_VALUE、 Double.MIN_VALUE的值并不相同,實際上Float.MIN_VALUE和Double.MIN_VALUE分別指的是 float和double類型所能表示的最小正數。也就是說存在這樣一種情況,0到±Float.MIN_VALUE之間的值float類型無法表示,0 到±Double.MIN_VALUE之間的值double類型無法表示。這并沒有什么好奇怪的,因為這些范圍內的數值超出了它們的精度范圍。?
> Float和Double的最小值和最大值都是以科學記數法的形式輸出的,結尾的”E+數字”表示E之前的數字要乘以10的多少倍。比如3.14E3就是3.14×1000=3140,3.14E-3就是3.14/1000=0.00314。?
> Java基本類型存儲在棧中,因此它們的存取速度要快于存儲在堆中的對應包裝類的實例對象。從Java5.0(1.5)開始,JAVA虛擬機(Java Virtual Machine)可以完成基本類型和它們對應包裝類之間的自動轉換。因此我們在賦值、參數傳遞以及數學運算的時候像使用基本類型一樣使用它們的包裝類,但這并不意味著你可以通過基本類型調用它們的包裝類才具有的方法。另外,所有基本類型(包括void)的包裝類都使用了final修飾,因此我們無法繼承它們擴展新的類,也無法重寫它們的任何方法。?
> 基本類型的優勢:數據存儲相對簡單,運算效率比較高?
> 包裝類的優勢:有的容易,比如集合的元素必須是對象類型,滿足了java一切皆是對象的思想
>
> 數據類型了解之后我們就來說下變量了
### 變量的概念
> 就是將不確定的數據進行存儲,也就是需要在內存中開辟一個空間?
> 我們該如何去定義一個變量?我們以整數為例
~~~
int num = 5 ;
//變量是可以復用而且重復賦值的,我們可以來測試一下
//公共的 類 類名
public class HelloJJAVA {
// 公共的 靜態 無返回值 main方法 數組
public static void main(String[] str) {
// 定義一個變量
int num = 5;
System.out.println(num);
num = 10;
System.out.println(num);
}
}
~~~
> 輸出的結果

## 十.類型轉換
> 我們直接看例子
~~~
//公共的 類 類名
public class HelloJJAVA {
// 公共的 靜態 無返回值 main方法 數組
public static void main(String[] str) {
byte a = 2;
a = a + 5;
System.out.println(a);
}
}
~~~
> 這樣是不能輸出,因為不是同一類型,原則是以大的為主,強制類型轉換,我們應該這樣寫
~~~
a = (byte) (a + 5);
~~~
> 在工具中會提示,但是我們基本知識要掌握
## 十一.運算符
> 我們數據類型也有了,變量也有了,那我們就可以開始運算了,常見的運算符有以下幾種
* 算術運算符
* 賦值運算符
* 比較運算符
* 邏輯運算符
* 位運算符
* 三元運算符
> 我們先來看看第一種
### 算術運算符
> 這個說了跟沒說一樣,就是加減乘除+ - * /?
> 我們寫個小例子
~~~
//公共的 類 類名
public class HelloJJAVA {
// 公共的 靜態 無返回值 main方法 數組
public static void main(String[] str) {
int a = 10;
int b = 5;
System.out.println(a + b);
System.out.println(a - b);
System.out.println(a * b);
System.out.println(a / b);
}
}
~~~
> 得到的結果小學生都會了

> 但是所有的運算符都是有優先級的

> 而且連算的時候會出問題,我們寫個例子
~~~
//公共的 類 類名
public class HelloJJAVA {
// 公共的 靜態 無返回值 main方法 數組
public static void main(String[] str) {
int a = 8510;
a = a / 1000 * 1000;
System.out.println(a);
}
}
~~~
> 你一看,我去,真當我小學沒畢業呢,8510除以1000再乘以1000不還是等于8510嗎?我微微一笑,我們看輸出的結果

> 你一看就傻眼了,這是為什么?因為從左到右的順序去計算的話,8510/1000 是8.51,但是8.51有小數點,不是int類型,就自動轉換成int類型了,也就是8 ,然后8再乘以1000不就是8000,這里稍微注意一下就可以了
>
> 我們再來講一個重要的知識點——取模(%)?
> 其實說白了就是去余數
~~~
//公共的 類 類名
public class HelloJJAVA {
// 公共的 靜態 無返回值 main方法 數組
public static void main(String[] str) {
int a = 11;
System.out.println(a%2);
}
}
~~~
> 像這樣,其實就是11%2,也就是11/2 = 5 余1 ,那么11%2 = 1;我們看下結果

> 左邊 < 右邊 = 左邊?
> 左邊 = 右邊 = 0?
> 左邊 > 右邊 = 余數?
> 比如++ – 什么的,就是自增1,自減1,沒什么可講的了?
> 不過有一點還得注意,就是+,在計算的時候+是運算符,但是在字符串中,是連接符的意思,我們舉個例子
~~~
//公共的 類 類名
public class HelloJJAVA {
// 公共的 靜態 無返回值 main方法 數組
public static void main(String[] str) {
int a = 2;
int b = 5;
System.out.println(a + b);
String c = "你好";
String d = "Android";
System.out.println(c + d);
}
}
~~~
> 結果顯而易見

### 轉義字符
> 這是一個小知識點
* 換行\n
* 空格\t
* 退格\b
* 制表符\t 相當于Tab鍵
* 通過\轉換后面字符的含義
### 賦值運算
> 就是 = 號,賦值,這里有些特殊的,+= -= *= /=,這些是什么意思呢?我們比較一下?
> a += 5;?
> a = a + 5 ;
### 比較運算符
> 這里,沒什么講的,> <之類的,我們這里有一個常用的 == ,就是相等于的意思,比較?
> 3 == 4 false?
> 4 == 4 true?
> 主要是判斷兩個是否相等
### 邏輯運算符
> 這個算是比較難的了

* &
~~~
int x = 4;
//邏輯運算符連接布爾類型的表達式
x>3 & x<6 true = true;
/**
* true & true true
* true & false false
* false & true false
* false & false false
* 總結:&符號就是你兩邊都是true才成立,換句話說,兩邊只要有一個false,就是false
*/
~~~
* |
~~~
/**
* | 是什么?
*
* true | true true
* true | false true
* false | true true
* false | false false
*
* 總結:只要就一個成立就可以,也就是返回true,只有當兩個都是false才會返回false
*/
~~~
* ^
> 和|差不多,但是?
> true ^ true false
* !
> 非,就是不是的意思?
> int a = 5;?
> a != 6; a 不等于 6
* &&
> 這個也好理解,只要左邊的是false,后面就不運算了
* ||
> 這個當左邊為true的時候,后面不運算?
> 位運算符
> 這個位是二進制計算

> 我們一個個來解析?
> 3 << 2 = 12 怎么去算的??
> 我們先把3換算成二進制就是11 ,那前進而且,后面補兩個0

> 得帶1100,換算就是12了?
> 最高位補什么由原來數據的最高位值而定,如果最高位是0,右移后,用0補空位,如果最高位是1,右移后,由1補空位?
> 當然,&和|也可以作為位運算的?
> 也就是換算二進制在進行&,0是假,1是真,得到的二進制再換算成十進制就可以了‘?
> 我們這里做一個小練習
## 題目:
* 1.最有效的方式算出2乘以8等于幾?
* 2.對兩個整數變量的值進行交換(不需要第三方變量)
### 第一題:
> 2*8不就是16,嘛,但是你要知道這個是最有效的,也就是效率,他們計算實際上在內存中也是轉換成二進制進行計算的,而有效的,莫過于位運算了,答案是?
> 2<<3?
> 這樣就可以高效的得到16了
### 第二題
看例子
~~~
//公共的 類 類名
public class HelloJJAVA {
// 公共的 靜態 無返回值 main方法 數組
public static void main(String[] str) {
// 進行互換
int a = 10;
int b = 5;
System.out.println("a:" + a + "\n" + "b:" + b);
/**
* 第一種方式:第三方變量
*/
int temp;
temp = a;
a = b;
b = temp;
System.out.println("a" + a + "\n" + "b:" + b);
/**
* 第二種方式:不用第三方變量 其實可以利用他們的和的
*/
a = a + b;
b = a - b;
a = a - b;
System.out.println("a" + a + "\n" + "b:" + b);
}
}
~~~
> 當然,我們也可以運用我們的^
~~~
a = a ^ b;
b = a ^ b;
a = a ^ b;
System.out.println("a" + a + "\n" + "b:" + b);
~~~
> 有點搞暈了
### 三元運算符
> 格式?
> (條件表達式)?表達式1:表達式2?
> 如果條件為true,運算后的結果為表達式1?
> 如果條件為false,運算的結果就是表達式2?
> 表達式就是true或者false,我們舉個例子
~~~
//公共的 類 類名
public class HelloJJAVA {
// 公共的 靜態 無返回值 main方法 數組
public static void main(String[] str) {
int a = 10;
// 如果a大于20就給b賦值30否則就60
int b = (a > 20) ? 30 : 60;
System.out.println(b);
}
}
~~~
> 結果’

> 好的,我們的JAVA基礎算是入門了,但是這只是九牛一毛,我們真正的好東西,下篇博客會開始慢慢的接觸
## 我的群,通往Android的神奇之旅 :555974449,歡迎大家進來交流技術!
版權聲明:本文為博主原創文章,博客地址:http://blog.csdn.net/qq_26787115,未經博主允許不得轉載。
- 0-發現
- AndroidInterview-Q-A
- Android能讓你少走彎路的干貨整理
- LearningNotes
- temp
- temp11
- 部分地址
- 0-待辦任務
- 待補充列表
- 0-未分類
- AndroidView事件分發與滑動沖突處理
- Spannable
- 事件分發機制詳解
- 1-Java
- 1-Java-01基礎
- 未歸檔
- 你應該知道的JDK知識
- 集合框架
- 1-Java-04合集
- Java之旅0
- Java之旅
- JAVA之旅01
- JAVA之旅02
- JAVA之旅03
- JAVA之旅04
- JAVA之旅05
- JAVA之旅06
- JAVA之旅07
- JAVA之旅08
- JAVA之旅09
- java之旅1
- JAVA之旅10
- JAVA之旅11
- JAVA之旅12
- JAVA之旅13
- JAVA之旅14
- JAVA之旅15
- JAVA之旅16
- JAVA之旅17
- JAVA之旅18
- JAVA之旅19
- java之旅2
- JAVA之旅20
- JAVA之旅21
- JAVA之旅22
- JAVA之旅23
- JAVA之旅24
- JAVA之旅25
- JAVA之旅26
- JAVA之旅27
- JAVA之旅28
- JAVA之旅29
- java之旅3
- JAVA之旅30
- JAVA之旅31
- JAVA之旅32
- JAVA之旅33
- JAVA之旅34
- JAVA之旅35
- 1-Java-05辨析
- HashMapArrayMap
- Java8新特性
- Java8接口默認方法
- 圖解HashMap(1)
- 圖解HashMap(2)
- 2-Android
- 2-Android-1-基礎
- View繪制流程
- 事件分發
- AndroidView的事件分發機制和滑動沖突解決
- 自定義View基礎
- 1-安卓自定義View基礎-坐標系
- 2-安卓自定義View基礎-角度弧度
- 3-安卓自定義View基礎-顏色
- 自定義View進階
- 1-安卓自定義View進階-分類和流程
- 10-安卓自定義View進階-Matrix詳解
- 11-安卓自定義View進階-MatrixCamera
- 12-安卓自定義View進階-事件分發機制原理
- 13-安卓自定義View進階-事件分發機制詳解
- 14-安卓自定義View進階-MotionEvent詳解
- 15-安卓自定義View進階-特殊形狀控件事件處理方案
- 16-安卓自定義View進階-多點觸控詳解
- 17-安卓自定義View進階-手勢檢測GestureDetector
- 2-安卓自定義View進階-繪制基本圖形
- 3-安卓自定義View進階-畫布操作
- 4-安卓自定義View進階-圖片文字
- 5-安卓自定義View進階-Path基本操作
- 6-安卓自定義View進階-貝塞爾曲線
- 7-安卓自定義View進階-Path完結篇偽
- 8-安卓自定義View進階-Path玩出花樣PathMeasure
- 9-安卓自定義View進階-Matrix原理
- 通用類介紹
- Application
- 2-Android-2-使用
- 2-Android-02控件
- ViewGroup
- ConstraintLayout
- CoordinatorLayout
- 2-Android-03三方使用
- Dagger2
- Dagger2圖文完全教程
- Dagger2最清晰的使用教程
- Dagger2讓你愛不釋手-終結篇
- Dagger2讓你愛不釋手-重點概念講解、融合篇
- dagger2讓你愛不釋手:基礎依賴注入框架篇
- 閱讀筆記
- Glide
- Google推薦的圖片加載庫Glide:最新版使用指南(含新特性)
- rxjava
- 這可能是最好的RxJava2.x入門教程完結版
- 這可能是最好的RxJava2.x入門教程(一)
- 這可能是最好的RxJava2.x入門教程(三)
- 這可能是最好的RxJava2.x入門教程(二)
- 這可能是最好的RxJava2.x入門教程(五)
- 這可能是最好的RxJava2.x入門教程(四)
- 2-Android-3-優化
- 優化概況
- 各種優化
- Android端秒開優化
- apk大小優化
- 內存分析
- 混淆
- 2-Android-4-工具
- adb命令
- 一鍵分析Android的BugReport
- 版本控制
- git
- git章節簡述
- 2-Android-5-源碼
- HandlerThread 源碼分析
- IntentService的使用和源碼分析
- 2-Android-9-辨析
- LRU算法
- 什么是Bitmap
- 常見圖片壓縮方式
- 3-Kotlin
- Kotlin使用筆記1-草稿
- Kotlin使用筆記2
- kotlin特性草稿
- Kotlin草稿-Delegation
- Kotlin草稿-Field
- Kotlin草稿-object
- 4-JavaScript
- 5-Python
- 6-Other
- Git
- Gradle
- Android中ProGuard配置和總結
- gradle使用筆記
- Nexus私服搭建
- 編譯提速最佳實踐
- 7-設計模式與架構
- 組件化
- 組件化探索(OKR)
- 1-參考列表
- 2-1-組件化概述
- 2-2-gradle配置
- 2-3-代碼編寫
- 2-4-常見問題
- 2-9-值得一讀
- 8-數據結構與算法
- 0臨時文件
- 漢諾塔
- 8-數據-1數據結構
- HashMap
- HashMap、Hashtable、HashSet 和 ConcurrentHashMap 的比較
- 遲到一年HashMap解讀
- 8-數據-2算法
- 1個就夠了
- Java常用排序算法(必須掌握的8大排序算法)
- 常用排序算法總結(性能+代碼)
- 必須知道的八大種排序算法(java實現)
- 9-職業
- 閱讀
- 書單
- 面試
- 面試-01-java
- Java面試題全集駱昊(上)
- Java面試題全集駱昊(下)
- Java面試題全集駱昊(中)
- 面試-02-android
- 40道Android面試題
- 面試-03-開源源碼
- Android圖片加載框架最全解析(二),從源碼的角度理解Glide的執行流程
- 面試-07-設計模式
- 面試-08-算法
- 面試-09-其他
- SUMMARY
- 版權說明
- temp111