Java执行顺序
2016-01-12 22:04
281 查看
这是自己的第一篇博客,本着学习的态度,写下总结,以便自己温故而知新。近期走读了很多的代码,发现对于Java的执行顺序需要好好总结一下,清楚的明白各变量的加载顺序,有助于更快的了解代码,进行功能的扩展。
局部内部类中的变量为何要被final修饰:
局部变量会随着方法的调用完毕而消失,这时为了使这个局部变量还能继续使用,就会用final修饰,这样就会存储于堆内存中,也就相当于静态值。
对于JVM来说,分为类加载和实例化俩个阶段,对于静态变量和静态代码块来说,是随着类的创建而创建,所以对于this的关键字就不会存在,因为this是指当前正在访问的对象,可以用来引用当前对象的属性和变量,是随着对象的创建而创建。与静态变量的创建时机冲突,是矛盾的。对于构造方法会在实例化阶段创建。
总之,分析代码的设计思路,要时刻谨记Java的执行顺序,跟踪变量。
一、父类要先于子类执行,先加载静态成员变量,这是如果要对静态成员变量进行计算,可在静态代码块中执行。
二、父类的成员赋值,初始化代码块
三、父类的构造方法以及构造方法中的其他语句
四、子类的成员赋值,初始化代码块
五、子类的构造方法以及构造方法中的其他语句
注意:
一、对于静态变量以及静态代码块中的代码,在应用程序的生命周期中只加载一次,而成员变量对随着对象的创建而赋值,
当然,当对象销毁的时候,这些随对象产生的 东西就会被垃圾回收器回收。
二、对于main方法,作为程序的入口,其实也是存在于静态区中,但是它会将一份代码Copy到栈中,这样我们就可以无限的复制。
三、static修饰的内部类其实就相当于外部类的一个方法。private修饰的内部类,外部类是不能访问的
四、对于内部类可以访问外部类的成员,包括私有,但是外部类访问内部类就必须创建内部类的对象。
局部内部类中的变量为何要被final修饰:
局部变量会随着方法的调用完毕而消失,这时为了使这个局部变量还能继续使用,就会用final修饰,这样就会存储于堆内存中,也就相当于静态值。
对于JVM来说,分为类加载和实例化俩个阶段,对于静态变量和静态代码块来说,是随着类的创建而创建,所以对于this的关键字就不会存在,因为this是指当前正在访问的对象,可以用来引用当前对象的属性和变量,是随着对象的创建而创建。与静态变量的创建时机冲突,是矛盾的。对于构造方法会在实例化阶段创建。
总之,分析代码的设计思路,要时刻谨记Java的执行顺序,跟踪变量。
一、父类要先于子类执行,先加载静态成员变量,这是如果要对静态成员变量进行计算,可在静态代码块中执行。
二、父类的成员赋值,初始化代码块
三、父类的构造方法以及构造方法中的其他语句
四、子类的成员赋值,初始化代码块
五、子类的构造方法以及构造方法中的其他语句
注意:
一、对于静态变量以及静态代码块中的代码,在应用程序的生命周期中只加载一次,而成员变量对随着对象的创建而赋值,
当然,当对象销毁的时候,这些随对象产生的 东西就会被垃圾回收器回收。
二、对于main方法,作为程序的入口,其实也是存在于静态区中,但是它会将一份代码Copy到栈中,这样我们就可以无限的复制。
三、static修饰的内部类其实就相当于外部类的一个方法。private修饰的内部类,外部类是不能访问的
四、对于内部类可以访问外部类的成员,包括私有,但是外部类访问内部类就必须创建内部类的对象。
相关文章推荐
- 牛客网 --java问答题
- Spring Boot 基础
- 【JAVA Web】mybatis3.3 + struts2.3.24 + mysql5.1.22开发环境搭建及相关说明
- Java I/O系统
- java Graphics2D 画图
- Spring MVC 测试 | 模拟提交表单
- 深入分析JavaWeb Item50 -- Spring开发入门
- javaSE学习博客与笔记
- Java Web项目Server窗口NullPointerException问题
- [三]SpringMvc学习-封装、乱码问题、重定向、转发
- java中This关键字
- spring-mvc.xml报错cvc-complex-type.2.4.c
- Java设计模式——单例设计模式
- 3、Java常用的运算符
- Android中将AS的项目导入到eclipse中,stye中常常报错
- Spring对RMI的支持
- 【java】 java 设计模式(1):工厂方法模式(Factory Method)
- java中的缓存技术该如何实现
- java中使用反射获取pojo(实体)类的所有字段值
- spring boot 将dependency 从fat jar 中抽取出来