java的环境变量设置(怎样设置java环境变量)
聊一聊Java main方法那些事儿。
public staic void main(string [] args)
{
System.out.println(“hello Word“):
}
这恐怕是每个Java初学者第一个程序吧,但是很多人写了好多年Java也说不清楚执行这个方法到底发生了什么?下面带你简单了解一下这个过程。
第一步,当然是虚拟机要去找到这个class文件了,在哪儿找?就是你classpath设定的路径。
第二步,虚拟机把class文件加到内存里开始解析,解析啥?你这个class里有多少个变量,都是什么类型,里面有多少个方法都是什么类型。每个方法里都要用到什么变量,定义了什么常量。等等。还有你这个方法都要执行什么指令等等。
例如这个helloworld程序,解析出来的信息就是有这个类有一个static 返回值的为空的main方法,这个main方法里有一个变量string[args],有一个常量“hello world”,这个方法的指令是要调out.println方法。虚拟机把这些信息存在一个叫方法区的内存区域里。
第二步 有了这些信息虚拟机就可以正式开始干活了。即直接执行main方法。下面这些操作都是对栈进行操作了。所谓的栈就是给某个线程分配的内存区域,别的线程不能访问,既然是栈就是个后进先出的数据结构呗,那么放进去的是啥呢?放的是栈桢,其实就是这个线程要执行的方法对应的信息,主要是两个部分,局部变量表,就是存这个方法里的局部变量的。还有一个操作数栈,这个是用来计算中间结果的。
三。当开始执行main方法时,栈里面有main方法对应的一个栈桢,这个栈桢里的局部变量表里第一个位置存的就是args[]的值(没错,就是按照变量出现的顺序放在局部变量表里了)。下面执行out.println方法,既然是方法也得给它分配栈桢。那么现在这个栈里就有两个桢了,main方法在下,out.println方法在上。这时,out.println方法的局部变量表里存的是hello world这个常量。
第四,out.println执行完了,执行出栈操作,栈里就剩main栈桢了,main现在也没有什么可执行的了,于是main也出栈,线程结束。
第五,main方法为什么要是static的?为啥main方法里不能对非静态变量和非静态方法操作?因为非静态的使用和执行时必须跟某个实例关联,也就是说必须指向堆内存里的某个地址,根据刚才的分析可以看出,main执行过程中并没有创建实例,堆里没有东西,当然不能使用非静态方法和变量了。
多年前,阿里巴巴开源了一个Java库——Fastjson,它既可以将Java对象转换为JSON格式,也能够把JSON字符串转换为Java对象。该库还可以操作任何Java对象,包括一些没有源代码的预存在对象。
自开源以来,Fastjson库在阿里巴巴得到了大规模应用,部署在了数万台服务器上,在业界也颇受欢迎。2012年,Fastjson被开源中国评选为最受欢迎的国产开源软件之一。目前,该库在GitHub上已累积了24.3k Star。
近日,阿里巴巴终于对Fastjson进行了重要升级,推出了Fastjson v2,旨在为下一个十年提供高性能的JSON库。通过同一套API,Fastjson v2的特性有如下几个方面:
支持JSON/JSONB两种协议,JSONPath是一等公民;
支持全量解析和部分解析;
支持Java服务端、客户端Android、大数据场景。
项目地址:GitHub - alibaba/fastjson2:





