java知识点汇总

第一个java程序

public class test {
    public static void main(String[] args) {
        System.out.println("hello java");
    }
}
阅读更多
ags/%E7%B3%BB%E7%BB%9F/">系统1
组件化1
终端2
网易云1
网络安全1
跨端融合1
Spring MVC+Spring+Mybatis项目讲解

IntelliJ IDEA

初衷

视频下载

开发环境

演示内容




结束语

Java 开发基础规范(初稿)

IntelliJ IDEA

本文初衷

  • 以本篇为引,获取到有识之士的一些意见或是看法,促进成长!

重要说明

  • 2017-01:阿里公开了他们自己的规范,写得还是很合理的,也很清晰,重点推荐。
    • 在 Google 里面搜索:阿里巴巴 JAVA 开发手册

命名、规范

Java 相关命名、规范

  • 命名:
    • Java 类名命名(用名词性单词组合)
      • 普通类名:首字母大写,需要两个、多个单词表达的,使用大驼峰命名法进行命名,eg:CategoryService
      • 抽象类名:在普通类名的基础上对其命名后加上 Abstract,eg:CategoryAbstract
      • 自定义异常类名:在普通类名的基础上对其命名后加上 Exception,eg:CategoryException
      • 队列类名:在普通类名的基础上对其命名后加上 Queue,eg:CategoryQueue
      • 后台任务类名:在普通类名的基础上对其命名后加上 Task 或 Job,eg:CategoryTask、CategoryJob
      • Servlet 类名:在普通类名的基础上对其命名后加上 Servlet,eg:CategoryServlet
      • Filter 类名:在普通类名的基础上对其命名后加上 Filter,eg:CategoryFilter
      • 工厂类名:在普通类名的基础上对其命名后加上 Factory,eg:CategoryFactory
      • 工具类名:在普通类名的基础上对其命名后加上 Util,eg:CategoryUtil
      • 测试类名:在普通类名的基础上对其命名后加上 Test,eg:CategoryServiceTest
      • 数据库访问层接口类名:在普通类名的基础上对其命名后加上 Dao,eg:CategoryDao
      • 数据库访问层实现类名:在普通类名的基础上对其命名后加上 DaoImpl,eg:CategoryDaoImpl
      • 业务层接口类名:在普通类名的基础上对其命名后加上 Service,eg:CategoryService
      • 业务层实现类名:在普通类名的基础上对其命名后加上 ServiceImpl,eg:CategoryServiceImpl
      • 控制层类名:在普通类名的基础上对其命名后加上 Controller,eg:CategoryController、CategoryAction、CategoryActivity
      • 对象扩展类名:在普通类名的基础上对其命名后加上 VO,eg:CategoryVO(Value Object)、CategoryDTO(Data Transfer Object)、CategoryPOJO(plain ordinary java object)
    • 常量名:全部字母大写,有多个单词用下划线分隔,eg:MY_AGE
    • 常规变量名:首字母小写,需要两个、多个单词表达的,使用小驼峰命名法进行命名,eg:categoryName
    • 复数变量名:首字母小写,需要两个、多个单词表达的,使用小驼峰命名法进行命名,eg:
      • List:categoryList
      • Map:categoryMap
      • Set:categorySet
    • package 名:所有单词全部小写,即使有多个单词组成,且不能使用下划线连接,或是其他任意字符连接,eg:googlebook
    • 方法参数名:首字母小写,需要两个、多个单词表达的,使用小驼峰命名法进行命名,eg:categoryName
    • 方法命名(用动词性单词开头):
      • 数据库访问层方法名
        • saveCategory()
        • deleteCategoryByObject()
        • deleteCategoryById()
        • updateCategoryByObject()
        • updateCategoryById()
        • findCategoryList()
        • findCategory()
      • 业务层方法名
        • saveCategory()
        • deleteCategoryByObject()
        • deleteCategoryById()
        • updateCategoryByObject()
        • updateCategoryById()
        • findCategoryList()
        • findCategory()
        • initCategory()
        • openConnection()
        • closeConnection()
        • writeFile()
        • readFile()
    • 视图层(JSP、FreeMarker 等):
      • categoryList
      • categoryAdd
      • categoryUpdate
      • categoryEdit
      • categoryDetail
      • categoryTree
  • 规范:
    • 当一个类有多个构造函数,或是多个同名方法,这些函数 / 方法应该按顺序出现在一起,中间不要放进其它函数 / 方法
    • 导入包的时候,import 后面不要使用通配符 * 来代替有些包的导入
    • 大括号与 if, else, for, do, while 语句一起使用,即使只有一条语句(或是空),也应该把大括号写上
    • 不要使用组合声明,比如 int a, b;
    • 需要时才声明,并尽快进行初始化
    • 注解紧跟在文档块后面,应用于类、方法和构造函数,一个注解独占一行
  • 注释:
  • 块注释
