前情提要
學(xué)習(xí)路徑
學(xué)習(xí)方法
多寫士复,多練图谷,多分享思考,貴在堅持阱洪。
即輸出代碼便贵,輸出筆記博客,費曼教學(xué)冗荸,能把學(xué)到的東西講清楚承璃,讓聽的人明白,多總結(jié)思考蚌本。
教授知識只是基礎(chǔ)盔粹,還要對別人的人生觀價值觀產(chǎn)生積極正向的影響。這樣反而更能促進學(xué)習(xí)者的學(xué)習(xí)興趣和深入理解魂毁。
為什么要博客玻佩?
- 總結(jié)和思考
- 提升文筆組織能力
- 提升學(xué)習(xí)總結(jié)能力
- 提升邏輯思維能力
- 幫助他人,分享知識席楚,結(jié)交朋友
自建博客
- wordpress
- typecho
markdown基本語法
# 一級標題
## 二級標題
##### 五級標題
- 列表第一項
- 列表第二項
\1. 有序列表第一項
\2. 有序列表第二項
[圖片上傳失敗...(image-211ab0-1636004447253)]
斜體
粗體
> 引用段落
``` 代碼塊 ```
馮諾依曼體系結(jié)構(gòu)
計算機軟件
Windows快捷鍵
Ctrl + X | 剪切 |
---|---|
Ctrl + Z | 撤銷 |
Windows + R | 打開運行窗口咬崔,輸入cmd打開命令行窗口 |
Windows + E | 打開我的電腦 |
Ctrl + Shift + ESC | 打開任務(wù)管理器 |
Windows + P | 打開分屏投影 |
Windows DOS命令
打開命令行窗口的方式
- 從開始 + Windows系統(tǒng)+命令提示符 點擊打開
- Windows + R 打開運行窗口,輸入cmd打開命令行窗口
- 在任意文件夾下,按住shift鍵+鼠標右擊垮斯,選擇 在此處打開powershell窗口
- 資源管理器的地址欄前面加上 cmd 文件路徑郎仆,就能打開該路徑下的cmd窗口
以管理員方式運行:右擊命令提示符選擇以管理員方式運行,便能獲得root最高運行權(quán)限兜蠕。
常用的DOS命令
#盤符切換 C: D: E:即可
C:
#查看當前目錄下的所有文件
dir
#切換目錄 change directory
cd
#切換到不同盤符下的目錄 /d才能不同盤符切換
cd /d E:nomalSoft
#清理屏幕 clear screen
cls
#退出終端
exit
#查看ip地址
ipconfig
#dos命令打開軟件應(yīng)用
#calc 打開計算器 mspaint 打開畫圖 notepad 打開記事本
#ping命令 測試網(wǎng)絡(luò)是否正常連接該網(wǎng)址主機
ping www.google.com
#文件操作
#創(chuàng)建文件夾 make directory
md test
#刪除文件夾 remove dirctory
rd test
#創(chuàng)建文件 cd> 文件名
cd>demo.text
#刪除文件 del
del demo.text
根據(jù)電腦的連接扰肌,如目前連無線網(wǎng)則ip在無線適配器WLAN上:
計算機語言
- 第一代機器語言——二進制
- 第二代匯編語言——逆向工程時使用
- 第三代高級語言——面向過程和面向?qū)ο?/li>
摩爾定律是英特爾創(chuàng)始人之一戈登·摩爾的經(jīng)驗之談,其核心內(nèi)容為:集成電路上可以容納的晶體管數(shù)目在大約每經(jīng)過18個月便會增加一倍熊杨。換言之曙旭,處理器的性能每隔兩年翻一倍。
Java環(huán)境的搭建
Java構(gòu)建程序需要用到的平臺晶府,系統(tǒng)和工具桂躏。
什么是JDK,JRE,JVM?
JDK目錄介紹:
JDK環(huán)境變量配置
JDK的環(huán)境變量配置時只需要配置%JAVA_HOME%\bin
即可川陆,不需要再對jre\bin
進行配置的原因是JDK包含了JRE,我們可以看到JDK\bin
目錄下已經(jīng)包含了JRE的目錄了剂习,因此只要配置一個環(huán)境變量就行了。
手動編譯Java文件
#首先進入到要編譯的java文件所在文件夾目錄下
cmd D:\md_note\kuangstudy
#編譯java文件较沪,注意要帶java后綴
javac Application.java
#編譯后會生成Application.class 字節(jié)碼文件
#java class文件名 ,執(zhí)行java代碼鳞绕。運行時直接運行java文件名即可,不可以帶Application.class后綴尸曼,否則會報找不到或無法加載主類
java Application
#注意如果是Windows平臺默認是GBK編碼们何,所有編譯時要指定編碼格式為utf8需要如下操作
#編譯:
javac -encoding utf8 Test.java
#執(zhí)行:
java -Dfile.encoding=utf8 Test
注意:java文件如果有包名路徑的話則編譯后的class文件也要在對應(yīng)的包名下,否則會執(zhí)行報錯骡苞。
Java程序運行機制
編譯型——直接編譯成機器碼垂蜗,相當于把一本書從中文翻譯成英文
解釋型——一行一行解釋成機器碼執(zhí)行,相當于把一本中文書讓一個翻譯官一行一行翻譯成英文給老外聽
Java基礎(chǔ)
數(shù)據(jù)類型
8大數(shù)據(jù)類型(byte,short,int,long,float,double,char,boolean)
位與字節(jié)的關(guān)系
代碼示例
public class Test {
public static void main(String[] args) {
//整數(shù)有不同進制,二進制:0b,十進制 ,八進制:0,十六進制:0x
int a = 10;
int b = 0b10;
int c = 010;
int d = 0x10;
System.out.println(a);
System.out.println(b);
System.out.println(c);
System.out.println(d);
System.out.println("-------------------------------------------------------------");
//浮點數(shù) 烘苹,針對金錢的計算一定要避免使用浮點數(shù)進行比較躲株,因為浮點數(shù)存儲位數(shù)有限,離散镣衡,有誤差霜定,會舍入誤差,值接近但不等于
float e = 0.1f;
double f = 1.0 / 10;
System.out.println(e == f);//false float與double值有效位不一樣廊鸥,當一個浮點數(shù)做運算時如果指定類型則為了精度默認為double類型
float g = 1011010101001f;
float h = g + 1;
System.out.println(g == h);//true 浮點數(shù)數(shù)值過大會丟失精度
System.out.println("-------------------------------------------------------------");
//字符 望浩,所有的字符本質(zhì)上還是數(shù)字,Unicode編碼表是字符與數(shù)字的對應(yīng)關(guān)系
//如 97=a ,65=A,表示0-65536的數(shù)惰说,2的16次方=65536 一個字節(jié)8位磨德,字符=2個字節(jié)=16位
char i = 'A';
char j ='\u0061';//這里是十六進制數(shù),對應(yīng)十進制是65
char k = (char)97;
int l = (int)i;
System.out.println(i);
System.out.println(j);
System.out.println(k);
System.out.println(l);
//轉(zhuǎn)義字符 \t 制表符 \n換行符
System.out.println("with\tme");
System.out.println("with\nme");
}
}
/**輸出:
* 10
* 2
* 8
* 16
* -------------------------------------------------------------
* false
* true
* -------------------------------------------------------------
* A
* a
* a
* 65
* with me
* with
* me
*/
類型轉(zhuǎn)換
- 強制類型轉(zhuǎn)換——類型從高轉(zhuǎn)低,如long轉(zhuǎn)int
- 自動類型轉(zhuǎn)換——類型從低轉(zhuǎn)高典挑,如int轉(zhuǎn)long
類型轉(zhuǎn)換注意點:
- 不能對布爾值進行轉(zhuǎn)換
- 不能把對象類型轉(zhuǎn)換為不相干的類型酥宴,如int不能轉(zhuǎn)String
- 類型從高轉(zhuǎn)低進行強轉(zhuǎn)時可能會出現(xiàn)內(nèi)存溢出或者精度問題,如int轉(zhuǎn)byte您觉,double轉(zhuǎn)long
代碼示例
public class Test {
public static void main(String[] args) {
//JDK7新特性拙寡,數(shù)字之間可以用下劃線分割,方便程序員讀數(shù)琳水。
int num = 1_0000_0000;
System.out.println(num);//100000000
int year = 500;
System.out.println(num * year);//-1539607552 int類型內(nèi)存溢出
//較大數(shù)值計算時要注意內(nèi)存溢出問題肆糕,運算前先把一個乘數(shù)值轉(zhuǎn)為較大類型如long,
// 否則即使結(jié)果用long類型來作為接受結(jié)果也沒用在孝,因為會進行先int類型計算再轉(zhuǎn)型為long诚啃,
//這時候已經(jīng)失去精度或者內(nèi)存溢出了
System.out.println((long) num * year);//50000000000
/**
* 輸出:
* 100000000
* -1539607552
* 50000000000
*/
}
}
常量:初始化后不能再改變的值,被final
修飾浑玛。
靜態(tài)常量:被final static
修飾绍申。
常量命名:大寫字母加下劃線:MAX_MEMORY
運算示例
public class Test2 {
/**
* 自增運算示例
*
* @param args
*/
public static void main(String[] args) {
int a = 1;
int b = a++;//執(zhí)行順序:先給b賦值,再自增
int c = ++a;//執(zhí)行順序:先自增顾彰,再給c賦值
System.out.println(a);//3
System.out.println(b);//1
System.out.println(c);//3
//冪運算 借助工具類Math
double v = Math.pow(2, 3);//8.0 2^3次方
System.out.println(v);
System.out.println("------------------------------------------");
//測試短路
int i = 10;
boolean j = (i > 15) && (i++ > 15);
System.out.println(i);//10,輸出是10表示短路了极阅,沒有進行后面的i++運算
System.out.println(j);//false
System.out.println("---------------------位運算符---------------------");
/**
* 位運算符
* A:1010 1100
* B:1001 0110
*A&B = 1000 0100
*A|B = 1011 1110
*A^B = 0011 1010 A與B同時為0或1則為0,A與B值不同則為1
*~A = 0101 0011
*
* << 相當于*2 右補齊0
* >> 相當于/2 左補齊0
*/
int k = 2 * 8;
int l = 2 << 3;//位運行效率高
double v1 = Math.pow(2, 16);
double v2 = 2 << 15;//2^16次方相當于左移15位
System.out.println(k);//16
System.out.println(l);//16
System.out.println(v1);//65536.0
System.out.println(v2);//65536.0
}
}
Javadoc生成文檔
第一種方法是直接打開java文件所在的類涨享,執(zhí)行下面這個語句
#-encoding是java代碼編碼筋搏,-charset是對生成文檔所用的編碼
javadoc -encoding utf-8 -charset utf-8 Test.java
第二種是使用idea幫我們生成,選擇tool——generate JavaDoc
用戶交互類——Scanner
代碼示例
public class ScannerTest {
public static void main(String[] args) {
//從鍵盤接收數(shù)據(jù)
Scanner scanner = new Scanner(System.in);
// while (scanner.hasNext()){
// System.out.println("輸出:"+scanner.next());
// }
//判斷是否還有輸入:代碼會在這個位置等待輸入
if (scanner.hasNextLine()){
System.out.println("輸出:"+scanner.nextLine());
}
//IO流只要有打開就一定要關(guān)閉
scanner.close();
}
}
Switch語句
代碼示例
public class SwitchTest {
public static void main(String[] args) {
//注意case穿透問題厕隧,如果從上面匹配到mike后沒有break語句奔脐,則case還會繼續(xù)往下執(zhí)行,把 default也打印出來吁讨,
//所以一般要注意加break語句
//JDK7新特性 switch語句可以使用String來判斷髓迎,我們通過查看反編譯文件可以發(fā)現(xiàn)本質(zhì)上是通過字符串的hashCode()值(是個int值)
// 來進行判斷,而枚舉類也能用于switch語句是因為其調(diào)用的是枚舉類的ordinal()方法建丧,也就是枚舉的序列號來判斷
String name = "mike";
switch (name) {
case "tom":
System.out.println("tom");
break;
case "mike":
System.out.println("mike");
break;
default:
System.out.println("no one");
}
}
}
想要查看反編譯后的class文件對應(yīng)的值排龄,直接打開class文件是看不懂的,我們可以通過將該class文件拷貝到src源碼包下的位置翎朱,通過idea來打開橄维,就能看到反編譯后的代碼了。
switch反編譯結(jié)果如下:
方法
值傳遞和引用傳遞拴曲,Java是值傳遞争舞。
方法重載
命令行傳參
參考手動編譯java文件一節(jié),注意編譯后要執(zhí)行的class文件需要帶包名執(zhí)行澈灼,否則找不到class文件竞川。命令行傳參其實就是在執(zhí)行語句后面加入要傳的參數(shù)即可。也可以直接使用idea的program arguments進行傳參。
可變參數(shù)
代碼示例
public class Test3 {
public static void main(String[] args) {
//可變參數(shù)使用時也可以不穿參數(shù)流译,本質(zhì)上就是個數(shù)組逞怨,因此我們在傳參時可以直接傳個數(shù)組進去。
Test3.printAll("a", "little", "guy");
Test3.printAll(3, new String[]{"I", "am ", "Ironman"});
}
public static void printAll(int i, String... str) {
System.out.println(i);
System.out.println(Arrays.toString(str));
}
public static void printAll(String... str) {
System.out.println(Arrays.toString(str));
}
/**
* [a, little, guy]
* 3
* [I, am , Ironman]
*/
}
遞歸
利用遞歸可以用簡單的程序解決復(fù)雜的問題福澡。它通常把一個大型復(fù)雜的問題層層轉(zhuǎn)化為一個與原問題相似但規(guī)模較小的問題叠赦。遞歸的能力在于用有限的語句來定義對象的無線集合。
遞歸要注意的便是遞歸不能太深革砸,否則會棧溢出或者計算太久空間浪費除秀。
遞歸結(jié)構(gòu)包含兩個部分
- 遞歸頭:什么時候不調(diào)用自身方法
- 遞歸體:什么時候調(diào)用自身方法
遞歸案例
- 輸入一個地區(qū)名獲得其下面全部所有的區(qū)縣。如輸入深圳市或者浙江省獲取其下面所有區(qū)縣算利。
- 數(shù)學(xué)階乘
代碼示例
public class Test5 {
public static void main(String[] args) throws Exception {
int result = Test5.factorial(6);
System.out.println(result);//720
}
public static int factorial(int n) throws Exception {
if (n <= 0) {
throw new Exception("n is illegal");
}
if (n == 1) {
return 1;
}
return n * factorial(n - 1);
}
}
數(shù)組
代碼示例
冒泡排序
public class Test6 {
public static void main(String[] args) {
int[] arr = {1, 4, 5, 333, 321, 65, 65, 332, 12, 44, 56, 888};
int[] sortArr = bubbleSort(arr);
System.out.println(Arrays.toString(sortArr));
//[1, 4, 5, 12, 44, 56, 65, 65, 321, 332, 333, 888]
}
/**
* 冒泡排序
* @param arr
* @return
*/
public static int[] bubbleSort(int[] arr) {
int temp;
for (int i = 0; i < arr.length - 1; i++) {
boolean flag = false;
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag = true;
}
}
if (!flag) {
break;
}
}
return arr;
}
}
稀疏數(shù)組
稀疏數(shù)組的使用前提是原始數(shù)組中大部分的元素是相同的或者是默認值如0册踩,這樣我們對原始數(shù)組進行有效的壓縮成稀疏數(shù)組來減少空間的占用。稀疏數(shù)組的第一行記錄原始數(shù)組長度和寬度效拭,以及一共有多少個值暂吉。第二行到最后一行記錄每個值所在原始數(shù)組的坐標及值。
面向?qū)ο?/h3>
本質(zhì):以類的方式組織代碼缎患,以對象的形式封裝數(shù)據(jù)慕的。
抽象、封裝挤渔、繼承肮街、多態(tài)
對象封裝的標準:屬性私有,對外提供getter/setter
構(gòu)造器
子類和父類構(gòu)造器問題:當父類只有有參的構(gòu)造器判导,沒有無參構(gòu)造器時嫉父,子類也必須是有參的構(gòu)造器,并顯示調(diào)用父類的有參構(gòu)造器眼刃,否則報錯绕辖,畢竟是繼承關(guān)系,父類是要先被創(chuàng)建出來的擂红,如果父類的有參構(gòu)造器沒有被調(diào)用則無法構(gòu)建出父類對象引镊。
示例:
public class Son extends Father{
public Son(Integer id) {
//顯示調(diào)用父類構(gòu)造器
super(id);
}
}
public class Father {
private Integer id;
public Father(Integer id) {
this.id = id;
}
}
初始化順序
代碼示例
public class Test7 {
public static void main(String[] args) {
A a1 = new A();
System.out.println("-----------------------");
A a2 = new A();
/**
* 靜態(tài)代碼塊
* 匿名代碼塊
* 構(gòu)造器
* -----------------------
* 匿名代碼塊
* 構(gòu)造器
*/
}
}
public class A {
//只在第一次初始化時執(zhí)行,且只執(zhí)行一次
static {
System.out.println("靜態(tài)代碼塊");
}
//每次創(chuàng)建對象時都會執(zhí)行一次,可以在匿名代碼塊中賦初值篮条,在構(gòu)造器前執(zhí)行
{
System.out.println("匿名代碼塊");
}
//每次創(chuàng)建對象時都會執(zhí)行一次
public A() {
System.out.println("構(gòu)造器");
}
}
抽象類和接口
抽象類有構(gòu)造方法,接口沒有構(gòu)造方法吩抓。
內(nèi)部類
- 成員內(nèi)部類——在外部類里面定義的內(nèi)部類
- 靜態(tài)內(nèi)部類——被static修飾的內(nèi)部類
- 局部內(nèi)部類——定義在方法里面的類
- 匿名內(nèi)部類——直接實現(xiàn)接口或抽象類重寫方法的類
內(nèi)部類可以調(diào)用外部類的私有屬性和私有方法涉茧。
一個Java文件中只能有一個public class
類,但是可以有多個class類定義疹娶。
參考學(xué)習(xí)HashMap中的內(nèi)部類
異常
自定義異常繼承Exception伴栓。擴展
1、idea創(chuàng)建對象時要快速獲得對象對應(yīng)的變量名有兩個方法如下
Test2 test2 = new Test2();
// new Test2().var 加上.var
//在new Test2()這行使用alt + enter
2、idea快速生成給定數(shù)字的for循環(huán)的快捷方式
100.for 即可钳垮,還可以選擇是遞增還是遞減
3惑淳、idea快捷鍵ctrl+alt+t 不生效,無法快捷生成
try catch
這個是電腦上的QQ或TIM的熱鍵導(dǎo)致的饺窿,而且設(shè)置里還沒法更改歧焦,需要先在設(shè)置的熱鍵中給某個功能加上ctrl+alt+t,讓其生效了再刪除掉這個熱鍵肚医,這樣就不會出現(xiàn)這個問題了绢馍。真惡心。
[參考](求高手回答肠套,如何干掉騰訊QQ的全局熱鍵CTRL+ALT+T舰涌? - aNightCat的回答 - 知乎 https://www.zhihu.com/question/271586548/answer/374660485 )
4、大數(shù)據(jù)領(lǐng)域——Hadoop——Java寫的你稚,所以Java在大數(shù)據(jù)領(lǐng)域使用比較廣泛瓷耙。
疑問
JDK環(huán)境或者其他我們安裝的例如Mysql在linux中要如何卸載才能算完全卸載好了?刪除安裝目錄文件刁赖,刪除環(huán)境變量配置搁痛?