首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java变量初始化顺序

Java变量初始化顺序 在写一个通用报警模块时,遇到一个有意思问题,在调用静态方法时,发现静态方法内部对静态变量引用时,居然抛出了npe,仿佛是因为这个静态变量初始化在静态方法被调用时,还没有触发...初始化顺序初始化顺序 静态变量, 静态代码快 -》 实例变量(属性,实例代码块,构造方法) 继承关系初始化顺序 父类静态成员,静态代码块 -》 子类静态成员,静态代码块 -》 父类实例变量(属性,...=null : true | num > 0 : 10 依然是根据初始化代码先后顺序进行 当然如果出现异常情况,前面的结果类似,不再赘述 IV. 小结 1....初始化顺序初始化顺序 静态变量, 静态代码快 -》 实例变量(属性,实例代码块,构造方法) 继承关系初始化顺序 父类静态成员,静态代码块 -》 子类静态成员,静态代码块 -》 父类实例变量(属性,...实例代码块,构造方法)-》子类实例变量(属性,实例代码块,构造方法) 相同等级初始化先后顺序,是直接依赖代码中初始化先后顺序 2.

1.1K10
您找到你想要的搜索结果了吗?
是的
没有找到

父子类变量方法加载顺序

当实例化子类对象时,首先要加载父类class文件进内存,静态代码块是随着类创建而执行, 所以父类静态代码块最先被执行,子类class文件再被加载,同理静态代码块被先执行;实例化子类 对象要先调用父类构造方法...,而调用父类构造方法前会先执行父类非静态代码块 程序执行顺序为: 如果类还没有被加载: 1、先执行父类静态代码块和静态变量初始化,并且静态代码块和静态变量执行顺序只跟代码中出现顺序有关。...2、执行子类静态代码块和静态变量初始化。...3、执行父类实例变量初始化 4 、执行父类非静态代码块 5、执行父类构造函数 6、执行子类非静态代码块 7、执行子类实例变量初始化 8、执行子类构造函数 如果类已经被加载: 则静态代码块和静态变量就不用重复执行...,再创建类对象时,只执行与实例相关变量初始化构造方法。

44430

java引用变量对象(java变量对象)

Java开辟了两类存储区域,对比二者特点 存储区域 存储内容 优点 缺点 回收 栈 基本类型变量对象引用变量 存取速度比堆要快,仅次于寄存器,栈数据可以共享 存在栈中数据大小与生存期必须是确定...栈中主要存放一些基本类型变量 当超过变量作用域后,Java会自动释放掉该变量,内存空间可以立即被另作他用 堆 由new等指令创建对象和数组 可以动态地分配内存大小,生存期也不必事先告诉编译器...注意,栈内存储除了基本类型变量(int 这种类型变量)还会存储对象引用变量java中,引用变量实际上是一个指针,它指向是堆内存中对象实例。...把对象地址在堆内存地址给引用变量cc ''' 这样我们就明确了: Java中,这里“=”并不是赋值意思,而是把对象地址传递给变量; 对象创建出来,其实连名字都没有,因此必须通过引用变量来对其进行操作...后来才知道,在许多Java书中,把对象对象引用混为一谈。可是,如果我分不清对象与对象引用, 那实在没法很好地理解下面的面向对象技术。

2K40

SpringMVC-@RequestMapping参数用法

@RequestMapping注解params属性是一个字符串类型数组,可以通过四种表达式设置请求参数请求映射匹配关系: “param”:要求请求映射所匹配请求必须携带param请求参数 “!...在类型级别方法级别都受支持。如果在两个级别上都指定,则方法级别使用条件将覆盖类型级别条件。 @RequestMapping注解headers属性通过请求请求头信息匹配请求映射。...@RequestMapping注解headers属性是一个字符串类型数组,可以通过四种表达式设置请求头信息请求映射匹配关系: “header”:要求请求映射所匹配请求必须携带header请求头信息...:表示任意单个字符 *:表示任意0个或多个字符 **:表示任意一层或多层目录 可以指定为普通具体值 @RequestMapping("/testRequestMapping") 可以指定为含有某变量一类值...testPathVariable: " + id2); return SUCCESS; } 除了value还有path,二者效果等同,可以参考源码如下图: 其中关于@PathVariable 有如下说明 ① 如果路径中变量与方法中变量名一致

53910

Java 菜鸟入门 | Java静态变量、实例变量、局部变量成员变量

前言 学习 Java 过程中,一开始很容易被这些各种变量绕晕,这篇博客主要介绍了这几种变量之间关系区别。...成员变量 作用范围是整个类,相当于 C 语言中全局变量,定义在方法体语句块之外,一般定义在类声明之下;成员变量包括实例变量和静态变量(类变量)。...实例变量 独立于与方法之外变量,无 static 修饰,声明在一个类中,但在方法、构造方法语句块之外,数值型变量默认值为 0,布尔型默认值为 false,引用类型默认值为 null。...局部变量方法中变量,访问修饰符不能用于局部变量,声明在方法、构造方法或语句块中,在栈上分配,无默认值,必须经初始化。...,随对象消失而消失 随方法调用而存在,随方法运行结束而消失 作用域 所属大括号 总结 以上就是关于 Java 编程中,静态变量、类变量、实例变量、局部变量以及成员变量之间相关区别了。

1.5K20

Java - 局部变量成员变量

概念 成员变量 成员变量就是属于类变量,在类中,方法体外定义变量 成员变量又分为两种: **类变量(静态变量):**是被static所修饰成员变量,是属于类部分,属于类范畴。...**实例变量(非静态变量):**是没有被static修饰成员变量,是属于类部分,但是属于对象范畴。 局部变量: 局部变量就是定义在方法体,代码块内变量,是局部变量,属于方法范畴。...**比如:**方法形参,方法内定义变量等等。...区别 1、定义位置不一样 局部变量:在方法内部 成员变量:在方法外部,直接写在类中 public class Demo { //在方法外部,直接写在类中 //成员变量 String...void testA(){ //局部变量 int num = 666; //输出name为成员变量 //成员变量,整个类都可以用

1.2K10

java局部变量全局变量_java全局变量和局部变量

首先,Java语言是这么明文规定。局部变量使用前必须赋值。为什么Java 语言要这么规定呢。我们知道Java 是一门面向对象语言,它将重点放在 数据 对象接口上。...就好比一个木匠,一个“面向对象”木匠始终关注是所制作椅子,第二位才是所使用工具打造过程;而一个“非面向对象”木匠首先考虑是所用工具。  ...最上面部分代码,将 a 变量作为类成员变量,当我们创建对象时候,Java 虚拟机会在系统堆 (heap)区域申请一块内存区域来存放类数据,在这里成员变量就是类数据,这个时候JVM为加载类要分配内存啦...现在我们想一想如果Java 设计时候也给方法里局部变量赋初始值会怎样? 一个方法里面可能会有很多个局部变量,类里面也会有很多个方法,而且生命周期短。...我们还可以换个角度来想这个问题,假如你是开发 Java 这门伟大语言开发者,你在设计时候,类成员变量是要在堆中分配内存,方法中局部变量是在栈中

1.7K20

【小家java】类中静态代码块、构造代码块、静态变量、成员变量执行顺序继承逻辑

其中继承,是java中最有学问一点也是最相对来说最难理解一些东西,本文针对于此,做一些实例分析,希望能够帮助大家理解java继承机制 2、栗子 情况一:当父类子类有同名同类型属性时,使用时需要注意...父类子类变量是同时存在,即使是同名。子类中看到是子类变量,父类中看到是父类中变量,它们互相隐藏,而同名方法则是实实在在覆盖(重写),属性不存在重写哟。...我觉得脑子里应该浮现出一个这样知识点: Java中赋值顺序: 1、父类静态变量赋值 2、自身静态变量赋值 3、父类成员变量赋值父类块赋值 4、父类构造函数赋值 5、自身成员变量赋值自身块赋值...只有在准备阶段初始化阶段才会涉及类变量初始化赋值,因此只针对这两个阶段进行分析; 类准备阶段:需要做是为类变量(static变量)分配内存并设置默认值(注意此处都是先给默认值),因此类变量st...类构造器:编译器收集所有静态语句块变量赋值语句,按语句在源码中顺序合并生成类构造器 因此现在执行:st = new StaticTest().此时我们发现,就会进行对象初始化了(看到没,这个时候

1.4K20

java静态全局变量全局变量区别_java静态全局变量

大家好,又见面了,我是你们朋友全栈君。 Java面向对象代码结构会使在多个位置引用变量更加困难。...但是,不幸是,Java从技术上不允许在全局范围内创建变量。 在本文中,我们将介绍如何在Java中模拟使用全局变量。 什么是全局变量? 全局变量是可以从任何范围访问变量。...Java为什么不使用全局变量? 这个问题简短答案是:故意设计。Java被创建为纯粹面向对象编程语言,这就是为什么您创建所有内容都包装在一个类中原因。...通过纯粹面向对象,鼓励开发人员将相关变量函数保持在一起,从而使程序整体上更有条理。这也可以帮助确定文档记录不充分目的。...订阅电子报 订阅 这是Java试图通过没有全局变量来避免那种情况。在大型项目中使用全局变量会导致意外意外行为,因为在代码不同部分中声明修改了变量。 如何在Java中模拟全局变量?

4.4K40

SpringMVC中@Controller@RequestMapping到底什么鬼?

,把这个类作为一个控制器加载到SpringBean工厂,如果不加,就是一个普通类,Spring没有半毛钱关系。...@Controller就是一个注解,当tomcat启动,我们会看到一些JAVA类挥舞着印有@Controller旗子大喊:" Hey,SpringMVC,I'm here,please take me...1.2 @RequestMapping是什么 ---- 在Controller中,总是会看到RequestMapping这个注解,看起来像是路径跳转,以下列举了一个方便我们记忆比喻。...这个无法在同一个文件夹下面创建两个同名文件,是一个道理。...小结 一个web项目本身就是一个系统,操作系统一样,可以把项目当做一个系统,一个应用程序。人为什么要使用电脑,因为电脑可以 1.给我们想要资源(比如.avi) 2.帮我们做事。

91391

顺序定义_顺序逻辑顺序物理顺序

顺序定义 线性表顺序存储又称为顺序表 来看一个生活中例子:周末朋友一起吃火锅,人非常多,我们需要在等候区等候,这个等候区就与顺序表有非常多相似之处,借助它去理解顺序特点。...顺序两种实现方法 顺序表可以用数组来实现。根据数组两种分配方式,也就有两种描述顺序方法。分别是静态描述分配顺序方法动态描述分配顺序方法。...但是这一个变量它仅仅是一个地址,而没有确切空间,所以在使用时,需要动态申请空间。怎样动态申请空间呢?...= (Elemtype*)malloc(sizeof(ElemType)*InitSize); C++ L.data = new ElemType[InitSize]; L 是 SqList 类型一个变量...这样有一点好处就是,在静态分配时,当我想要存放顺序数据元素过超过 50 时候则会产生错误溢出,而动态分配时,如果一旦超过了分配空间大小,可以再重新分配一块内存空间,把旧空间所增加数据元素转移到新申请空间上

1.5K10

Java数据类型变量

布尔常量: 只有两种truefalse 1.1.6. 空常量: null 注意:字符串、整形、浮点型、字符型以及布尔型,在Java中都称为数据类型。...2.数据类型: 在Java中数据类型主要分为两类:基本数据类型引用数据类型。...等) 3.变量: 3.1.概念: 在程序中,除了有始终不变常量外,有些内容可能会经常改变,比如:人年龄、身高、成绩分数、数学函数 计算结果等,对于这些经常改变内容,在Java程序中,称为变量。...而数据类型就是用来定义不同种类变量。...3.2.语法格式: 定义语法格式为: 数据类型 变量名 = 初始值; 例如: int a = 10;// 定义整形变量a,a是变量名也称为标识符,该变量中放置值为10

6400

Java基础——变量常量

标识符可以是任意顺序大小写字母、数字、下划线和美元符号组成,但是标识符首字母不能以数字开头。...image.png 变量名称 变量名称只能是字母数字下划线(_)组成且首字母不能是数字 int price; int amount; int price, amount...final double PI = 3.14; final char MALE=‘M’,FEMALE=‘F’; 命名规范 驼峰命名 驼峰命名采用大小写字母混合方式,主要分为小驼峰大驼峰。...Java编程命名采用驼峰法 文件名 采用大驼峰法 BlockOperation.java命名 全小写字母,中间用点分开, 作为命名空间,包名应该具有唯一性,推荐采用公司或者组织域名倒置...,如com.apple.quicktime.v2 但是Java核心库包名不采用域名倒置命名,如java.awt.event 类接口 采用大驼峰法,如SplitViewConntroller

71810

java(2)——字面常量变量变量作用域,局部变量,成员变量

字面常量 java里有两种常量,一种叫字面常量,而使用final修饰常量为符号常量。...字面常量有很多种类型: 整型常量 1 3 45 实型常量 2.78293 字符常量 ‘a’ (单引号引起来单个字母) 字符串常量 “string”(双引号) 逻辑常量 true false 变量 变量在赋值前必须声明变量类型...,比如说下例num我声明了为int类型: public class VarTest{ public static void main(String[] args){ int num ; //you...发现输出是最后一行我输入8 也可以进行反编译: ? ps:变量不能重复定义 ? ?...变量作用域 变量作用域是在离他最近花括号内 变量在不同地方代表不同意义: 局部变量:定义在方法中 成员变量:定义在类中,方法外

80920

关于Java中returnfinally执行顺序

即使有return语句,finally块在执行完try或者catch块代码之后是会被调用,但是特殊情况下finally块语句是不会被执行,如下几种情况: (1)在trycatch块之中执行System.exit...(1)在finally中使用return语句,虽然java是支持,但一旦在finally中使用return那么trycatch中return就不会被执行。...(2)不要在finally中修改变量数据,比如赋值类操作。 上面的这两种编程习惯,在java层面都是支持,这样代码虽然能正常运行,但是可读性非常差而且难以维护。...总结: finally语句块在Java里面最大作用是避免资源泄露问题,通常用于当程序发生异常或者正常执行结束时用来关闭各种资源连接,所以在使用时候一定要注意,尽量不要做一些其他业务逻辑或者在里面使用...return语句从而避免其导致不可预料或者难以维护问题。

63730

静态代码块、静态变量,构造代码块、实例变量执行顺序继承逻辑

变种面试题 原因: 冷知识 case4:子类父类有`同名同类型``静态`变量时候 case5:静态代码块属于类,并且优先于main方法执行(有难度) 注解对执行顺序影响 继续补充:子类默认调用...只有在准备阶段初始化阶段才会涉及类变量初始化赋值,因此只针对这两个阶段进行分析; 类准备阶段:需要做是为类变量(static变量)分配内存并设置默认值(注意此处都是先给默认值),因此类变量st...类构造器:编译器收集所有静态语句块变量赋值语句,按语句在源码中**顺序(请注意这三者是有序)**合并生成类构造器 因此现在执行:st = new StaticTest().此时我们发现,就会进行对象初始化了...(看到没,这个时候b变量赋值语句还没有执行哦~~~) 而对象初始化顺序为:成员变量 -> 普通代码块 -> 构造函数,因此这一波过后:a=110了。...结论就不用解释了:静态变量属于类继承无关。

88850
领券