擺攤直播寫代碼?一起來看下地攤經濟時代的新弄潮兒(8000字乾貨)

本文是我和xqnode聯合創作,已收錄至我們的GitHub,歡迎大家給個Star:https://github.com/nxJava/nx_java

我們會持續更新,歡迎監督!

微信搜索:武哥聊編程,關注這個Java菜鳥~

地攤小故事

大家好,我是node哥哥,不知道你們最近有沒有發現,地攤經濟火了

都說,站在風口上,豬都能飛得起來。這不,你看我們武哥就非常有生意頭腦,敏銳地嗅查到了這一波商機,準備乘着這個風口表演一把飛豬跳龍門。

這天,武哥早早的開車過來找我,準備聊聊一起合夥擺攤的事,武哥這個人非常厚道,有好事總是不忘記帶兄弟一把,情深義重,但是缺點也很明顯,太騷!

老遠的看到武哥梳着油頭,點一根菸45°仰望天空,彷彿這個世界上就他最迷人的樣子(其實很欠扁,路人看到都想踹他兩jio),我慌忙上去打招呼。

:(假裝奉承)武哥,來啦?許久不見,還是那麼帥啊!

武哥:(轉頭看我一眼,挑一下眉毛,笑容逐漸放肆開來):哎喲,這不是node小哥哥嗎?上次一別,多日未見,真是有點想念啊!還記得那個夜晚嗎?我們在咖啡廳裏,聽着浪漫的音樂,一起探討人生和理想…

:(突然背後發涼,打了一個激靈)打住打住!什麼人生?什麼理想?你也太扯了。咱們上次不是學的Java數據類型嗎?你忘了嗎?4類8種,你還舉了幾個小例子。雖然你講的不錯,但這不代表你可以胡言亂語啊,光天化日,朗朗乾坤的,注意點自己大佬的身份好不好?

武哥:害!開個玩笑嘛~ 哈哈~ 看把你急的,小臉都開始泛紅了。(說着就往我這邊靠近)

:(有點方,但故作鎮定,氣場不能輸)臥槽?武哥,你不會真有那方面的癖好吧?…

武哥:啥癖好?(不動聲色的扣了下鼻屎)

:(一陣嫌棄)咳咳… 沒啥,對了,你來不是說商量一起擺地攤嗎?是有什麼好想法嗎?

武哥:(一拍大腿,鼻屎恰好落在褲子上)對!差點忘了正事。我這次來就是爲了跟你商量下襬地攤的事兒。你看了嗎?最近微信朋友圈都在轉擺地攤的文章,說地攤經濟要火了。

:看了啊,確實是,很多類似這樣的:

武哥:哈哈~ 這個圖太形象了,可是我怎麼看這個賣假髮的有點殺馬特的意思?難道這年頭流行返璞歸真嗎?不過我感覺這個賣假髮的要火!大家都知道,程序猿最寶貴的就是頭髮了,平時加個班熬個夜都是家常便飯,搞不好遇到項目上線還得來個通宵。這熬的太狠了,傷肝傷腎傷頭髮,眼看着20幾歲的小夥子變成大爺的模樣,他們也愁啊。咱們可以地攤帶貨,就賣生髮洗髮水啊,護髮素啊這些的,甚至可以來一個全方位洗護套餐,標題我都想好了: 關愛程序員,從頭開始! 艾,甚至像什麼匯仁腎寶,印度神油也可以多進幾盒!你想現在多少人因爲那方面問題搞的家庭不和睦,生活不幸福的?咱們就是要解決用戶的痛點問題!而且專挑在科技園的門口賣,肯定賺!

:臥槽?武哥,這你都想得到?莫不是你也有那方面的難言之隱?

武哥:(翻了個白眼)你妹的!你纔有,我還年輕着呢!我這可是真真切切從用戶需求出發!給他們送福利來的!

:對,科技園程序猿還是很多的,每天的流量也大,咱們這個又是剛需,說不定到時候供不應求,趁機漲一波價,大賺一筆!哈哈哈~

武哥:我彷彿聞到了錢的味道…哈哈~ 我真是個商業天才!

:先別高興太早啊。咱們擺攤,可是這啥也沒有啊,搞啥子?你有貨源嗎?你有車嗎?你知道哪裏可以賣哪裏違規嗎?到時候搞不好違規了還被逮到了就完蛋了。