/*
logger.info("---------开始---------");
SubmitOrderInfo submitOrderInfo = getSubmitOrderInfo(orderId);
*/
  • 行注释,只用来注释
//ResultInfo resultInfo = orderService.orderStateUpdate(voucherNo);
  • 行注释,用来解释
private int categoryId = 1; // 1 是顶级分类的 ID

Mysql 相关命名、规范

  • 表名:全部小写,需要两个、多个单词表达的使用下划线隔开,eg:prd_category

  • 字段名:全部小写,需要两个、多个单词表达的使用下划线隔开,eg:category_name

  • 注释:

  • 行注释

    • # 下面内容需要先执行
    • -- 下面内容需要先执行
  • 块注释

/*
下面内容需要先执行
需要注意的是:分类的 ID 需要先检查
*/
  • 程序 SQL 补丁文件命名,eg:
    • 20160306-update-更新所有会员密码
    • 20160312-delete-删除指定会员密码
    • 20160313-insert-新增会员数据
    • 20160315-alter-更新会员邮箱字段长度

编码

  • 数据源连接:jdbc:mysql://localhost:3306/youshop?characterEncoding=utf-8
  • Java 文件编码:UTF-8
  • XML 文件编码:UTF-8
  • Properties 文件编码:UTF-8
  • Mysql 字符集:UTF-8

其他

  • Tab 缩进为 4 个空格,使用 IntelliJ IDEA 标准格式化即可
  • TODO 标记必须使用个人自定义 TODO,不能使用公共的
  • SVN、Git 提交必须有 Commit Message

资料

感谢

  • 感谢 Lindp 提供意见

为什么不尝试下 IntelliJ IDEA?我想劝说你

IntelliJ IDEA

本文对象

  • Eclipse、MyEclipse、NetBeans、Vim、Sublime Text 重度患者

本文目标

  • 本篇不讲 IntelliJ IDEA 技巧类的具体东西,关于技巧这类东西我已经系统整理过了,你可以去这里看:https://github.com/judasn/IntelliJ-IDEA-Tutorial
  • 写这篇文章主要目的是想给你留下一个印象,关于一个沉浸式的 IDE。
  • 学习过程的核心思想:IntelliJ IDEA 跟 Eclipse 或是其他 IDE 完全不一样,所以放下过去的思维。
  • 懂 Maven 和 Gradle 学习它会更快,因为它本身就是模块化的。

过去有感

  • 在我记忆中,所有的大学 Java IDE 只有一个:Eclipse,所以我也是这样过来的。
  • 我知道做 Java 开发的你们 Eclipse 用得很习惯,可能要怪大学老师。也知道 MyEclipse 能解决做 Java 开发的常见问题。所以我理解你们还在坚持它们的原因,就像几年前刚到一家公司的时候,我暗地里认为我的 MyEclipse 会是如何如何地好,了解的插件是如何如何多。你们那个 IntelliJ IDEA 界面丑、默认字体丑、占用内存又高,我是排斥的。
  • 可是为了融入圈子我只能自己去适应周边的人,我开始逼着自己去了解 IntelliJ IDEA。后来,我专门为它配置了一台 i7、SSD、16G 的机子来伺候它。

