静态空间的定义国内静态ip代理软件


首先,先来说明下java中动静态的概念的来源。因为java虚拟机对内存空间的分配有动态和静态之分。其实这里的静态分配就是提前分配好一块固定的内存来存储一种变量,这种变量就是所谓的静态变量,它由static修饰成为静态变量。这就是静态的概念来源,其实就是提前分配固定的空间的意思。之前,我一直不明白为什么叫静态,后来我反复琢磨之后,认为他所谓的静态就是指这个,而对应的动态的概念则是说当程序运行到某个类的实例对象或者其实例变量时再分配内存空间的意思。这样一看,动态和静态的概念其实就是区分程序中运行的变量或方法等是否是提前分配好内存空间所起的名词和说法。不看程序跟与之交互的硬件--内存和硬盘之间的关系,很难理解这个静态和动态的概念。至此,我看了很多大牛的博客,又通过自己的思考加工,终于搞明白这是怎么一回事。也算是没白看那么多文章和博客。

我看了很多文章,都是转载别人的好文章,但是没有一篇文章把这些东西总结起来,给人一个整体的概念。我就一直是糊里糊涂的,对这块。现在我看了那么多文章后,对静态这个概念有了更好的理解,就想把它写下来,便于我整理和巩固对技能的认识、理解,也便于像之前的我一样懵懵懂懂的人理解和掌握这个java的一个特性。

总的来说,java中跟静态有关的名词有类、变量、方法、函数和代码块。怎样代表它们是静态的呢,在其修饰符前面加上static就是静态的意思。

静态变量就是类中在数据类型前有static作修饰的变量。静态变量的特点是在java虚拟机加载程序时就初始化其值,这里要说明一下。因为静态变量的类型有2种,一种是8种基本数据类型的一种,一种是引用类型的引用。

那对静态变量的初始化就分别按其类型的默认初始值来初始化,8种基本数据类型的默认初始值都是

0,引用类型的默认初始值都是null。

这里得提下Java类的生命周期。java类的生命周期有5个阶段,装载(加载)、连接、初始化、使用和卸载。

1)加载。很多人应该知道,我们每次写完java代码都会生成一个对应的.class文件,这是java虚拟机运行的基础,因为它只能识别这种文件。而java类文件经过编译后,就是.class文件。java类的生命周期就是.class文件从加载到消亡的过程。

加载的意思,就是通过.class文件找到类的信息将其加载到方法区中,然后在堆区中实例化一个java.lang.Class对象,作为方法区中这个类的信息的入口。但是,这一功能是在jvm之外实现的,主要的原因是方便应用程序让应用程序自己决定如何获取这个类,在不同的虚拟机实现的方式不一定相同。hotspot虚拟机是采用在使用时再加载的方式,也有其他是预先加载的。

a)验证:确定该类是否符合java语言的规范,有没有属性和行为的重复,继承是否合理,总之,就是保证jvm能够执行。



3.由staticfinal修饰的变量会直接赋值,如staticfinalinta=10;则默认就是10.

c)解析:这一阶段的任务就是把常量池中的符号引用转换为直接引用,说白了就是jvm会将所有的类或接口名、字段名、方法名转换为具体的内存地址。也就是分配内存空间的过程。

3)初始化。初始化这一阶段就是将将静态变量(类变量)赋值的过程,即只有被static修饰的才能被初始化。执行的顺序是:父类静态域或静态代码块,然后是子类静态域或子类静态代码块(静态代码块先被加载,然后才是静态属性)。

a)对象实例化:就是执行类中构造函数的内容。如果该类存在父类,JVM会通过显式或隐式的方式先执行父类的构造函数,在堆内存中为父类的实例变量开辟空间,并赋予默认的初始值,然后再根据构造函数的代码内容将真正的值赋予实例变量本身,然后引用变量获取对象的首地址,通过操作对象来调用实例和方法。

b)垃圾收集:当对象不再被引用的时候,即程序执行完毕,就会被虚拟机标上特别的垃圾记号,在堆中等待GC回收。

5)类卸载。类卸载即类的生命周期走到了最后一步,程序中不再有该类的引用,该类也就会被jvm执行垃圾回收,从此生命结束。

Testt=newTest();//这里因为add()方法不是静态方法,所以必须先实例化Test类,才能调用它。

静态代码块是用static修饰的一块代码。它不同于静态函数,有参数。静态代码块是没有参数的。只是为了实现一些需要提前加载的功能。

静态代码块:一般情况下,如果有些代码必须在项目启动前执行,需要使用静态代码块,这种代码是主动执行的,它只执行一次,并且在同属一个类的main函数之前执行。

静态函数:需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种方法是被动执行的。

2)一个类可以使用不包含在任何方法体中的静态代码块,当类被载入时,静态代码块被执行,且只被执行一次,静态块常用来执行类属性的初始化。例如:static{}



7、主程序类中的的静态变量先于静态代码块初始化,其后进入主函数类(程序入口处,即main函数),其后根据静态函数的调用情况,才能选择性的初始化。



1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。

2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。