武哥:哦。也是。咱們得好好合計合計啊。不過你也不用太擔心,聽說現在城管們都有指標,每個人發展三個地攤商家。

:這麼牛皮嗎?那我們就可以放心幹了!不過我個人覺得吧,咱們先去做個市場調研,看看哪些東西好賣,一般在哪個地段比較火,每天收入支出的比例大概是多少。咱們不打無準備的仗,你覺得呢?

武哥:你說的很對,我們先去看看,這個不着急,需要從長計議。

:對啊,反正現在禿了半邊的程序員太多了,搞個相關的產業肯定得火。

武哥:對,搞起搞起。



從那以後,我跟武哥開始了到處聯繫商家搞貨賣貨的日子,每天東奔西跑,過得很充實…

就這麼過了一陣子,本來做着發財夢的我們卻沒想到我們的地攤倒閉了…

原因是武哥太騷,經常跑過去找路過的小姐姐要微信,勾搭妹子,推銷他那個什麼印度神油,說這玩意兒可以塗在身上按摩,還保證用完皮膚光澤潤滑,嚇得小姐姐去消費者協會舉報,然後…我們就這麼失業了。

武哥只能被迫把車賣了還債,大佬變屌絲,開始了跟我一起流浪的生活…

偶然一次,看到一個地攤的UP主在直播Java,我們偷偷跑過去聽了一會,臥槽,居然滿滿的乾貨?嚇得我們趕緊點贊關注,學習學習成功人士的經驗。

只見那位大佬講的是Java的關鍵字這個知識點,我又回憶起我當初學Java的場景,肚中一陣飢餓感襲來,伴隨着咕嚕咕嚕的聲響。算了一下,2天沒喫飯了,突然眼淚不爭氣地流了下來。如果當初我好好學習Java,我也不至於流落至此啊!我好恨啊!

這次,爲了讓更多的人不餓肚子,我決定分享出大佬的講課筆記。不要感謝我,要謝就謝武哥吧。他是真不容易,爲了要一份講課資料,一把鼻涕一把眼淚的,塗得大佬滿身都是,大佬很絕望,無奈下分享出乾貨,武哥這才罷休,開心的像一個一百斤的孩子(瘦的只剩一百了)…

乾貨

Java 有一系列的關鍵字,在代碼中各自有自己的重要用途與意義,今天就帶着大家一起來了解一下 Java 的關鍵字!

Java 的關鍵字特別多,本文先主要介紹一下各個關鍵字的用途,然後重點介紹一下 final、static 和 this 這三個常用的關鍵字,其他的關鍵字大家用到的時候可以去網上查一下。

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算術規範 [1]
super 表明當前對象的父類型的引用或者父類型的構造方法
switch 分支語句結構的引導詞
synchronized 表明一段代碼需要同步執行
this 指向當前實例對象的引用
throw 拋出一個異常
throws 聲明在當前定義的成員方法中所有需要拋出的異常
transient 聲明不用序列化的成員域
try 嘗試一個可能拋出異常的程序塊
void 聲明當前成員方法沒有返回值
volatile 表明兩個或者多個變量必須同步地發生變化
while 用在循環結構中

是不是不列不知道,一列嚇一跳,原來 Java 裏還有這麼多關鍵字,大部分我們平時都在用,只是沒有特意去注意這個而已。所以大部分大家都很熟了,有些不常用的我也不總結了,我接下來主要總結幾個比較有代表性的關鍵字。

final 關鍵字

Java 中的 final 關鍵字可以用來修飾類、方法和變量(包括實例變量和局部變量)

final 修飾類

使用final修飾類則該類不能被繼承,同時類中的所有成員方法都會被隱式定義爲final方法(只有在需要確保類中的所有方法都不被重寫時才使用final修飾類)。final修飾類的成員變量是可以更改的

public final class FinalClass{

	int i = 1;
    
	void test(){
		System.out.println("FinalClass:test");
	}
    
	public static void main( String[] args ){
		FinalClass ficl = new FinalClass();
    
		System.out.println("ficl.i = " + ficl.i);
		ficl.i = 2;
		System.out.println("ficl.i = " + ficl.i);
	}
}

