Android&Java的学习新的等
学习资料
很久没写博客了。适逢这次Srtp项目学弟学妹们要学习Java与Android,我就总结一些学习的教材、方法,分享写材料与心得。纯个人观点,如有不周之处欢迎指出,大家共同探讨提高。
***
教学书籍:
Java基础较差的人去借这本书吧,很简单易懂:
这本书供有一定Java基础的人深造:
第一本看完基本就可以开始做Android练练手了,Java能有今天一方面是其在服务端领域、商业项目上的成熟,一方面不得不承认是Android的功劳,拿Android作为练手学习Java再合适不过了。
第二版不是有一定决心要在Java方面深造的人看不下去。对C#应该也有较大帮助,其中很多设计模式和思想是可以通用的,但对其他语言可能就没那么大作用了。
至于Android进阶深造,我觉得没必要看书。那些厚厚的Android核心大全什么的看不进去,看进去也记不住,记住也不理解。多写多练多逛逛论坛和开源项目吧。这种比较实际的技术更新太快,看书很不值。
廖学峰大神的Git教程
不要觉得和Android开发没关系,Git是现代程序员神器,Github是现代程序员圣地,Git很简单,学好了好处非常多
在线手册:
菜鸟教程Android专区
这个站点供已近有点基础(比如看完第一本书)并且开始做练手项目的同学当手册查。记住是手册,遇到不清楚的查查,不要一章章看,浪费时间
Github上Android相关的优秀开源项目、教材
内容较多。不要花太多精力,随便逛逛遇到感兴趣的就看看。
Google
不是百度不好,在查国内八卦方面它肯定比Google强,但查技术问题还是算了吧。学校是教育网专线,Google偶尔是可以打开的。如果被墙了自行FQ吧,实在不行,这个,低调食用。再不行就用必应好了。
开发资源:
环境:
- Android相关资源镜像站
- 公共开源的Maven依赖搜索
- 比官方模拟器好用100倍的模拟器 注意这个模拟器安装可能比较麻烦,最好还是用真机调试,万不得已再用这个。
- AIDE吧,掌上学习神器,也能开发 挺好用的,大一没电脑时就是在这上面做出了我的第一个Android游戏。
- Intellij IDEA 最好用的Java|Android集成开发环境,Java界的Visual Studio,对于一般童鞋来说下载免费的社区版IDEA就够用了。
- Visual Studio Code 不是Visual Studio哦,是个更轻量更快捷更方便更好用的
编辑器IDE,毕竟IDEA也不小,有它辅助的话很多地方会方便很多。 - Coding以及它的WebIDE 就我个人而已,开源项目都在Github上,Coding则作为私有仓库,很好用。WebIDE真的能让你做到云端开发,赞一个。
UI:
我的建议
1. 绝对不要用Eclipse、netbeans之类的!yada!dame!
新时代程序猿要用IntelliJ IDEA或者Android Studio!个人更建议前者,后者是基于前者基础上的。IDEA现在也有社区版了,Android Studio更是免费的,已经没有理由再用老古董了
2. 视频什么的不用看,太慢。厚厚的大部头书不要看,太老。
软件行业发展极快,那些很长的教程、很厚的书里的很多东西真的已经没用了。像什么Java applet之类的,现在哪个浏览器还支持啊。好多已废弃的库还被各种老古董们拿来教学,官方都不推荐用了的东西还学它干嘛!
有些书除外,比如Effective Java这样永恒的经典。因为这样的书教的是思想。(但思想也不是绝对不会过时的,如果是不是用Java、C#之类的话,Effective Java里的一些模式其实也没多少用了。)
3. 网上的垃圾代码不要抄!看都不要看!误人子弟!
要参考别人的项目可以去Github,要搜索不懂的问题用Google,那些百度出来的国内抄来抄去的文章,大多不是过时了就是效率极低代码极丑或者干脆不能用
当然网上有很多独立博客写的很不错的,但都被埋没在茫茫搜索结果里了。在你知道怎么识别哪些是垃圾代码之前不要随便抄。
4. 想 > 写 > 说 > 记
最重要的是多思考,然后是多练习,然后是多交流,最后才是多学多记!
最后,不要觉得Java难、Android难!
虽然确实比起python、js什么的烦人多了
多接触些新的思想新的技术,不要怕学习,只要你不怕它就很简单
无论古董们怎么强调说,旧的东西才稳定,当你真正了解了新的技术你就会知道,很多旧的东西真的真的就是垃圾,新的技术就是为了解决掉垃圾而诞生。
群里说Java难的孩纸,我猜你们很可能就是被这些垃圾恶性到了。以下随便列出一些:a. UML:古董们再怎么强调它的重要,这玩意儿也确实该淘汰了。这么说吧,想当年,古董的古董们把流程图看得多么重要,可能某些同学中学时代学习Basic时也学过吧?现在呢?随着Basic过气,几个人写程序还画程序流程图?现在的古董们强调的UML就是那时候的流程图,流程图只适用于最早面向过程编程的时代,到了面向结构的C诞生时就应该淘汰了,但古董们直到面向对象成为大流时才明白这点。UML也类似,只适用于面向对象的编程,现在面向对象已经饱受质疑了,懂了不?
b. Java自带的一些UI组件,尤其applet为代表:要说流程图能锻炼思维(呵呵,玩游戏还能锻炼思维呢),还算有点作用,那么这部分可真的一点作用都没有了。现在谁还拿Java做UI?Android虽然底层是Java,但不是包装成xml了吗,甚至一般都是直接拖拽控件了事。就算要复杂点的操作,调的也是Android自己的UI库。而且Java本身的UI又丑又难用,真想用Java开发带UI的,两个建议,一是借助H5,以浏览器来呈现UI,二是用一些开源绘图渲染库,比如lwjwl(Minecraft底层就是它),或者干脆用开源游戏引擎,比如libGDX。
c. 又老又丑又复杂又难用的开发环境:Eclipse、netbeans什么的吓走了多少新人,又培养了多少代码风格极差、代码效率极低的码农?用IDEA真的很爽,打几个字母敲一下回车,一个程序就出来了。搭配配合轻量时尚的vscode,基本上你所能想到的省力的做法都能实现!
d. 庞大臃肿或底层傻乎乎的web框架:前者以spring mvc之类的为代表,后者是比如servlet和jsp。也不是说这些不好,但现在早已经有了更好的替代品了。一些新兴的web框架从学习到开发到部署到运行的效率都远远超过了它们,为什么不试试呢?(但不得不承认,servlet和jsp还是不能忽略的基础,这两个学好了确实更容易理解其它更高层的框架,这两个学不好后期确实会遇到许多驾驭不了的麻烦。但我认为这是Java本身的错,总要被底层琐事掣肘,不能真正的从更高更新的角度来设计架构。)
e. 复杂的网络通信:很多人可能都被HttpClient恶心到了(实际上HttpClient有很多不同的实现,常见的是Apache包或commons包的,但都不好用),我宁愿去用更底层的HttpUrlConnection也不愿用它。这玩意设计的太懒,Android里都废弃它了。更底层的HttpUrlConnection是UrlConnection的Http版实现,UrlConnection本身设计的挺合理的,虽然较底层,但确实把http和本地资源统一起来了,基于其上的HttpUrlConnection虽然写起来代码量较多,但只要有点Http基础知识还是很容易理解的。与之相比的HttpClient是神马玩意儿,把本来简单的问题复杂化,看起来好像比HttpUrlConnection少了那么些代码,实际上却多出了很多莫名其妙抽象出来的概念。说了这么多,但我一直在强调,HttpUrlConnection虽然好理解好用,但只是比起HttpClient,事实上我推荐的是square的开源项目okhttp,极大的简化了异步网络请求的问题,设计也比较合理,HttpClient那套你就算学会了,换到别的语言里也基本完全没用,因为设计的乱七八糟,但OkHttp,嗯,有点其它语言网络交互基础的人估计一瞬间就明白它是怎么工作的了。
f. 复杂的文件IO:大部分Java教程的文件IO实在实在太底层了,建缓冲区,逐字节读写,判断是否EOF,我天,你是在写汇编么?说底层还是抬举这些教材了,你要真底层,就把文件IO、网络IO、设备交互、控制台输入输出都结合起来讲啊,都是操作stream吗。总之与HttpClient类似的,常见教材的Java文件IO操作也是这么个低不成高不就的玩意儿。一般来说,在写Android时是不太用的上文件IO的,Android既有SharedPreference解决配置存储问题,又有内置的Sqlite3解决数据存储问题,如果要用到图片音乐等媒体资源也都有封装的比较好的库可用。就算一定要用文件,Android也提供了很好的文件操作相关的工具类。如果不是写Android,也没有比较好的文件IO分装,我的建议是你就把它理解成stream,然后稍稍了解一下文件的几种打开标志,写C的人或者会Linux的人应该对此很熟悉,然后统一用ByteArrayOutputStream、ByteArrayInputStream操作好了。
g: 复杂的异步与并发:写Android很重要的一点就是注意渲染线程与耗时线程的交互,准确的说,一旦开发涉及到异步并发问题都会变得复杂,这一点什么语言都逃不掉。但现代设备多核已经普及,这一问题也早有了各种各样的解决方案,诸如队列模型、消息订阅、事件驱动、协程、任务、池子模型、流式调用等等(这里面有些事针对异步,有些针对并发,但没必要区分那么清楚),Java也逐渐把这些吸收了进来,虽然都还谈不上完美,但已经轻松多了。然而,由于国内尤其Java领域内古董尤其多,很多新人都会被复杂的接口回调、线程锁机制吓到。其实在Android中,解决异步主要是通过订阅者模式,很好理解,而在Java web中,大多是事件、或者说请求驱动模式,更好理解,远远没有古董们写的|说的那么难。至于并发,Java1.5提供了一些线程安全的数据集合,Java8也有许多针对并发的新支持(我没亲自体验过),虽然还不如其他一些语言方便,但也轻松太多了。
所以,懂了吗?有些旧的东西,真的不值得再去为它花费时间精力了,最重要的是这很消磨人的兴趣与耐心。
Android&Java的学习新的等的更多相关文章
- Android Java语法学习
Activity中有一个名称叫onCreate的方法.该方法是在Activity创建时被系统调用,是一个Activity生命周期的开始. onCreate方法的参数savedInstanceState ...
- Android(java)学习笔记267:Android线程池形态
1. 线程池简介 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力. 假设一个服务器完成一项任务所需时间为:T1 创建线程时间, ...
- Android(java)学习笔记71:生产者和消费者之等待唤醒机制
1. 首先我们根据梳理我们之前Android(java)学习笔记70中关于生产者和消费者程序思路: 2. 下面我们就要重点介绍这个等待唤醒机制: (1)第一步:还是先通过代码体现出等待唤醒机制 pac ...
- Android(java)学习笔记167:Java中操作文件的类介绍(File + IO流)
1.File类:对硬盘上的文件和目录进行操作的类. File类是文件和目录路径名抽象表现形式 构造函数: 1) File(String pathname) Creat ...
- Android(java)学习笔记160:Framework运行环境之 Android进程产生过程
1.前面Android(java)学习笔记159提到Dalvik虚拟机启动初始化过程,就下来就是启动zygote进程: zygote进程是所有APK应用进程的父进程:每当执行一个Android应用程序 ...
- Android(java)学习笔记206:利用开源SmartImageView优化网易新闻RSS客户端
1.我们自己编写的SmartImageView会有很多漏洞,但是我们幸运的可以在网上利用开源项目的,开源项目中有很多成熟的代码,比如SmartImageView都编写的很成熟的 国内我们经常用到htt ...
- Android(java)学习笔记219:开发一个多界面的应用程序之两种意图
1.两种意图: (1)显式意图: 在代码里面用intent设置要开启Activity的字节码.class文件: (2)隐式意图: Android(java)学习笔记218:开发一个多界面的应用程序之人 ...
- Android(java)学习笔记211:Android线程池形态
1. 线程池简介 多线程技术主要解决处理器单元内多个线程执行的问题,它可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力. 假设一个服务器完成一项任务所需时间为:T1 创建线程时间, ...
- Android(java)学习笔记11:生产者和消费者之等待唤醒机制
1. 首先我们根据梳理我们之前Android(java)学习笔记70中,关于生产者和消费者程序思路: 2. 下面我们就要重点介绍这个等待唤醒机制: (1)第一步:还是先通过代码体现出等待唤醒机制 下面 ...
随机推荐
- 【原】K3Cloud平台开发之Python插件
有时候我们的表单可能很简单,只是一个简单交互的表单,但有可能还是要劳师动众的给它建个工程写个插件,是不是很不爽?例如我有如下一个表单: 功能很简单就是选个业务对象,收集绑定几个字段名,然后确定返回一个 ...
- 面试cookie
cookie : 存储数据,当用户访问了某个网站(网页)的时候,我们就可以通过cookie来像访问者电脑上存储数据 1.不同的浏览器存放的cookie位置不一样,也是不能通用的 2.cookie的存储 ...
- Apriori算法在购物篮分析中的运用
购物篮分析是一个很经典的数据挖掘案例,运用到了Apriori算法.下面从网上下载的一超市某月份的数据库,利用Apriori算法进行管理分析.例子使用Python+MongoDB 处理过程1 数据建模( ...
- Codeforces 713 C Sonya and Problem Wihtout a Legend
Description Sonya was unable to think of a story for this problem, so here comes the formal descript ...
- [BZOJ 3888] [Usaco2015 Jan] Stampede 【线段树】
题目链接:BZOJ - 3888 题目分析 首先,计算出每个线段在 x 坐标 0 处出现的时间开始点和结束点,就转成了时间轴上的线段. 然后就是看每条线段是否被 y 比它小的线段完全覆盖了.注意求出的 ...
- [BZOJ 1559] [JSOI2009] 密码 【AC自动机DP】
题目链接:BZOJ - 1559 题目分析 将给定的串建成AC自动机,然后在AC自动机上状压DP. 转移边就是Father -> Son 或 Now -> Fail. f[i][j][k] ...
- <jsp:forward>、requestDispatcher和sendRedirect()的区别
1.会话信息保存在服务器内存上,可以断续访问,和cookie相比,其保存在服务器上. 2.男人就像蓝牙:只有在你接近时,他才会找上你.当你离开后,他便又去找其他的"设备"了.女人就 ...
- app内购提示,您已购买此商品,但未下载
出现这样的问题,是支付没有finish造成的,一般在支付过程中断网了,下次再购买同一商品的时候就会出现这样的问题, 解决办法,在点击购买的时候判断支付队列中是否有为finish的商品,若有,则进行处理 ...
- spoj PARTIT
三维DP 第K字典序从左向右找 根据dp数组的值算出每一位该打印什么 代码: #include <cstdio> #include <cstring> using namesp ...
- Xstream之常用方式与常用注解
示例代码 Blog teamBlog = new Blog(new Author("Guilherme Silveira")); teamBlog.add(new Entry(&q ...