IntelliJ IDEA 特色

  • 下面我说几个它特殊的地方,跟 Eclipse / Myeclipse 有重叠或是类似的我这里你就不说了,这些细节在你学习的过程中你自己会发现、对比。
  • 我是这样形容 IntelliJ IDEA 的:沉浸式 IDE。
  • 鲜明特色:
    • 特点一
      • 下面一些语言的支持需要额外装官网提供的插件,具体可以到插件库里找
      • 支持的语言/平台
        • Java、JavaScript、TypeScript 、CoffeeScript、Node.js、AngularJS、React、JRuby、ActionScript、SASS、LESS、HTML、CSS
        • Bash、Markdown、Kotlin、PHP、Python、Ruby、Scala、Clojure、Groovy、Android、PhoneGap、Cordova、Ionic
      • 支持的框架
        • Spring、Spring Boot、Spring MVC、Hibernate、Struts、Mybatis、Flex、JSF、Play
        • Web Services、Grails、GWT、Vaadin、Guice、FreeMarker、Velocity、Thymeleaf
      • 支持的构建工具Maven、Gradle、SBT、Grunt、Bower
      • 支持的应用容器Tomcat、TomEE、WebLogin、JBoss、Jetty、WebSphere
      • 支持的版本工具Git、SVN、CVS、Mercurial、Perforce, ClearCase、TFS
      • 额外支持
        • 自带反编译、可以在反编译的类中 Debug、如果是开源框架会自动帮你下载源码
        • 终端、数据库 GUI(Oracle、SQL Server、PostgreSQL、MySQL),REST Client
    • 特点二
      • 它有美妙的快捷键,以及任何地方都支持自定义快捷键,是一个完全可以离开鼠标的 IDE,撒谎的人是小狗。
    • 特点三
      • 无限制、无条件地搜索。IntelliJ IDEA 是有索引的概念,也因为有索引的原因,我们对整个项目进行全文检索是非常非常非常快的,但是也是这个索引,所以当它首次启动某个项目的时候都需要先扫描一下这个项目的所有文件来创建成它的索引,所以,IntelliJ IDEA 首次启动某个项目花的时间会比较多、而且卡。但是我认为这是值得的,后面有无数次的开发我们可以加倍返还。
    • 特点四
      • 高效的导航。IntelliJ IDEA 除了各种搜索无敌,还有各种导航。
      • 你任何时候都可以快速到某个类的父类、子类、接口、测试类、引用地,可以快速到某个变量、方法、文件、包。
  • 沉浸式的原因是:IntelliJ IDEA 一站解决基本上市场上常见的开发所需。
  • 也许你第一眼看到上面的关键字会认为我在说梦话,而我也搞不懂 JetBrains 那些人

结束语

  • IntelliJ IDEA 功能多,耗内存,后端开发内存最好 8 G 以上,前端开发 4 G 以上。
  • Android 的开发人员是比较有权力说 Eclipse 和 IntelliJ IDEA 的差异的,希望 IntelliJ IDEA 家的产品没有托你后退。

构建工具-Maven-相关知识-整理专题

本文初衷

  • Maven
  • 整理自己脑袋中、收藏中的那些资料,来一次清空,让自己重新开始。
  • 整理这篇的起点是本人已经会使用 Maven,并且已经使用了一年多,所以我个人觉得这篇文章对完全不懂 Maven 来讲是有压力的,但是对于刚刚入门 Maven 的人是有帮助的。
  • 如果你认为一篇文章就可以让你完全了解 Maven,那你是在鄙视官网帮助文档书写者。
  • 以此篇为引,希望可以得到你的建议,我只想成长,真心感谢!(鞠躬)

