#Java

今天TJ君学到一个新名词 电子游戏阳痿,是指: 作为一个曾经爱玩游戏的人,在时间充裕、精力良好的状态下,依然不能把注意力集中在游戏上,已经失去了享受游戏的乐趣 TJ君看了看自己,似乎就是这个症状,毕竟现在更多的精力都放在了编程和学习上,不做点什么总觉得心里慌慌。 不过即使不再想玩太多的游戏,TJ君骨子里还是对游戏有一股热爱,所以今天就想来跟大家分享一个用JAVA写的塔防游戏~ Mindustry 作为一款塔防游戏,Mindustry的各种设置中规中矩,玩家需要建造完善的传送带防御矩阵,用来给防御塔提供弹药,生产更多的材料,保护自己的家园,隐隐约更多的是考验玩家的资源管理能力。 游戏的实际运行展示效果看上去也是非常舒服,作为一款塔防,还有迷雾效果。玩到后期满屏幕的建筑,实在是需要良好的逻辑运算能力才能搞定,幸好程序猿们这方面都是很强滴! 需要要注意的是,如果想自己编译游戏,需...

上一篇说完了Java11的新特性,本篇接着说一下Java12.Java 12 对开发者有用的特性并不是特别多,不过实用性还是有的。 字符串增强Java 12 进一步对字符串操作进行增强,增加了两个方法。 字符串缩进String indent(int n) 会根据参数n对字符串进行缩进。具体的规则是 当n>0时,会在字符串的每一行开头插入n个空格,字符串整体右移。 当n<0时,会在字符串的每一行开头删除n个空格,如果实际的空格数小于n,删除该行所有空格,但是并不会换行。 来实验一下: String text = " Hello \n Java12";System.out.println("缩进前");System.out.println(text);System.out.println("右缩进俩字符");String indent2 = text.indent(2);...

10月的TIOBE编程语言排行榜发布了最新一期榜单,雄踞榜首多年的Java终于让出了榜首位置,Python成功登顶。一时间,关于Python的吹捧与对Java的看衰持续引发热议。“世界上只有两种编程语言,一种广为诟病,另一种没人用”。C++之父的这句名言用来形容Java同样合适,作为企业级的编程语言,Java不仅在中国互联网大厂中有着广泛的应用,在世界范围内更是有着庞大的生态和就业机会。 编程语言之争是技术圈经久不衰的话题,国内开发者培训业务多了起来以后,关于编程语言的话题炒作更是此起彼伏。但雄踞榜首多年,Java的下滑也并非空穴来风,而是有其深刻的历史背景所在。这个背景,或许就是云原生时代的来临。 以容器为代表的云原生技术或者说理念,有着弹性可扩展、松耦合、容错性好、易于管理、解放运维、可频繁变更的优势,这极大地降低了开发部署的门槛,让云计算大大地往前、向下走了一步。这本该是一次编...

Java 11是自Java 8以来的又一个LTS版本,是目前全球使用最多的LTS版本之一。今天我们接着在Java 9 到 Java 17系列文章中来认识针对普通开发者的Java 11。 字符串API增强在Java 11中,针对String的操作进一步得到加强。避免我们在很常见的场景中引入额外的、复杂的API。 isBlank()用来判断字符串是不是空字符""或者trim()之后(" ")为空字符: String blankStr = " ";// trueboolean trueVal = blankStr.isBlank(); lines()将一个字符串按照行终止符(换行符\n或者回车符\r)进行分割,并将分割为Stream流: String newStr = "Hello Java 11 \n felord.cn \r 2021-09...

在上一篇我们对Java 9的新特性进行了一些回顾,今天接着来看看Java 10带来了什么特性。之所以需要把Java 8 到Java 17的特性归纳一遍,因为Java社区对Java 17的重视程度前所未有。话不多说,让我们走进Java 10。 Java 10从Java 10 开始,Java的迭代周期缩短为半年,半年发布一个版本。 局部变量类型推断在Java 6时初始化一个Map需要我们这样来声明: Map<String, String> map = new HashMap<String,String>(); 事实上泛型方法的参数可以通过上下文推导出来,所以在Java 7 中简化为: Map<String, String> map = new HashMap<>(); 到了Java 10 进一步升华了类型推断,我们看一个例子: var ma...

