A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 风中的消逝 于 2018-4-23 15:18 编辑

【石家庄校区】就业班_JavaSE_day01_static和代码块

一 、static

1.概述
java的关键字 静态修饰符 可以用来修饰类的成员变量和成员方法,还可以用来修饰代码块。还可以用来修饰内部类。

2.特点
  a 共享   该类的所有对象共享,所有又叫做类变量和类方法
  b 可以通过类名. 来访问
  c 优先于对象加载,随着类的加载而加载

3.内存图
栈 堆 方法区(静态区  非静态区 常量池(1.7之后hotspot放到堆中了 ))  方法区里面放的是类的class文件
static修饰的成员变量和成员方法存放在静态区中 ,非静态成员放在非静态区中

4.优缺点
优点:无需创建对象即可使用,并且被所有对象所共享。
缺点:静态成员只能访问静态成员 。

5.注意
a 静态访问内只能访问静态的成员变量和成员方法   非静态方法既可以访问静态成员也可以访问非静态成员
b 静态成员也可以通过对象来访问,但建议通过类名来访问

二、 代码块

1.概述  
   分为局部代码块、构造代码块、静态代码块、同步代码块(多线程)
   局部代码块定义在方法中
   构造代码块定义在成员变量的位置
   静态代码块定义在成员变量的位置并且被static修饰

2.特点
   局部代码块 用来控制局部变量的作用域
   构造代码块 用于对象的初始化 每个对象的初始化都会执行
   静态代码块 用于类的初始化  只在类加载的时候执行一次。

3 代码块和构造方法的加载顺序
    静态的优先于非静态的 ; 构造代码块优先于构造方法;
    父类的静态代码块-->子类的静态代码块-->父类的构造代码块-->父类的构造方法-->子类的构造代码块-->子类的构造方法

4 类初始化顺序:
    父类的静态(静态变量和静态代码块,按书写顺序执行)-->子类的静态(静态变量和静态代码块,按书写顺序执行)
    -->父类的非静态(成员变量、构造代码块,按书写顺序执行,最后执行构造方法)
    -->子类的非静态(成员变量、构造代码块,按书写顺序执行,最后执行构造方法)

    有多级父类: Object-->yeye--> fu--> zi

5 类的加载顺序。双亲委托机制,
    类加载器(bootstrap、extclassloader、systemclassloader、自定义加载器)
    加载顺序:触发类的加载,先判断方法区中是否已经加载过,如果已经加载过就不再加载,如果没有下载过,则从上至下进行加载,如果都不能
    加载则报ClassNotFoundException。
    bootstrap加载范围:jre\lib
    extclassloader 加载范围: jre\lib\ext
    systemclassloader 加载范围:classpath

6.注意
  代码块相当于方法 ,在代码块中定义的变量出了方法体就无效了。

1 个回复

倒序浏览
请问您发的这些帖子的源码能发我份吗?我是刚刚学这个的大二的学生,感激不尽了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马