第7章 面向对象高级特性

40 篇文章 0 订阅
40 篇文章 0 订阅

7.3 代码块

7.3.1 什么是代码块

1. 什么是代码块

 

①初始化块(代码块)作用:

Java对象进行初始化

②程序的执行顺序:

 

         声明成员变量的默认值

 

 

 

         显式初始化、多个初始化块依次被执行(同级别下按先后顺序执行)

 

         构造器再对成员进行赋值操作

 

 
  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2.静态代码块

   一个类中初始化块若有修饰符,则只能被static修饰,称为静态代码块(static block ),当类被载入时,类属性的声明和静态代码块先后顺序被执行,且只被执行一次。

static块通常用于初始化static ()属性

class Person {

       public static int total;

       static {

               total = 100;//total赋初值

       }

       …… //其它属性或方法声明

 }

 

3. 非静态代码块

    概念:没有static修饰的代码块

       特点:

  • 可以有输出语句。
  • 可以对类的属性、类的声明进行初始化操作。
  • 可以调用静态的变量或方法。
  • 若有多个非静态的代码块,那么按照从上到下的顺序依次执行。
  • 每次创建对象的时候,都会执行一次。且先于构造器执行

 

4 静态和非静态关系

非静态的本质是什么

非静态也可以称为动态, 意思是确定的, 在程序中对象的创建是不确定的, 因为只要new就会产生对象, 所以非静态的概念必然是和对象相关的.

静态的本质是什么

静态的就是确定的, 唯一的, 在程序中是稳定的, 和有无对象无关, 也和有多少对象无关, 只和类相关, 所以, 所以静态成员是稳定并唯一的.

如何互相使用

在非静态环境中可以中直接使用静态成员, 因为在非静态环境中, 对象必然是已经创建了, 对象既然已经创建, 类也肯定已经加载过了, 所以在使用上并不会有问题.

 

但是 在静态环境中却不可以直接使用非静态成员, 因为静态成员可以使用, 不要求对象,只要求类加载好就可以了, 但是类加载, 并不意味着一定要创建对象, 并且对象创建在哪里也不知道. 所以在静态环境中不可以直接访问非静态成员, 因为非静态成员隶属于对象, 所以在静态环境中只能通过创建对象, 并再通过对象来间接访问非静态成员.

 

 

 

 

7.3.2 执行顺序

1. 创建对象时, 在同一个类中执行顺序

在同一个类中, 如果创建这个类的对象, 执行顺序是

静态属性声明

静态语句块或静态属性的显式初始化

非静态属性声明

非静态语句块或非静态属性的显式初始化

构造器

2. 创建对象时, 有继承关系存在时执行顺序

  1. 父类的静态属性声明
  2. 父类的静态语句块或父类静态属性的显式赋值
  3. 子类的静态属性声明
  4. 子类的静态语句块或子类静态属性的显式赋值
  5. 父类非静态属性的声明
  6. 子类非静态属性的声明
  7. 父类的非静态语句块或父类非静态属性的显式赋值
  8. 父类构造器
  9. 子类的非静态语句块或子类非静态属性的显式赋值
  10. 子类构造器

 

 

 

 

 

本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值