Java自带的性能分析工具
Java,或者说JDK自带了以下性能分析工具。如已经安装了Java,则可以在cmd下使用以下命令来分析Java的运行状态。 jcmd:打印一个 Java 进程的类,线程以及虚拟机信息。适合用在脚本中。使用 jcmd – h 来查看使用方法。 jconsole:提供 JVM 活动的图形化展示,包括线程使用,类使用以及垃圾回收(GC)信息。 jhat:帮助分析内存堆存储。 jmap:提供 […]
Java,或者说JDK自带了以下性能分析工具。如已经安装了Java,则可以在cmd下使用以下命令来分析Java的运行状态。 jcmd:打印一个 Java 进程的类,线程以及虚拟机信息。适合用在脚本中。使用 jcmd – h 来查看使用方法。 jconsole:提供 JVM 活动的图形化展示,包括线程使用,类使用以及垃圾回收(GC)信息。 jhat:帮助分析内存堆存储。 jmap:提供 […]
前言 大约是一周半前,女朋友说她想要练习写Java。我想了一下,觉得要练一种编程语言,不如就用那种语言写点东西,在实践中学到这种语言的用法。于是我就提出,不如做一个NES模拟器吧。既练习了Java,又复习了一些底层相关的课程,又可以用来玩,岂不是一举三得?她欣然接受。然而,我没想到的是,编写模拟器并非如此简单,其中的坑非常多。 收集文档 毕竟是20多年前的主机,NES的相关资料并不难找,在网上搜一 […]
先看如下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
class InitializationTest { abstract class Base { method() def method(): Unit } class Subclass extends Base { val obj = new Object override def method(): Unit = { println(obj) } } @Test def doTest(): Unit = { new Subclass() } } |
以doTest为入口,这个程序的输出是: null 和期望不一样啊! 原因是Scala以整个类中的内容为构造方法,执行顺序是从基类到子类。运行method时,obj还没有初始化,于是就返回了null。 因为obj不可变,所以这里也不能直接初始化。真正的解决方法是使用lazy关键字,它可以让成员在第一次使用时被初始化。 […]
大家都知道github提供了搭建静态页面网站的方式,也就是github.io。其使用方式是建一个指定名称的版本库,以版本库的根目录作为网站的根目录。这样做有一些好处,比如很容易实现网站的版本控制,部署起来也相对方便。而且,不光是静态页面,对于一些脚本类网站,这个方式也是很不错的。(jsp就别想了)。 那么如果我有一台服务器(Windows或是Linux),可以用来架设网站,那么是不是也能像gith […]
首先,不是网上到处都可搜到的在build.gradle里加入以下语句的方法:
1 2 3 |
tasks.withType(Compile) { options.encoding = "UTF-8" } |
也不是把Compile改成JavaCompile的版本:
1 2 3 |
tasks.withType(JavaCompile) { options.encoding = "UTF-8" } |
如果能注意到编译出现的以下信息,并点了More Info的话,就可以进入这个页面,看到答案了。 所以加入以下配置即可: [crayo […]
简介 Java和C++里提供了十分方便的集合类供我们使用,Scala也不例外。 使用Java中的集合类 因为Scala可以直接使用Java库中的类,所以直接使用Java中的集合类也是可以的。用法和Java几乎完全相同:
1 2 3 4 |
import java.util.ArrayList val a = new ArrayList[Int] a.add(123) println(a.get(0)) // 123 |
但是,如果只是这样的话,就没必要写这篇文章了。Scala也提供了自已的集合类型,相比之下,在Scala中用这些类型 […]
简介 lambda表达式是现在非常流行的一种编程特性,其体现了函数式编程的思想。lambda表达式,顾名思义,是一种表达式。和其他表达式不同的地方在于,其返回的是一个函数对象而不是一个数。 基本用法 回顾Scala学习四的“方法”一节,方法的类型同样适合于lambda表达式的类型。而lambda表达式的定义方式和其类型的定义方式比较类似,是参数名列表,=>,函数体: [crayon-673f […]
简介 作用域,是几乎所有高级语言都具有的功能。import关键字(或者类似的关键字),是几乎所有面向对象语言必备的功能。毫无疑问,在Java虚拟机上运行的Scala,也具有这两个功能。然而,Scala的import功能并非完全照搬Java的import,其用法和区别将在本节详解。 import语句 Java的import语句放在java文件的起始位置,用于导入类、常量。Scala也有这一功能(Ja […]
简介 几乎所有的语言都有隐式转换系统,比如C++中数字类型的隐式转换,js中数字和字符串之间互相隐式转换等等。但在这些语言里,隐式转换都是预定义的,无法给自己定义的类或者对象赋予隐式转换的能力。Scala打破了这种限制,提供了一种方法使得隐式转换不再是预定义类型的专利。 双目运算符的重载问题 前面提到过运算符重载,Scala中运算符本质上是方法。一般说来,运算符前操作数是对象本身,后操作数是输入的 […]
简介 要编写一个好的程序,异常处理非常必要。Scala提供了和其他语言类似的异常处理方式。 throw语句 Scala可以直接抛出Java中的任意Throwable类型的对象:
1 |
throw new Exception("Some Error") |
异常抛出检查 Scala取消了Java中的抛出异常声明和检查,所以不存在throws关键字。同样,Scala中所使用Java库的抛出异常声明也不需要理会。 […]