静态变量

Java类的生命周期

﹥>﹥吖頭↗ 提交于 2019-12-19 12:50:56
类的生命周期 java类的生命周期就是指一个class文件从加载到卸载的全过程。 完整的生命周期会经历加载、连接、初始化、使用、和卸载五个阶段,当然也有在加载或者连接之后没有被初始化就直接被使用的情况,如图所示: 加载 在java中,我们经常会接触到一个词——类加载,它和这里的加载并不是一回事,通常我们说类加载指的是类的生命周期中加载、连接、 初始化三个阶段。在加载阶段,找到需要加载的类并把类的信息加载到方法区中, 然后在堆区中实例化一个java.lang.Class对象,作为方法区中这个类的信息的入口。 对于加载的时机,真正用到一个类的时候才对它进行加载。 有时连接阶段并不会等加载阶段完全完成之后才开始,而是交叉进行,加载阶段总是在连接阶段之前开始,连接阶段总是在加载阶段完成之后完成。 连接 连接阶段比较复杂,一般会跟加载阶段和初始化阶段交叉进行,这个阶段的主要任务就是做一些加载后的验证工作以及 一些初始化前的准备工作,可以细分为三个步骤:验证、准备和解析。 验证:当一个类被加载之后,必须要验证一下这个类是否合法,保证加载的类是能够被jvm所运行。比如这个类是不是符合字节码的 格式、变量与方法是不是有重复、 数据类型是不是有效、继承与实现是否合乎标准等等。 准备:准备阶段的工作就是为类的 静态变量 分配内存并设为jvm默认的初值,对于非静态的变量,则不会为它们分配内存。

面试官:请说一下对象锁和类锁的区别

和自甴很熟 提交于 2019-12-19 10:51:12
有锁才有自由 生活中不存在绝对的自由,绝对的自由通常对应的无序和混沌,只有在道德、法律、伦理的约束下的相对自由,才能使人感受到自由。 而在多线程编程中,锁是至关重要的,锁就是道德,就是法律约束,没有锁的多线程环境将会是混乱的,所有线程都在争夺资源,最后的结果就是导致系统崩溃,而有了锁之后,多线程环境才能稳定高效的工作。 synchronized 关键字 synchronized 是我们所说的重量级锁,所说的重量级是相对于那些自旋锁(AQS)而言的,比如可重入锁ReentrantLock。很多人谈 synchronized 色变,说它性能差、太重,貌似言之凿凿。放在多年前确实如此,但是 Java 1.7、1.8 已经对 synchronized 做了很大优化,其性能和那些轻量级锁几乎没有差距。 所以,我们再程序中其实可以放心的使用它,即使没有用过,也肯定在一些源码里见过,比如 Netty 中就有很多地方用到了它。 下面开始进入今天的主题,类锁和实例锁。看名字就已经很明显了,类锁就是所在类上的锁,实例就是锁在类实例上的锁。 实例锁 类声明后,我们可以 new 出来很多的实例对象。这时候,每个实例在 JVM 中都有自己的引用地址和堆内存空间,这时候,我们就认为这些实例都是独立的个体,很显然,在实例上加的锁和其他的实例就没有关系,互不影响了。 通常我们使用实例锁的方式有下面三种: 1、

java基础有参方法与包

给你一囗甜甜゛ 提交于 2019-12-18 22:03:03
参数列表: (数据类型 参数1,数据类型 参数2…) 调用方法,传递的参数要与参数列表一一对应 实例方法可以访问静态变量,不能访问非静态变量 来源: CSDN 作者: RedSnipers 链接: https://blog.csdn.net/RedSnipers/article/details/103605236

成员变量、局部变量、静态变量

房东的猫 提交于 2019-12-18 20:54:31
成员变量、局部变量、静态变量的区别 成员变量 局部变量 静态变量 定义位置 在类中 , 方法外 方法中 , 或者方法的形式参数 在类中 , 方法外 初始化值 有默认初始化值 无 , 先定义 , 赋值后才能使用 有默认初始化值 调用方式 对象调用 --- 对象调用,类名调用 存储位置 堆中 栈中 方法区 生命周期 与对象共存亡 与方法共存亡 与类共存亡 别名 实例变量 --- 类变量 总结:   尽管三者的本质都是变量,可是使用时却有相当大的区别,稍不留神就可能陷入陷阱。且先记住:在一个类中,如果一个变量能够用来描述一个类的属性,那就定义为成员变量,否则,它就应该定义为局部变量。而如果一个变量在全局中都能使用(某个内容是被所有对象所共享),那么我们就可以把这个变量用static来修饰,即为静态变量。(还要注意它与静态方法的紧密联系,这里且不细述了) 来源: https://www.cnblogs.com/langren1992/p/9529851.html

静态变量static和全局变量global

冷暖自知 提交于 2019-12-18 15:59:50
静态变量static , 全局变量global 静态变量 在java也叫类变量从名字可以看出它是属于某个类的而不是类的实例。它的关键字是static存储在静态存储区,当程序执行,类的代码被加载到内存,类的静态变量就分配了内存空间,他是属于类的也就是没个实例对象都是对于以个静态变量,静态变量的内存空间知道程序退出才释放所占用的内存空间。静态变量直接通过类名访问(java 也能通过对象名访问)。 有人会分全局的静态变量、局部的静态变量;全局静态变量失去了“全局”的普遍含义,它的作用域限定在本文件里。而静态变量的声明是应该出现在类里不是类的函数里。 全局变量 关键字global也是静态存储方式,存储在静态存储区。全局变量只需在一个源文件中定义,就可以作用于所有的源文件。当然,其他不包含全局变量定义的源文件需要用extern 关键字再次声明这个全局变量。 全局变量和静态变量的区别 : 全局变量在整个工程文件内都有效; 静态全局变量只在定义它的文件内有效 ; 静态局部变量只在定义它的函数内有效,只是程序仅分配一次内存,函数返回后,该变量不会消失 ;局部变量在定义它的函数内有效,但是函数返回后失效。全局变量(外部变量)的说明之前再冠以static就构成了静态的全局变量。 全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式 。 这两者在存储方式上并无不同。这两者的区别虽在于

