前言
编程语言没有好坏之分,只有合不合适一说。由于公司战略发展方向变动,PHP 项目需要减少投入,重点发展 JAVA 项目,所以作为一名优秀的开发者主动拥抱变化,踏上 JAVA 之路。本文着重分享一下学习 JAVA 的心得体会和如何快速上手 JAVA 迭代。
学习JAVA
准备阶段
大学时学过的 JAVA 现在仔细一想好像已经是很遥远的事情了,而且 DEMO 和企业级开发有着天壤之别,所以下了一番功夫,花了一周时间做了一下基础准备工作(东西很多,没事就看看),划重点:
- 强类型:JAVA 是强类型语言,定义变量和方法的时候需要先声明类型,对于洒脱不羁的 PHP 开发者而言,需要按部就班的适应适应。
- 反射:反射是一种专门为静态语言提供的技术,用于在程序运行时动态地改变程序的状态和行为;通过 Class 实例获取 class 信息的方法称为反射。JVM总是动态加载 class ,可以在运行期根据条件来控制加载class。
- 注解:注解是Java语言用于工具处理的标注,很重要,怎么理解呢,初步学习不需要深究,看的代码多了,依葫芦画瓢用就行了,新手常见的也就几种
- 范型:泛型就是编写模板代码来适应任意类型;优点是使用时不必对类型进行强制转换,它通过编译器对类型进行检查;需要注意的点:可以把
ArrayList<Integer>
向上转型为List<Integer>
(T
不能变!),但不能把ArrayList<Integer>
向上转型为ArrayList<Number>
(T
不能变成父类)。
- 常用集合:List,Map,Set,Deque,Queue,Iterator,Collections 这些基础是必须掌握的。
函数式编程:如何使用Stream,Stream的map、filter、reduce、collect 方法。
- Spring 框架学习:IOC容器、Bean管理注解、AOP操作、JDBC操作数据库。
环境配置
- 环境问题
- 安装homebrew,用来进行后续软件安装会方便
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
- a. java环境安装
-
Java编译器
-
IDEA相关插件(按需要安装)
Spring Assistant spring相关支持,贴近企业版本功能
Alibaba Java Coding Guidelines 阿里代码规范检查工具
Lombok 自动生成工具,简化get/set
Maven Helper 方便jar包管理
RestfulToolkit RESTful 服务开发辅助工具集,方便接口查询
Free Mybatis plugin mybitis快捷工具,代码->xml
GenerateAllSetter 快捷生成对象的全部set方法
注意:如果你的IDEA社区版本是2020.3版本的话,lombok是有bug的,开发没问题运行编译则失效!
//添加preferences -> Compiler -> VM Options
-Djps.track.ap.dependencies=false
- 修改redis、mysql等配置项
至此,本地项目环境应该搭建完成,本地项目可以进行正常启动。
快速上手JAVA迭代
第一次迭代
公司JAVA项目代码是比较完善的,业务功能模块对应的微服务应用拆分明确,这个前提大大提高了开发效率,此外还需要感谢JAVA团队小伙伴们对我这个小白的帮助,尤其是一些配置相关事项,基本流程如下:
- maven下载配置
重要的事情说3遍,前期请教JAVA老开发如何配置,后期有空自己一定要单独走一遍流程,后期有空自己一定要单独走一遍,后期有空自己一定要单独走一遍。
- 如何定义接口地址
- 如何写代码
前期一定要按照JAVA语法手敲每个单词,这样可以加深对语法的记忆,少做复制粘贴。
- 如何配置并操作数据库
- 如何配置操作redis
项目中肯定会有redisManager之类的工具类。
- 本地运行项目
运行application。
- 部署生产环境
公司使用容器化,本地运行通过、测试环境测试验收通过以后,直接将对应的代码合并到指定分支即可实现部署生产环境。
思维模式转变
数据结构
PHP 中一个array可以解决90%的需求问题,但是JAVA开发中常用的数据结构是ArrayList
和HashMap
,简单对应关系如下:
PHP | JAVA |
---|---|
$arr = [1,2,3]; | List list = new ArrayList();list.add(1);list.add(2);list.add(3); |
$arr = ['a' => 1, 'b' => 2, 'c' => 3]; | HashMap<String, Integer> hashMap = new HashMap<>();hashMap.add("a", 1);hashMap.add("b", 2);hashMap.add("c", 3); |
进程和线程
- PHP是多进程,worker进程处理请求,master进程不处理请求,只负责维护worker进程,PHP-FPM支持进程池的特性,不同进程池相互隔离,互不影响。
- JAVA可以实现一个进程执行多个线程,SpringBoot提供服务时是一直运行的,尤其需要注意静态变量的使用。
JAVA牛逼的jar包
多看,多学JAVA相关jar包,会发现很多功能都有人帮你实现了。
总结
转JAVA的这段经历,其实最困难的一段记忆是对未知的恐惧,瞻前顾后担心自己能力不行,真正下定决心后,你会发现没有笨的程序员,只有懒的程序员,现阶段能够快速上手JAVA迭代对我来说已经是踏出了一小步。但是对于整个JAVA生态来说,本文所讲述的只是一些最基础的入门知识和一个初学者的一些踩坑之路,不得不承认JAVA很难,未来必须要投入更多的精力来学习进步。
学无止境,愿所有技术爱好者,都能在自己感兴趣的领域取得理想的成果。