黃 凱高級講師
多年移動互聯(lián)網(wǎng)開發(fā)經(jīng)驗,精通Android與iOS開發(fā),對JavaEE等后臺技術(shù)也 有所研究。尤其精通Android平臺的開發(fā),對Android平臺下的性能優(yōu)化有極其豐富的經(jīng)驗。 曾就職于酷狗音樂擔(dān)任高級Android軟件工程師與Team Leader一職,帶領(lǐng)超過20人的開發(fā)團隊,有豐富的開發(fā)與管理經(jīng)驗。參與開發(fā)了<酷狗音樂>,<繁星網(wǎng)>,<中國電信移動辦公>, <智慧天河>,<翼健康>,<創(chuàng)餉無限>,<外修管家>等20多款互聯(lián)網(wǎng)熱門應(yīng)用。其不但開發(fā)經(jīng)驗豐富,教學(xué)幽默風(fēng)趣,而且對 學(xué)生要求嚴格,堅持授人與魚不如授人與漁的理念,注重培養(yǎng)學(xué)生的解決問題與自我思考的能力。
學(xué)習(xí)Java編程需要參加Java培訓(xùn)嗎?
隨著社會信息的發(fā)展,Java技術(shù)已經(jīng)無處不在,無論是手機軟件、手機Java 游戲還是電腦軟件等,只要你使用到電子產(chǎn)品就會碰到和Java有關(guān)的東西,更多的企業(yè)正采用Java語言開發(fā)網(wǎng)站,而在所有程序員中,Java開發(fā)工程師 就占據(jù)20%的比例。所以,現(xiàn)在依然有很多人選擇學(xué)習(xí)Java語言。
學(xué)Java參加Java培訓(xùn)很有必要嗎?很有必要,理由如下:
當(dāng)下選擇自學(xué)Java的朋友,大部分都會考慮網(wǎng)上查找Java入門視頻跟著學(xué)習(xí) ,網(wǎng)上的Java入門視頻質(zhì)量有沒有保障呢?首先數(shù)量多,你該怎么選擇好的Java入門視頻資料呢?哪些Java入門視頻資料中包含著已經(jīng)淘汰的Java技術(shù) ,你可以區(qū)分出來嗎?
當(dāng)然,如果你只是想先了解下Java編程,學(xué)一些基礎(chǔ)的皮毛,那么Java基礎(chǔ) 教程還是可以滿足你的需求。但Java培訓(xùn)小編提醒你,真想學(xué)習(xí)Java基礎(chǔ)教程就該找全套的教學(xué)視頻,零零湊湊的建議你還不如不學(xué)。推薦**網(wǎng)的全套 免費Java教學(xué)視頻針對零基礎(chǔ),想要入門的同學(xué)十分的靠譜,簡單易懂。
自學(xué)Java首先Java學(xué)習(xí)資料的選擇就是個相當(dāng)大的問題,拋去這個問題。自 學(xué)Java沒有專業(yè)Java老師在旁輔導(dǎo),那么你勢必要花出更多的時間和精力學(xué)Java,你口上說著計劃每天花八個小時學(xué)Java,你真的能夠做到嗎?自學(xué) Java,**怕自欺欺人,語言上的巨人行動上的矮子。
Java設(shè)計和編程思想課程介紹
Java設(shè)計和編程思想
Java基礎(chǔ)
環(huán)境搭建(包括Windows下和
Linux下的Java環(huán)境搭建)
Java語言基礎(chǔ)
Java流程控制
Java常用類
Java面向?qū)ο?/span>
Java類與對象
介紹面向?qū)ο蠖鄳B(tài)
接口與抽象類
Java高級
異常處理
I/O、JavaBean
反射
多線程
網(wǎng)絡(luò)編程
泛型/Java集合類
Java與數(shù)據(jù)庫
MySQL
ORACLE
JDBC開發(fā)與應(yīng)用
Redis
課程優(yōu)勢
1.行業(yè)一線講師講解,深入淺出。
2.全面、完善的java課程體系,幫助學(xué)員更深更廣的體驗java魅力。
本階段學(xué)習(xí)目標(biāo)
1.精通java面向?qū)ο笏枷牒突A(chǔ)語法。
2.熟練java中異常處理。
3.精通java中I/O操作。
4.掌握java中多線程操作。
5.精通java中集合類的使用。
6.掌握java中網(wǎng)絡(luò)編程。
7.精通數(shù)據(jù)庫/JDBC/redis/mysql的使用
本階段學(xué)習(xí)效果
1.精通Java語言及其高級特性。
2.具備本地應(yīng)用開發(fā)能力,能夠開發(fā)一些本地軟件,例如:聊天室,文件傳 輸助手等。
宏定義頭文件
>
前言:
在工作中, 很多小伙伴都會在PCH文件定義一些常用的宏,但是又怕寫這些簡單的宏浪費時間,又有時候忘記怎么定義了怎么辦?本人在工作中也是如此。所以在這里給大家分享一些常用的宏定義,喜歡的小伙伴可以直接在項目中使用(持續(xù)更新)! 為了大家使用方便,請點擊GitHub - 宏定義頭文件** ! 1.獲取屏幕寬度與高度
define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width
define SCREENH_HEIGHT [UIScreen mainScreen].bounds.size.height
根據(jù)一個網(wǎng)友(脫離語言)提醒, 如果支持橫屏可以用下面的宏:
if __ipHONE_OS_VERSION_MAX_ALLOWED >= 80000 // 當(dāng)前Xcode支持iOS8及以上
define SCREEN_WIDTH ([[UIScreen mainScreen] respondsToSelector:@selector(nativeBounds)]?[UIScreen mainScreen].nativeBounds.size.width/[UIScreen mainScreen].nativeScale:[UIScreen mainScreen].bounds.size.width)
define SCREENH_HEIGHT ([[UIScreen mainScreen] respondsToSelector:@selector(nativeBounds)]?[UIScreen mainScreen].nativeBounds.size.height/[UIScreen mainScreen].nativeScale:[UIScreen mainScreen].bounds.size.height)
define SCREEN_SIZE ([[UIScreen mainScreen] respondsToSelector:@selector(nativeBounds)]?CGSizeMake([UIScreen mainScreen].nativeBounds.size.width/[UIScreen mainScreen].nativeScale,[UIScreen mainScreen].nativeBounds.size.height/[UIScreen mainScreen].nativeScale):[UIScreen mainScreen].bounds.size)
else
define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width
define SCREENH_HEIGHT [UIScreen mainScreen].bounds.size.height
define SCREEN_SIZE [UIScreen mainScreen].bounds.size
endif
2.獲取通知中心
define LRNotificationCenter [NSNotificationCenter defaultCenter]
3.設(shè)置隨機顏色
define LRRandomColor [UIColor colorWithRed:arc4random_uniform(256)/255.0 green:arc4random_uniform(256)/255.0 blue:arc4random_uniform(256)/255.0 alpha:1.0]
4.設(shè)置RGB顏色/設(shè)置RGBA顏色
define LRRGBColor(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0]
define LRRGBAColor(r, g, b, a) [UIColor colorWithRed:(r)/255.0 green:(r)/255.0 blue:(r)/255.0 alpha:a]
// clear背景顏色
define LRClearColor [UIColor clearColor]
5.自定義高效率的 NSLog
項目開發(fā)中,我們會在許多地方加上Log,但是發(fā)布的時候又不想用這些Log,我們也不可能一個一個的刪除,所以自定義Log是必然的!
ifdef DEBUG
define LRLog(…) NSLog(@”%s 第%d行 \n %@\n\n”,func,LINE,[NSString stringWithFormat:VA_ARGS])
else
define LRLog(…)
endif
6.弱引用/強引用
define LRWeakSelf(type) __weak typeof(type) weak##type = type;
define LRStrongSelf(type) __strong typeof(type) type = weak##type;
使用方法.png
第二種使用方法,定義完弱引用宏之后,直接敲weak.png 7.設(shè)置 view 圓角和邊框
define LRViewBorderRadius(View, Radius, Width, Color)\
\ [View.layer setCornerRadius:(Radius)];\ [View.layer setMasksToBounds:YES];\ [View.layer setBorderWidth:(Width)];\ [View.layer setBorderColor:[Color CGColor]]
8.由角度轉(zhuǎn)換弧度 由弧度轉(zhuǎn)換角度
define LRDegreesToRadian(x) (M_PI * (x) / 180.0)
define LRRadianToDegrees(radian) (radian*180.0)/(M_PI)
9.設(shè)置加載提示框(第三方框架:Toast)
此宏定義非常好用,但是小伙伴需要CocoaPods導(dǎo)入第三方框架:Toast
使用方法如下: LRToast(@”網(wǎng)絡(luò)加載失敗”);
define LRToast(str) CSToastStyle *style = [[CSToastStyle alloc] initWithDefaultStyle]; \
[kWindow makeToast:str duration:0.6 position:CSToastPositionCenter style:style];\ kWindow.userInteractionEnabled = ; \ dispatch_after(dispatch_time(DISPATCH_TIME_W, (int64_t)(0.6 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{\ kWindow.userInteractionEnabled = YES;\ });\
10.設(shè)置加載提示框(第三方框架:MBPRogressHUD)
此宏定義同上一個類似,如下圖:
MBProgressHUD提示框.png
// 加載
define kShowNetworkActivityIndicator() [UIapplication sharedApplication].networkActivityIndicatorVisible = YES
// 收起加載
define HideNetworkActivityIndicator() [UIApplication sharedApplication].networkActivityIndicatorVisible =
// 設(shè)置加載
define NetworkActivityIndicatorVisible(x) [UIApplication sharedApplication].networkActivityIndicatorVisible = x
define kWindow [UIApplication sharedApplication].keyWindow
define kBackView for (UIView *item in kWindow.subviews) { \
if(item.tag == 10000) \ { \ [item removeFromSuperview]; \ UIView * aView = [[UIView alloc] init]; \ aView.frame = [UIScreen mainScreen].bounds; \ aView.tag = 10000; \ aView.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.3]; \ [kWindow addSubview:aView]; \ } \ } \
define kShowHUDAndActivity kBackView;[MBProgressHUD showHUDAddedTo:kWindow animated:YES];kShowNetworkActivityIndicator()
define kHiddenHUD [MBProgressHUD hideAllHUDsForView:kWindow animated:YES]
define kRemoveBackView for (UIView *item in kWindow.subviews) { \
if(item.tag == 10000) \ { \ [UIView animateWithDuration:0.4 animations:^{ \ item.alpha = 0.0; \ } completion:^(BOOL finished) { \ [item removeFromSuperview]; \ }]; \ } \ } \
define kHiddenHUDAndAvtivity kRemoveBackView;kHiddenHUD;HideNetworkActivityIndicator()
11.獲取view的frame/圖片資源
//獲取view的frame(不建議使用) //#define kGetViewWidth(view) view.frame.size.width //#define kGetViewHeight(view) view.frame.size.height //#define kGetViewX(view) view.frame.origin.x //#define kGetViewY(view) view.frame.origin.y
//獲取圖片資源
define kGetImage(imageName) [UIImage imageNamed:[NSString stringWithFormat:@”%@”,imageName]]
12.獲取當(dāng)前語言
define LRCurrentLanguage ([[NSLocale preferredLanguages] objectAtIndex:0])
13.使用 ARC 和 MRC
if __has_feature(objc_arc)
// ARC
else
// MRC
endif
14.判斷當(dāng)前的iPhone設(shè)備/系統(tǒng)版本
//判斷是否為iPhone
define IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
define IS_IPHONE ([[[UIDevice currentDevice] model] isEqualToString:@”iPhone”])
//判斷是否為iPad
define IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
define IS_IPAD ([[[UIDevice currentDevice] model] isEqualToString:@”iPad”])
//判斷是否為ipod
define IS_IPOD ([[[UIDevice currentDevice] model] isEqualToString:@”iPod touch”])
// 判斷是否為 iPhone 5SE
define iPhone5SE [[UIScreen mainScreen] bounds].size.width == 320.0f && [[UIScreen mainScreen] bounds].size.height == 568.0f
// 判斷是否為iPhone 6/6s
define iPhone6_6s [[UIScreen mainScreen] bounds].size.width == 375.0f && [[UIScreen mainScreen] bounds].size.height == 667.0f
// 判斷是否為iPhone 6Plus/6sPlus
define iPhone6Plus_6sPlus [[UIScreen mainScreen] bounds].size.width == 414.0f && [[UIScreen mainScreen] bounds].size.height == 736.0f
//獲取系統(tǒng)版本 //這個方法不是特別靠譜
define IOS_SYSTEM_VERSION [[[UIDevice currentDevice] systemVersion] floatValue]
//建議使用這個方法
define IOS_SYSTEM_STRING [[UIDevice currentDevice] systemVersion]
//判斷 iOS 8 或更高的系統(tǒng)版本
define IOS_VERSION_8_OR_LATER (([[[UIDevice currentDevice] systemVersion] floatValue] >=8.0)? (YES):())
15.判斷是真機還是模擬器
// 判斷是不是iOS系統(tǒng),如果是iOS系統(tǒng)在真機和模擬器輸出都是YES
if TARGET_OS_IPHONE
endif
if (TARGET_IPHONE_SIMULATOR)
// 在模擬器的情況下else
// 在真機情況下endif
16.沙盒目錄文件
//獲取temp
define kPathTemp NSTemporaryDirectory()
//獲取沙盒 Document
define kPathDocument [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]
//獲取沙盒 Cache
define kPathCache [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]
17.GCD 的宏定義
很多小伙伴都非常煩寫GCD的方法,所以在此定義為宏使用更加方便簡潔!如下圖:
GCD 宏使用方法.png
//GCD - 一次性執(zhí)行
define kDISPATCH_ONCE_BLOCK(onceBlock) static dispatch_once_t onceToken; dispatch_once(&onceToken, onceBlock);
//GCD - 在Main線程上運行
define kDISPATCH_MAIN_THREAD(mainQueueBlock) dispatch_async(dispatch_get_main_queue(), mainQueueBlock);
//GCD - 開啟異步線程
define kDISPATCH_GLOBAL_QUEUE_DEFAULT(globalQueueBlock) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), globalQueueBlocl);
宏與const 的使用:
很多小伙伴在定義一個常量字符串,都會定義成一個宏,**典型的例子就是服務(wù)器的地址。在此所有用宏定義常量字符的小伙伴以后就用const來定義吧!為什么呢 ?我們看看:
宏的用法: 一般字符串抽成宏,代碼抽成宏使用。 const用法:一般常用的字符串定義成const(對于常量字符串蘋果推薦我們使用const)。 宏與const區(qū)別: 1.編譯時刻不同,宏屬于預(yù)編譯 ,const屬于編譯時刻 2.宏能定義代碼,const不能,多個宏對于編譯會相對時間較長,影響開發(fā)效率,調(diào)試過慢,const只會編譯一次,縮短編譯時間。 3.宏不會檢查錯誤,const會檢查錯誤**以上對比,我們以后在開發(fā)中如果定義一個常量字符串就用const,定義代碼就用宏。我們來看看如何使用const,列舉實際項目使用方法如下圖:
FANCommonConst.h中聲明一個常量字符串.png
FANCommonConst.m中實現(xiàn)一個常量字符串.png
在上圖本人只是簡單定義幾個常量字符串,我們創(chuàng)建一個類只要在.h和.m中包含#import
相關(guān)推薦:
熱門課程
機構(gòu)資訊
- 太倉java開發(fā)培訓(xùn)費用_太倉JAVA培訓(xùn)
- 昆山哪里有Java實戰(zhàn)培訓(xùn)學(xué)校_昆山JAVA培訓(xùn)
- 常熟學(xué)Java哪個好_常熟JAVA培訓(xùn)
- 蘇州Java培訓(xùn)課程哪個好_蘇州JAVA培訓(xùn)
- 昆山哪里有Java語言培訓(xùn)學(xué)院_昆山JAVA培訓(xùn)
- 昆山Java工程師培訓(xùn)機構(gòu)哪個好_昆山JAVA培訓(xùn)
- 常熟學(xué)習(xí)Java工程師哪里好_常熟JAVA培訓(xùn)
- 昆山Java編程課程價格_昆山JAVA培訓(xùn)
- 張家港Java開發(fā)培訓(xùn)班學(xué)費_張家港JAVA培訓(xùn)
- 太倉Java工程師培訓(xùn)學(xué)院哪里好_太倉JAVA培訓(xùn)