TypeScript static 关键字

 ̄綄美尐妖づ 提交于 2019-12-18 15:42:17
static 关键字 static 关键字用于定义类的数据成员(属性和方法)为静态的,静态成员可以直接通过类名调用。 class StaticMem { static num : number ; static disp ( ) : void { console . log ( "num 值为 " + StaticMem . num ) } } StaticMem . num = 12 // 初始化静态变量 StaticMem . disp ( ) // 调用静态方法 来源: CSDN 作者: 猫的尾巴有墨水 链接: https://blog.csdn.net/Xidian2850/article/details/103596590

进程的虚拟地址空间,堆栈、堆、数据段、代码段

微笑、不失礼 提交于 2019-12-18 15:02:40
上图是进程的虚拟地址空间示意图。 堆栈段:   1. 为函数内部的局部变量提供存储空间。   2. 进行函数调用时,存储“过程活动记录”。   3. 用作暂时存储区。如计算一个很长的算术表达式时,可以将部分计算结果压入堆栈。 数据段(静态存储区):   包括BSS段的数据段,BSS段存储未初始化的全局变量、静态变量。数据段存储经过初始化的全局和静态变量。 代码段:   又称为文本段。存储可执行文件的指令。 堆:   就像堆栈段能够根据需要自动增长一样,数据段也有一个对象,用于完成这项工作,这就是堆(heap)。堆区域用来动态分配的存储,也就是用 malloc 函数活的的内存。calloc和realloc和malloc类似。前者返回指针的之前把分配好的内存内容都清空为零。后者改变一个指针所指向的内存块的大小,可以扩大和缩小,他经常把内存拷贝到别的地方然后将新地址返回。 1、栈区(stack):由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap):由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。 3、全局区(静态区):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。

java学习(2):类和对象

空扰寡人 提交于 2019-12-18 03:19:28
一、类 类可以看成是创建对象的模板,它描述一类对象的行为和状态。创建对象也叫类的实例化。类必须先定义才能使用。 通过下面一个简单的类来理解下Java中类的定义: public class Dog { //Dog类的名字 String name; // 成员变量name int age; static int time=0; //类变量 void hungry(){ System.out.println("主人,我饿了"); } void sleeping(){ int t = 0; //局部变量 System.out.println("主人,我睡了"); } } 一个类可以包含以下类型变量: 局部变量 :在方法或者语句块中定义的变量被称为局部变量。变量声明和初始化都是在方法中,方法结束后,变量就会自动销毁。 成员变量 :成员变量是定义在类中、方法体之外的变量。这种变量在创建对象的时候实例化(分配内存)。成员变量可以被类中的方法和特定类的语句访问。 类变量(静态成员) :类变量也声明在类中,方法体之外,但必须声明为static类型 一个类可以拥有多个方法,方法可以表示类的行为,在上面的例子中:hungry()和sleeping()都是Dog类的方法。 构造方法 在类的实例化过程中构造方法会自动执行,它主要在实例化过程中做一些初始化的工作。 每个类都有构造方法

Dart单例的四种写法

落花浮王杯 提交于 2019-12-17 10:25:51
文章目录 dart中的单例 工厂构造 Factory constructor 静态变量 Static field with getter 静态变量Static field 常量和工厂构造 const constructor & factory dart中的单例 工厂构造 Factory constructor class Singleton { Singleton . _privateConstructor ( ) ; static final Singleton _instance = Singleton . _privateConstructor ( ) ; factory Singleton ( ) { return _instance ; } } void main ( ) { Singleton s = Singleton ( ) ; } 静态变量 Static field with getter class Singleton { Singleton . _privateConstructor ( ) ; static final Singleton _instance = Singleton . _privateConstructor ( ) ; static Singleton get instance { return _instance ; } } void

关于java静态的理解

天涯浪子 提交于 2019-12-17 00:57:00
   首先说明,这篇博文参考了http://www.cnblogs.com/0mbiubiu/p/5331390.html    当初化了很久的时间才慢慢理解静态,今天终于有个时间能整理一下。   这里所说的静态是指使用static关键字修饰的成员,其中包括静态变量,静态方法,静态代码块。   1.静态与非静态     一直觉得这是个比较抽象的概念,还是拿静态变量和非静态变量来解释一下什么是静态    静态变量被所有的对象所共享,在内存中只有一个副本,它当且仅当在类初次加载时会被初始化。而非静态变量是对象所拥有的,在创建对象的时候被初始化,存在多个副本,各个对象拥有的副本互不影响。     static成员变量的初始化顺序按照定义的顺序进行初始化。   简单来说,static 修饰的变量在类加载的时候,就已经开辟了一块内存空间来存它了,而且它是唯一的,在内存里也是只有个,而非静态对象,每次new就开辟一块内存空间。      2.static方法   static方法一般称作静态方法,由于静态方法不依赖于任何对象就可以进行访问,因此对于静态方法来说,是没有this的,因为它不依附于任何对象,既然都没有对象,就    谈不上this了。并且由于这个特性,在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法/变量都是必须依赖具体的对象才能够被调用。   简单来说