final 修飾方法

使用final修飾方法可以將方法“鎖定”,以防止任何繼承類對方法的修改,也即使用final修飾方法,則子類無法重寫(但並不影響繼承和重載,即子類調用父類方法不受影響)。

final 修飾變量

使用final關鍵字修飾變量是使用最多的情況。

使用final修飾變量的值不能做再次更改,即不能重新賦值。

  1. 如果final修飾的變量是基本數據類型,則變量的值不可更改;
  2. 如果final修飾的變量是引用數據類型,則該變量不能再次指向其他引用(如重新指向新的對象或數組)但是該變量本身的內容可以再做修改(如數組本身的內容,或者對象的屬性的修改)。

無論final修飾實例變量還是局部變量,都必須在使用前顯式賦初值。

  1. Java中的實例變量系統會對其默認賦初值,但是局部變量必須先聲明後賦值再使用。
  2. 雖然對於實例變量,系統會默認賦初值,但是Java仍然規定final修飾的實例變量必須顯式賦初值。實例變量顯式賦值的時機可以是在聲明時直接賦值,也可以先聲明,後在構造方法中賦值(對於含有多個構造方法,必須在每個構造方法中都顯示賦值)。

我們來看個例子:

public void fun(){

	//BufferedImage src = null;//0. 聲明的同時賦值
	BufferedImage src;//1. 這裏不用賦初值,也不會出錯
	try{
		src = ImageIO.read(new File("1.jpg"));//2.
	} catch (Exception e){
	//3. 如果出異常了就會進入這裏,那麼src可能無法被賦值
	}
	
	System.out.println(src.getHeight()); //4. src不一定有值,所以無法使用
}

如果靜態變量同時被final修飾則可以將變量視爲全局變量,即在整個類加載期間,其值不變。(static保證變量屬於整個類,在類加載時只對其分配一次內存;final保證變量的值不被改變)

static 關鍵字

static方法一般稱作靜態方法,由於靜態方法不依賴於任何對象就可以進行訪問,因此對於靜態方法來說,是沒有this的,因爲它不依附於任何對象,既然都沒有對象,就談不上this了。並且由於這個特性,在靜態方法中不能訪問類的非靜態成員變量和非靜態成員方法,因爲非靜態成員方法/變量都是必須依賴具體的對象才能夠被調用。

但是要注意的是,雖然在靜態方法中不能訪問非靜態成員方法和非靜態成員變量,但是在非靜態成員方法中是可以訪問靜態成員方法/變量的。也就是說,反過來是可以的。

如果說想在不創建對象的情況下調用某個方法,就可以將這個方法設置爲static。static修飾成員方法最大的作用,就是可以使用"類名.方法名"的方式調用方法,避免了new出對象的繁瑣和資源消耗。

我們最常見的static方法就是main方法。至於爲什麼main方法必須是static的,這是因爲程序在執行main方法的時候沒有創建任何對象,因此只有通過類名來訪問。

static 變量

static變量也稱作靜態變量,靜態變量和非靜態變量的區別是:靜態變量被所有的對象所共享,在內存中只有一個副本,它當且僅當在類初次加載時會被初始化。而非靜態變量是對象所擁有的,在創建對象的時候被初始化,存在多個副本,各個對象擁有的副本互不影響。

static成員變量的初始化順序按照定義的順序進行初始化。

static 代碼塊

static塊可以置於類中的任何地方,類中可以有多個static塊。在類初次被加載的時候,會按照static塊的順序來執行每個static塊,並且只會執行一次。爲什麼說static塊可以用來優化程序性能,是因爲它的特性:只會在類加載的時候執行一次。

所謂的代碼塊就是當我們初始化static修飾的成員時,可以將他們統一放在一個以static開始,用花括號包裹起來的塊狀語句中。例如:

class Person{
	private Date birthDate;
	 
	public Person(Date birthDate){
		this.birthDate = birthDate;
	}
	 
	boolean isBornBoomer(){
		Date startDate = Date.valueOf("1946");
		Date endDate = Date.valueOf("1964");
		return birthDate.compareTo(startDate)>=0 && birthDate.compareTo(endDate) < 0;
	}
}

