
JAVA相关
文章平均质量分 70
JAVA相关
Marco&GalaxyDragon
这个作者很懒,什么都没留下…
展开
-
在idea中使用gradle,daemon自动退出的问题
最近发现如果在idea中使用gradle,daemon维持时间非常短,而在命令行中运行gradle,默认daemon是存在三个小时的。目测是Idea覆盖了gradle的一些默认配置daemon维持时间很短就导致每隔一段时间(测试大概是1-2分钟)再次运行任务时,该任务的启动阶段就会非常慢,大概需要5-10秒。这个daemon的存在时间在idea里是没法直接设置的,但是在查阅了stack原创 2017-10-15 13:07:16 · 1831 阅读 · 0 评论 -
Kotlin学习笔记(7)-Data Class
上一篇讲到了kotlin的primary constructor是如何大幅度缩减类的亢余代码的,而kotlin中的Data Class,则是更进一步,完全让以往java中编写繁琐的bean代码变成了一句就可以搞定的事情。当然有人可能会说,就算用java,那些亢余代码ide也都可以生成,这话确实没错,但是kotlin中的data class有一些特性是java里面常规的bean没有的。而且ide生成的原创 2017-10-21 18:55:05 · 2036 阅读 · 0 评论 -
Kotlin学习笔记(6)-构造器
kotlin将构造器分为了两种,分别是primary constructor和secondary constructor,代表了主要构造器和次要构造器。至于为什么分为两种,主要是因为在大多数情况下构造器中做的操作相当类似,所以kotlin提供了一种更加简洁的语法来进行支持,那就是primary constructor。 先回想一下java中的构造器,在很多情况下,我们只是单单的将传入的形参一一对应原创 2017-10-21 17:56:30 · 373 阅读 · 0 评论 -
Kotlin学习笔记(5)-function
kotlin中的方法借鉴了很多c#中的特性。kotlin中的方法特性1.带有名称的变量 在kotlin中可以不按照顺序输入参数,而是直接根据形参的变量名来输入对应的参数(这个特性c#中也有) 2.参数默认值 如果某个形参没有对应的实参传入,则采用默认值,这样可以避免像java中不断的重载函数。(这个特性c#中也有) 有默认值的形参可以不用传值 3.全局方法 kotlin中的方法可以不原创 2017-10-05 14:18:46 · 450 阅读 · 0 评论 -
Kotlin学习笔记(4)-while&for
今天我们来说说kotlin中的while和forkotlin中的while和java里的一模一样,两种格式 关于for,在kotlin中是没有java中常规的for循环的,kotlin中所有的for都相当于java中的foreach,这点可能比较让人震惊。我们先看看kotlin中的一个特殊对象, range对象。 ..是重载过的运算符(和c#,c++运算符重载一样),会返回一个Range对原创 2017-10-05 13:46:04 · 286 阅读 · 0 评论 -
Kotlin学习笔记(3)-when
java中的switch被kotlin中的when取代。我们都知道,java中的switch有非常多不好用的地方,例如只能使用于原始类型和字符串,经常会忘写break导致bug….总之我都是尽量不用switch,而用if elseif的。不过在kotlin中,这些问题都得到了很好的解决,我们看看when是怎么起作用的。 1.首先when是一个表达式,而不像java里的switch是一个单纯的执原创 2017-10-05 13:10:02 · 405 阅读 · 0 评论 -
Kotlin学习笔记(2)-方法,变量
方法kotlin里的方法和java里的有许多不同,我们先看下图 我们可以注意到以下几点 1.方法声明的变化,这个就不详细解释了,只是一个位置的变化 比如java里的方法 等价于kotlin里的 2.kotlin里的if具有表达式的功能,会根据分支返回一个值 所以才有上图的 return if…这种表述出现如果方法只有一句表达式,方法可以不用写花括号和return,该表达式的结果原创 2017-10-04 21:29:16 · 275 阅读 · 0 评论 -
Kotlin学习笔记(1)-类,接口,对象
最近开始学习kotlin,为了加深学习印象,在这里把学习过程中的一些要点摘录一下,如果有错误可以在评论中指出。本文主要着眼与Java和Kotlin之间的异同点。1.首先是extends和implements被一个单独的:取代,无论是继承类还是实现接口都使用一个统一的符号。如图。 通过图片我们还可以注意到 java中覆盖父类方法的@Override注解被override关键字取代 class原创 2017-10-04 20:48:03 · 359 阅读 · 0 评论 -
实用idea代码编辑快捷键
(以下的快捷键是默认设置下,如果你用的快捷键设定是eclipse就不一样了)Ctrl+Shift+Left 从当前光标处选择到该单词的起始位置Ctrl+Shift+Right 从当前光标处选择到该单词的末尾位置Ctrl+Shift+Page Up 从当前光标处选择到该页的起始位置Ctrl+Shift+Page Down 从当前光标处选择到该页的末尾位置保持alt键按下,拖动鼠标来插入多个光标原创 2017-11-25 23:06:11 · 584 阅读 · 0 评论 -
Groovy元编程(1)
Groovy使用ruby也好久了,虽然钟情于ruby语法的无穷灵活性,不过一直苦于没法使用java平台上各种各样的框架。虽然也早有jruby这样的存在,但是速度还是很成问题,而且这种间接的调用,使用起来也感觉不舒服。学习了groovy之后,我觉得,如果喜欢ruby的朋友,都可以来试试jvm平台上的这门动态语言,其元编程的强大能力与ruby可一较高下。 (其实,java平台上有各种语言的翻版,例如k原创 2018-01-28 16:43:02 · 1260 阅读 · 0 评论 -
C++模板VSJava泛型
JAVAjava泛型是实现是通过强制cast。 如 static T test(T a){ return a; } //该方法最后会被转换成如下形式 static Object test(Object a){ return a; } //此时我们所有的调用int i=test(1);//最后也会被转化成如下形式int原创 2018-02-07 00:07:01 · 511 阅读 · 0 评论 -
guava深入理解(5)-IO
除了java之外的其他几种jvm语言,例如kotlin,groovy,scala,在自带的库里,已经对文件以及io操作有了非常大的增强,而相比之下java的一些io方法相当原始,所以我们只能求助于类库。虽然自己写一些工具类并不费什么事,但是guava提供的io方法不仅效率高,而且抽象度也高,所以非常易学。Filesfiles是一个工具类,估计很多人都写过类似的,但是guava是一个被无数人使用过的库原创 2018-01-19 13:47:17 · 602 阅读 · 0 评论 -
guava深入理解(6)-eventbus,Caches
Eventbus学过as3或者js事件流的应该对这个很熟悉了(抽象的addEventlistenter),guava的eventbus基本上可以看成是前者的弱化版。 在gui或者异步编程中,回调模式非常常见,而eventbus就是将这种监听-回调的模式抽象出来。基本上来说,就是一个事件发布者,持有一个eventbus组件,他用这个eventbus来发布事件,然后监听者,则将自己注册到eventbu原创 2018-01-19 14:28:01 · 298 阅读 · 0 评论 -
guava深入理解(4)-集合
如果说guava的null处理,Preconditions,字符串处理很多别的库也有而且还更强。而且如果使用其他jvm语言,kotlin,groovy等,根本就用不上那些类,语言自带的反而更好。那么guava的collection类基本上目前还看不出有其他类库,语法特性可以替代。就算你是使用kotlin,groovy,scala。也可以很好的和guava的collection集成不可变集合Immut原创 2018-01-19 12:02:50 · 626 阅读 · 0 评论 -
guava深入理解(3)-字符串,实用方法,函数式编程
字符串处理Joiner是用来拼接转化集合到字符串的(其实很多动态语言基本上没有太区分字符串和普通集合,很多在集合上能用的方法在字符串上也能用,字符串本来就就是个字符数组)Joiner.on("|").skipNulls().join(new Integer[]{1,2,3,4});Joiner.on("|").useForNull("no value").join(stringList)//joi原创 2018-01-18 20:45:51 · 245 阅读 · 0 评论 -
guava深入理解(2)-前置条件Preconditions
前置条件检测和null处理有异曲同工之妙,也是我们天天都在做的,比如传入一个索引,我们可能需要检查他的值是不是超过了数组大小。说白了,我们会需要写这种检测,还是因为类型系统的问题,类型系统可以限制一个类型能做的事情,却没法限制类型本身的数据。比如一个数字1,和一个数字100,他们是同一个类型,但是代表的却是不同的意义,所以我觉得,这种检测,其实也是属于类型检测的一部分,如果可以的话,我感觉也可原创 2018-01-18 20:13:23 · 331 阅读 · 0 评论 -
guava深入理解(1)-null处理
guava是一个基础型的类库,就是他不是针对某一方面的应用开发的(例如okhttp专门用于网络通信),而是为了弥补java语言的一些设计不好的地方,或者某些缺失的特性,当然,因为guava开发的时候是java6,但现在已经java9了。所以guava里所提供的一些功能已经被java语言自身的改善弥补了,目前java还有一些特性的缺失则可以使用其他jvm语言弥补(例如kotlin),这个我们后面会讲到原创 2018-01-18 19:36:21 · 553 阅读 · 0 评论 -
JAVA与AS2制作一个2D多人游戏(2)
现在开始正式写代码,上一篇讲到客户端与服务器交互的五种类型,这边再提一下,因为我们游戏中的所有交互行为都是属于其中之一的。有了这个做指导,代码写起来就轻松多了,只要先思考属于哪一种类型,也就不会容易写错。1.服务器主动发消息给所有客户端 (例如同步时间,游戏大厅中发送玩家列表给客户端)2.客户端发送消息给服务器,服务器发送消息给除该客户端之外的所有客户端 (例如许多实时RPG游戏中的原创 2016-03-07 18:14:27 · 914 阅读 · 0 评论 -
JAVA printStream乱码问题
printStream是一个字节流,但是有一个输出字符串的方法,因为之前一直没有注意,今天写一个通信程序的时候出现了乱码,后来发现是这个printSteam.println的问题即:虽然printSteam可以输出字符串 但是不管这个字符串原来是什么编码 在输出的时候 都会先转化为默认字符编码的字节 再发送!就是说 假设你操作系统默认编码是gbk 然后你先将一个字符串使用stri原创 2016-11-08 17:55:28 · 8175 阅读 · 0 评论 -
我对ThreadLocal的理解
网上转了一圈,发现很多对ThreadLocal讲解的文章都有些混乱,讲的不够清楚。 这边说一说我自己的理解。 网上有些人将ThreadLocal和synchronized进行比较,其实这两者没什么关系,使用场景也完全不同。 ThreadLocal说白了,只是为了在多线程环境下方便变量的访问和传递罢了。这也就是为什么ThreadLocal的实例常常设为static属性,就是为了方便访问。 例如原创 2017-09-27 13:58:25 · 318 阅读 · 0 评论 -
Java中的四种引用类型分析
java有四种引用类型强引用、软引用、弱引用、虚引用,接下来分别讲一下他们的概念和我遇到过的实际应用类型。强引用就是我们平时使用的引用类型,只要指向对象的变量继续存在,变量指向的对象就不会被回收。StringBuffer buffer = new StringBuffer();弱引用,只要没有任何其他强引用引用到这个弱引用指向的对象,这个弱引用指向的对象就可能会被回收,当你想引用一个对象,但是这个对原创 2017-10-07 21:04:11 · 837 阅读 · 0 评论 -
awt包里的ColorSpace类
ColorSpace代表一个颜色空间。常见的颜色空间有rgb,cmyk,lab等。ColorSpace的方法可以将不同颜色空间中的颜色变换到当前颜色空间中,也可以将当前颜色空间中的颜色变换到其他颜色空间。其实说到底颜色在计算机中的表示就是一串数字,然后我们需要在不同的用途下变换颜色罢了。比如如果要渲染颜色到屏幕,我们手里有一张lab颜色模式的图片,此时我们只能将他的颜色转换到rgb原创 2017-09-21 01:55:43 · 805 阅读 · 0 评论 -
java打包exe实例(使用javapackager)
javapackager是jdk1.7后自带的一个打包工具,可以生成本地exe安装包。 接下来以一个例子说明如何使用。 首先生成常规jar文件,关于如何生成jar文件这里就不细说了。我这里是使用gradle打包。 打包后的目录如下,一个主文件和lib 此时新建一个文本文档,输入如下命令 选项说明 -native exe 说明是生成exe格式的安装包,还可以生成mac\linux下的原创 2017-10-09 14:00:14 · 4360 阅读 · 0 评论 -
javafx加载不同包中的fxml文件
刚才在使用FXMLLoader.load方法时出现了一些问题,主要和路径有关。 项目目录 这个时候如果这样写 是获取不到fxml文件的,必须要在路径前加一个斜杠 如图 如果不加斜杠又想获取到fxml的话,,则对应的class必须和Main.fxml放在一个包中。简单解释一下就是因为getclass.getresource这个路径对应的是当前包下的相对路径,如果想要对应到项目下的原创 2017-10-09 20:31:58 · 3480 阅读 · 0 评论 -
Javafx FXMLLoader的一个坑
刚学javafx,下午出了个bug百思不得其解,搞了好几个小时,后来才发现是一个很简单的坑,被我想复杂了。 如下图,我当初看着orcale的官方文档写的,然后就空指针报错了。 后来发现,我调用的方法不是我想当然的loader的实例方法,而居然是FXMLLoader这个静态方法。 因为实例方法和静态方法重名,而且java又可以直接从实例访问静态方法,所以直接就掉进坑里了。 修改后如下,这样原创 2017-10-10 00:23:24 · 5897 阅读 · 0 评论 -
Gson详解--入门篇
Gson目前主流的json解析类库有jackson,fastjson,gson,gson的serialization deserialization解析功能无疑是最强大的,基本上完美支持复杂对象的json化和反json化,其他两个库在转换复杂对象时都容易出现问题。如果在不考虑效率的情况下,我强烈推荐使用gson类库。首先需要添加依赖//gradledependencies { compile原创 2017-10-30 10:45:47 · 1143 阅读 · 0 评论 -
Gson详解--提高篇
除了默认的序列化和反序列化行为,gson还允许自定义某些类的序列化和反序列化行为。自定义行为一般用于需要使json对象具有和原来类不同的表示形式,或者默认行为会报错的情况。主要分为三个类 Json Serializers: 自定义某种对象类型的序列化行为Json Deserializers: 自定义某种对象类型的反序列化行为Instance Creators: 自定义某种对象的创建行为此时我们需要原创 2017-10-30 11:53:35 · 414 阅读 · 0 评论 -
加快gradle的编译
新版的gradle已经默认开启守护线程了,所以这边就不说这个了。 另一个加速的方法是 在任务后面加参数-t,例如build -t这样每次文件有改动都会自动执行build任务,虽然build的时间没变,但是由于一直在后台build,所以当你最后需要运行程序测试的时候,此时真正需要build的地方就只有一点点,所以就会很快具体细节请参考 https://docs.gradle.org/4.2.1/u原创 2017-10-15 00:40:29 · 237 阅读 · 0 评论 -
JAVA与AS2制作一个2D多人游戏(1)
这几天用JAVA和AS2制作了一个小型的多人游戏,接下来作为复习总结一遍流程,如果有学过AS2的同学也可以试着做一下。先简单概述一下这个游戏 玩家注册登录后进入游戏大厅,可以创建房间,加入游戏,然后玩家操作一个会射子弹的小人,和同一房间里的人对战。先上几张图大家看看。服务器界面开始制作之前先讲讲我对游戏中客户端与服务器通信几种方式自己的总结1.服务器主动发消原创 2016-03-07 17:03:26 · 1320 阅读 · 0 评论 -
Java robot类的getPixelColor问题
前面想做一个JAVA图像识别的小程序,写完代码之后运行发现一直出不了结果,刚开始还以为是代码错了,检查了许久也不知道哪里错了。后来在检测循环的时候就发现,找图运行的相当缓慢,最后发现是 robot.getPixelColor这个方法相当的耗费时间。写了一段代码进行测试 public static void main(String[] args) { try { Rob原创 2016-03-09 21:02:26 · 3030 阅读 · 3 评论 -
JAVA与AS2制作一个2D多人游戏(3)
要进行信息交互,首先要建立一对互相连接的Socket客户端代码如下 public function Client() { Socket = new XMLSocket(); Socket.connect(IP, port); Socket.onClose = ServerClose; Socket.onConnect = ConnectSuccess; Socket.原创 2016-03-07 18:51:04 · 860 阅读 · 1 评论