java类加载以及静态类部类

13人阅读 评论(0) 收藏 举报
分类:

1、属性的加载以及初始化的问题

当要实例化一个类时,JVM会首先加载该类,并且在加载过程中检查这个类是否有静态属性以及静态代码块,如果有,就按顺序分配内存并初始化他们,并且只在类加载的过程中初始化一次。

对于构造代码块,以及普通属性,是在类实例化时进行的,并且每次实例化都会调用,并且构造代码块先于构造方法执行(无论代码块出现在构造方法前后,总是优先于构造方法)。

下面看这段代码:

首先JVM会加载这个类,通过断点调试发现当执行到静态代码块时,staticValue已经有值,这说明静态属性和静态代码块按顺序执行;

这段代码的结果请看下图:

如果把主方法的内容全部注释掉,只留一个System.out.println("***********");可以发现结果为

通过以上结果可以很清晰的验证属性的加载顺序。

2、static与final的区别

static属性在加载时就已经分配内存,并且只分配一次,可以用于对象间共享属性。

final定义的变量为常量,不能被改变,方法不能被覆盖,类不能被继承。

3、对于父类以及子类中的情况

会按照如下顺序加载,1、父类中的静态块、静态方法;2、子类中的静态块、静态方法;3、父类的构造块;4、父类的构造方法;5、子类的构造块;6、子类的构造方法。

我们看如下代码:


对于在StaticIniBlockOrderTest类中实例化子类时,JVM首先会加载Parent类,并且同时给Parent类的静态属性分配内存和初始化、执行静态代码块;

其次,JVM会加载Child类,并对其进行与父类中相同的过程;

然后JVM会初始化父类,并按顺序执行父类的构造代码块与构造方法;

最后,JVM初始化子类,并执行构造代码块,执行构造方法,完成实例化。

那么输出结果为:

查看评论

嵌套类(内部类)

-
  • 1970年01月01日 08:00

java中的设计模式及类部类的定义与使用

1.    设计模式:主流的设计模式主要有23种,它们的特点是实用性好,代码简洁,结构美观著称。 2.    架构模式:目前主流的架构模式主要有B/S架构,和C/S架构,判断一种架构属于哪一种架构,...
  • wen101001
  • wen101001
  • 2013-09-23 23:39:41
  • 1332

匿名类部类

public static void main(String[] args) { A.B.Method();//静态方法直接访问 new A.B().Method2();//创建内嵌类的对象访...
  • Liaq325
  • Liaq325
  • 2013-02-04 21:49:17
  • 637

Java方法工厂,接口,常用日期类Date面向对象,匿名内部类局部类

抽象接口方法工长内部类 Pen pen=zhangsan.new Pen(); package com.内部类.android;public class Student { int age;...
  • TaooLee
  • TaooLee
  • 2015-08-01 13:58:50
  • 642

JAVA学习之八笔记类的管理

内部类在类中间定义一个类,称为内部类。 成员类部类和区域内部类public class PointDemo {     // 内嵌类     private class Point { //这个类编译...
  • xuejiayue1105
  • xuejiayue1105
  • 2007-01-19 20:44:00
  • 883

C# partial 关键字详解

我们新建一个Windows Form时,后台代码都会自动添加如下代码:1 public partial class Form1 : Form2 {3     public Form1()4      ...
  • WalterBrien
  • WalterBrien
  • 2018-04-14 10:45:04
  • 15

内部类

在类中定义的类称为类部类 内部类的使用场景: 1 内部类只能让当前的外部类访问 四种内部类 1 非静态内部类,内部类没有使用static修饰 2 静态内部类,内部类使用static修饰 3...
  • BianHuanShiZhe
  • BianHuanShiZhe
  • 2017-10-01 09:53:25
  • 96

Java 内部类、成员类、局部类、匿名类等

Java各种称呼类详解Java有各种各样类,内部类、嵌套类、成员类、局部类(本地类)、静态类、匿名类、文件类以及这些组合起来的称呼类,成员内部类,成员匿名类,成员嵌套类,本地匿名类等,真是多的不行,但...
  • a327369238
  • a327369238
  • 2016-10-11 17:49:15
  • 6333

Java--内部类,局部类与匿名类

1.内部类是定义在另一个类中的类。 内部类在封装它的类中使用跟普通类一样。 在其他地方使用必须在new前面冠以外部类对象。 即:外部对象名.new 内部类(参数)2.内部类可以访问外部类的所有成...
  • a970973835
  • a970973835
  • 2015-08-06 17:48:40
  • 1044

类(class)

一、C++类的定义C++中使用关键字 class 来定义类, 其基本形式如下: class 类名 { public: //行为或属性 protected: //行为或属性 private: //行为或...
  • zz3111057382
  • zz3111057382
  • 2017-03-18 16:43:44
  • 3412
    个人资料
    持之以恒
    等级:
    访问量: 665
    积分: 216
    排名: 34万+
    文章存档