Java 17 是Java 最重要的一个LTS版本之一,但是直接从Java 8 过渡到Java 17跨度太大了,势必有些困难。所以胖哥抽时间梳理了一下从Java 9到Java 17的一些常用API的变动。今天先来看看Java 9 都有什么东西。 Java 9Java 9 最大的变化就是引入了一个JShell和模块化,日常并没有用太多,所以今天不花时间在这些功能上面。 新的创建集合的方法用过谷歌Guava类库的知道,Guava提供了创建集合的静态工厂方法,而且能够推断泛型,举个例子: List<Person> list = Lists.newArrayList();Map<KeyType, Person> map = Maps.newLinkedHashMap(); 而原生态需要各种new来定义。Java 9改善了这一现状,现在你可以: // [1, 2, 3,...

Java 最重要的一次更新:JAVA 17 正式发布,这是一个LTS(长期支持)版本,带来了不少有用的新特性。Java 17 属于长期支持版本 (LTS),将会获得 8 年的技术支持,直至 2029 年 9 月。 Java 17 总共包含 14 个 JEP,具体如下: Restore Always-Strict Floating-Point Semantics 恢复始终执行严格模式 (Always-Strict) 的浮点定义 Enhanced Pseudo-Random Number Generators 添加增强的伪随机数生成器 New macOS Rendering Pipeline 为 macOS 引入新渲染管道 macOS/AArch64 Port 支持将 JDK 移植到 macOS/AArch64 架构 Deprecate the Applet API for Remov...

什么是设计模式 设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。 为什么要学习设计模式 看懂源代码:如果你不懂设计模式去看Jdk、Spring、SpringMVC、IO等等等等的源码,你会很迷茫,你会寸步难行 看看前辈的代码:你去个公司难道都是新项目让你接手?很有可能是接盘的,前辈的开发难道不用设计模式? 编写自己的理想中的好代码:我个人反正是这样的,对于我自己开发的项目我会很认真,我对他比对我女朋友还好,把项目当成自己的儿子一样 设计模式分类 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。 行为型模式,共十一种:策略模式、模板方法模式、...

今天到工作室比较晚,在电脑前吃着早饭,看到提示IDEA提示升级,寻思已经有好久没有升过级了。一样等着,就升级下吧。 升级完毕重启之后,突然发现好多错误,原来的应用也没法启动了。仔细一看报错信息,是由于Lombok相关的注解似乎都没有生效。 比如:用到@Slf4j的类里,会有类似这样的报错: java: 找不到符号 符号: 变量 log 位置: 类 com.didispace.UserService IDEA还提示,现在使用的编译器不支持lombok java: You aren't using a compiler supported by lombok, so lombok will not work and has been disabled. Your processor is: com.sun.proxy.$Proxy26 Lombok supports...

一直以来,写日常问题、前沿技术和架构思考类的文章比较多,今天为什么突然来说说Swing这个陈年老技术呢? 因为在CSDN上看到了这样的一篇文章: 可以看到作者对于学Swing还是挺愤怒的,不过确实Swing现在很少用了。但我的观点还不是那么绝对,因为从个人成长来说,Swing的学习确实给到了不少收获。开始也没打算专门来写篇文章说说看法,然后上了一下掘金,居然就又看到了这篇文章(强大的推荐机制): 开始看标题格式还以为是同一篇,仔细看才知道原来是驳前面那篇的,对于后面那篇的不少观点,个人还是比较认同的。 同时也因为作者的观点,联想到经常有读者跟我聊遇到职业瓶颈的问题,与我给出的建议有很多不谋而合的认识,所以还是想写一篇文章来说说。 首先,我尊重每个人对技术学习的观点,这里不评论到底谁对谁错,我就结合自己的学习和成长路径,谈谈这个问题的看法吧。如果屏幕前的你是正在读书的学生或是遇到...