先总结

  • 如果你是学习 Java 或是说 JVM 语言相关的内容的话,在实际使用中有一个东西你是绕不过去的,构建工具。等你到企业还有一个东西你也绕不过去,持续集成。
  • 在说持续集成前,先简单地解释两个概念:集群、分布式
    • 应用集群:同样的一套程序/代码,放在一批服务器上,每台服务器上的代码一样。
    • 应用分布式:不同的组件代码,放在一批服务器上,不同的服务器放不同模块的代码。
  • 在大公司,现在的项目基本都是分布式的,而要做到分布式那就得尽可能地分层、分割、分布。也因为这样,一个项目一般都是由不同模块组合成的。公司里在不同的地区或是部门做不同的模块,尽量减少部门与部门、地区与地区模块的耦合度,也就是降低必要的联系,让他们尽可能的能独立开发、测试。
    • 这样的拆分,对一个项目的好处是:
      • 分布式架构:具有高性能、高可用、可伸缩、可扩展等优点
      • 公司成本会降低,类似阿里的去 IOE
      • 效率会提高
      • 容错能力更强
      • 灵活性更高
    • 举一个两者简单的对比例子
      • 应用分布式
        • 一个采用分布式架构的电商,在做抢购的特殊时候,压力特别的大的部分应该是:购物车、订单、库存、日志等这些跟购物有关的模块,那既然这几个模块压力大,那我们就在抢购前多部署几套跟购物业务相关的模块到服务器上,此时要求这类服务器性能只要能承载对应的模块即可。其他比如:资讯、客服等无压力模块就原样部署即可,无需变动。
      • 应用集群
        • 一个采用应用集群架构的电商,在做抢购的特殊时候,为了抗住压力,必须把整个应用一套一套地部署到新服务器上,此时就要求服务器性能要好,能承载整个应用。
      • 对比总结:降低成本
      • 扩展内容
        • 在未来容器虚拟化(以 Docker 为主)的情况下,模块化的组件更容易部署到这些容器上面,也就很容易发生这样的事情:一台服务器部署非常多模块,成本就会降得更低。
  • 我们已经知道了分布式效益更好,我们也知道分布式的系统都是需要拆分的,对项目进行拆分,把一个大项目拆分成很多小模块项目,然后大家彼此依赖或通信。此时问题来了:如何高效地依赖。
  • 高效地依赖解决办法是:自动化的构建 + 持续集成。
    • 在目前 Java 界,最常用的构建工具就是:Maven
    • 在多模块的项目中,还是以一个电商项目为例,购物车模块肯定是会依赖 core 模块、Parent 模块等,而这些模块的开发者在不同城市或是不同部门。在协同开发中,不可能每次他们一有更新就得专门安排一个人来交付依赖,这种方式效率是非常低的。
    • 今天整理这个 Maven 材料其实是为了后面整理持续集成做的准备的,大家必须有这个基础才能说后面的持续集成,后续的持续集成会涉及到:TeamCity、Jenkins、Hudson

Maven 知识

Maven 是什么

为什么会出现

  • Google 搜索:(这些一般都是一些故事,你自己来判断,别人的坎坷是你成长的基石)
    • 关键字:为什么用 maven
    • 关键字:why use maven
    • 关键字:What does Maven do
    • 关键字:Why do we need Maven
    • 关键字:Why should we use Maven

哪些人不喜欢它

  • Google 搜索:(这些一般都是一些故事,你自己来判断,别人的坎坷是你成长的基石)
    • 关键字:不用 maven
    • 关键字:Why I Don't Use Maven

为什么学习它

  • 构建工具是 Java Web 开发者绕不过去的一道坎

我要怎么做(按优先级从高到低排序)

资料整理

过程细节

  • 过去 2014 年里,基本上关于 Maven 的知识都是在 Google 上搜索出来的。
  • 在 2015 年才看到极客学院上面有成套资料

结束语

  • Maven 也许开始要过时了,但是即使 Gradle 的时代要到来了,你会害怕吗?我想你不会的,因为你会学习知识的方法,更而且他们还差不多。