isBornBoomer是用來這個人是否是1946-1964年出生的,而每次isBornBoomer被調用的時候,都會生成startDate和birthDate兩個對象,造成了空間浪費,如果改成這樣效率會更好:

class Person{
	private Date birthDate;
	private static Date startDate,endDate;
	static{
		startDate = Date.valueOf("1946");
		endDate = Date.valueOf("1964");
	}
	 
	public Person(Date birthDate){
		this.birthDate = birthDate;
	}
	 
	boolean isBornBoomer(){
		return birthDate.compareTo(startDate)>=0 && birthDate.compareTo(endDate) < 0;
	}
}

將一些只需要進行一次的初始化操作都放在static代碼塊中進行。

this 關鍵字

this代表它所在函數所屬對象的引用。簡單說:哪個對象在調用this所在的函數,this就代表哪個對象。this關鍵字主要有以下三個作用:

  1. this調用本類中的屬性,也就是類中的成員變量;
  2. this調用本類中的其他方法;
  3. this調用本類中的其他構造方法,調用時要放在構造方法的首行。(this語句只能定義在構造函數的第一行,因爲在初始化時須先執行)

引用成員變量

public class Person{ 
	String name; //定義成員變量name
	private void SetName(String name) { //定義一個參數(局部變量)name
		this.name=name; //將局部變量的值傳遞給成員變量
	}
}

雖然我們可以看明白這個代碼的含義,但是作爲Java編譯器它是怎麼判斷的呢?到底是將形式參數name的值傳遞給成員變量name,還是反過來將成員變量name的值傳遞給形式參數name呢?也就是說,兩個變量名字如果相同的話,那麼Java如何判斷使用哪個變量?此時this這個關鍵字就起到作用了。this這個關鍵字其代表的就是對象中的成員變量或者方法。也就是說,如果在某個變量前面加上一個this關鍵字,其指的就是這個對象的成員變量或者方法,而不是指成員方法的形式參數或者局部變量。

調用類的構造器方法

public class Person { 
	public Person(){ //無參構造器方法
		this(“Hello!);
	}
	public Person(String name){ //定義一個帶形式參數的構造方法
	}
}

在上述代碼中,定義了兩個構造方法,一個帶參數,另一個沒有帶參數。在第一個沒有帶參數的構造方法中,使用了this(“Hello!”)這句代碼,這句代碼表示什麼含義呢?在構造方法中使this關鍵字表示調用類中的構造方法。

如果一個類中有多個構造方法,因爲其名字都相同,跟類名一致,那麼這個this到底是調用哪個構造方法呢?其實,這跟採用其他方法引用構造方法一樣,都是通過形式參數來調用構造方法的。

注意的是:利用this關鍵字來調用構造方法,只有在無參數構造方法中第一句使用this調用有參數的構造方法。否則的話,翻譯的時候,就會有錯誤信息。這跟引用成員變量不同。如果引用成員變量的話,this關鍵字是沒有位置上的限制的。

返回對象的引用

public HttpConfig url(String url) {
	urls.set(url);
	//return this就是返回當前對象的引用(就是實際調用這個方法的實例化對象)
	return this;
}

return this就是返回當前對象的引用(就是實際調用這個方法的實例化對象),就像我們平時使用StringBuilder一樣,可以一直.append(),因爲每次調用,返回的都是該對象的引用。

關於關鍵字,這篇文章就總結這麼多,大佬的直播也剛好結束了。跟大佬互加了微信,聊了幾句才知道原來大佬也是CSDN博客專家,半天才認出來武哥,畢竟武哥當初也是盛名在外,要不是搞什麼神油…哎,不說了,都是淚水啊!


如果覺得有幫助,希望老鐵們來個三連擊,給更多的人看到這篇文章

1、關注我的原創微信公衆號「武哥聊編程」,專注於Java、數據結構和算法、微服務、中間件等技術分享,保證你看完有所收穫。

2、給俺點個贊唄,可以讓更多的人看到這篇文章,順便激勵下我繼續寫作,嘻嘻。

作者info

【作者】:武哥
【公衆號】:武哥聊編程。歡迎大家關注~
【作者簡介】:同濟大學,碩士。先後在華爲、科大訊飛、拼多多采坑。一個自學 Java 的菜鳥,期待你的關注。

點贊是對我最大的鼓勵
↓↓↓↓↓↓

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章