一直关注Java的小伙伴想必或多或少听说过业界两位大佬,谷歌和甲骨文那场旷日持久的关于Java代码的侵权诉讼案,案件索赔高达近百亿美元。 事情的起因在于2010年甲骨文收购Sun之后获得了Java技术的一系列知识产权,随即起诉另外一位业界巨头谷歌,称其开发安卓系统时非法复制旗下子公司的Java api代码数万行。从而开始了一场十年的拉锯战: 2010 年,甲骨文起诉谷歌侵犯了与 Java 相关的专利和版权,初步索赔 80 亿美元; 2012 年 5 月,加州北区联邦法院裁定谷歌没有侵犯 Java 版权,Java API 不受版权保护;同年 10 月,甲骨文上诉至联邦巡回上诉法院。 2014 年,美国联邦巡回上诉法院推翻了一审部分结论,称必须尊重软件的版权保护,甲骨文赢得上诉,此案被发回重审。甲骨文此时将索赔提升至93亿美元。同年 10 月,谷歌申请美国联邦最高法院听审此案。 201...

前几日 Java 16 发布了,发现还是有童鞋不太了解Java目前的版本机制,所以看到了这样的留言: 那么为什么大家都还在用 Java 8 呢? 从这张图可以一目了然,大家平时最喜欢的是什么?当然是白嫖啦~ 而从JDK 8u211开始往后的版本,可都是需要商业收费的,所谓的商业收费,就是你自己开发程序使用不打紧,但是一旦当你开发的程序如果用于商业用途,也就是你的程序给你赚钱了,那此时此刻Oracle可是要跟你收费的,你的JDK的使用需要缴费获得授权才是合法的。 有的人会问,如果我不缴费直接用呢?当然,Oracle也是不知道这个事情的,天底下那么多程序员他不可能每个都时刻紧盯有没有付费。 不过万一你真的有那么点才华,你的产品越做越大,越被人熟知的话,总有一天树大招风会引起Oracle的注意,指不定哪天就来跟你打打知识产权的官司。毕竟这是Oracle的惯用手法了,小编毕业前在某视频网...

还记不记得求学时代各种复杂的数学公式?sin、log2、tan等等等,是不是看到这就觉得算起来麻烦? 通过MXReflection框架,你可以使用Java计算这些曾经我们觉得无比复杂的数学运算和函数,只需使用与类相关的字段。 MXReflection可以从指定字段读取值,并将结果注入@Expression注释字段。 <dependency> <groupId>com.github.ismail-mekni</groupId> <artifactId>mxreflection</artifactId> <version>1.0.1</version></dependency> 那如何使用这个框架呢? 很简单,只需要两个java注释。 1、通过@Arg值,我们可以指定要在目标...

前段日子在社群(点击加入)里看到有人讨论关于Service层接口的问题,DD也经常碰到周围的新人有问过一些类似的问题:一定要写个Service层的接口吗?Service层的接口到底用做什么用的呢?好像都没什么用啊? 我的看法Service层在业务逻辑不复杂的时候,似乎是没有什么用,但是随着应用迭代,业务逻辑变得复杂了之后,这一层是非常有用的。 主要表现在这几个方面: 1、更适合用来处理复杂的业务逻辑,可能会涉及多张表的操作,甚至还混杂着消息投递、接口调用等一系列的复杂综合性事务,这也是我们常说的事务管理所处的层次。 2、对表现层的复用支持,往往我们一个业务逻辑处理,不会单单只应用在一个API接口或页面上,如果直接把这部分内容写到Controller中,那当出现重复操作的时候就会产生复制黏贴,以后再要维护这段逻辑就麻烦了 3、对单元测试的支持,通过单独的一层service实现业务逻辑,...

当我们使用Spring Initializr来创建Spring Boot工程的时候,有没有发现在工程根目录下有两个名为mvnw的文件: 从命名、图标、扩展名来猜测,这两个文件的作用应该是一样的,只是cmd文件应该是用在windows下跑的,而另外一个则是用于linux环境下跑的。 那么这个文件到底是用来做什么呢?下面我们一起尝试了解一下: 第一步:打开读一下 因为内容较多,我这里就不放出来了。内容也非常易懂,只要你了解shell和maven,就能知道这个脚本主要做这几件事: 检测你是否有安装Maven,如果没有,就自动下载一个(这样才能完成后续的构建任务) 检查你是否有安装Java或者配置是否正确,这个无法自己完成,如果报错了,就要自己处理一下,比如JAVA_HOME没有,那就自己配置下。 检查否存在版本不兼容的情况,如果不兼容他会下载合适的版本来帮助你完成构建 更多检查的...