zoukankan      html  css  js  c++  java
  • <init>与<clinit>,static与final与static final

    <init><clinit>

    • init是对象构造器方法,初始化对象的时候执行
    • clinit是类构造器方法,类加载的初始化阶段执行
    final常量赋值(必须是一下其中一种)
    1. 显式赋值
    2. 构造参数中赋值<init>
    3. 代码块中赋值
    static类变量初始化
    1. <clinit>同步方法(static赋语句、static代码块由jvm clinit收集并执行)

    接口与类一样都会生成<clinit>

    接口与类不同的是,执行接口的<clinit>()方法不需要先执行父接口的<clinit>()方法。 只有当父接口中定义的变量使用时,父接口才会初始化。

    接口的实现类在初始化时也一样不会执行接口的<clinit>()方法

    接口中的属性都是static final类型的常量,因此在准备阶段就已经初始化

    static final类常量
    1. 显式赋值
    2. static代码块

    编译成class文件后都是 显示赋值

    new对象执行的方法顺序
    1. static代码块(多个static会按照书写顺序执行,static赋值语句同样

      • 此时已经收集好了所有类变量

      • 所以这里有个需要注意的点是:静态代码块中

        • 可以给所有类变量赋值以及使用声明在其前面的类变量
        • 不能使用声明在其之后的类变量(非法前向引用,编译错误)
    2. 普通代码块 (编译后普通代码块内容会加在构造方法的前几行

    3. 构造方法

    注:变量值以最后一次赋值为准,常量只能且必须有一次赋值

    <clinit>()方法是由编译器自动收集类中的所有类变量的赋值动作和静态语句块(static{}块)中的语句合并产生的,编译器收集的顺序是由语句在源文件中出现的顺序所决定的,静态语句块中只能访问到定义在静态语句块之前的变量,定义在它之后的变量,在前面的静态语句块可以赋值,但是不能访问

    仅调用静态变量/静态常量
    1. static代码块
  • 相关阅读:
    周末、广州、WEB安全测试实战训练
    WEB安全测试实战训练周末精品班课程圆满结束!
    常用渗透性测试工具
    大家还在迷信工具么?
    团购网站安全性普遍堪忧
    网页安全漏洞检测 隐藏字段
    用ModSecurity+PhantomJS进行服务器端XSS攻击检测
    关于HP WebInspect 9.1
    AQA(www.AutomationQA.com)开始连载《Web Security Testing Cookbook》学习笔记
    从团购网的漏洞看网站安全性问题
  • 原文地址:https://www.cnblogs.com/jklixin/p/13626993.html
Copyright © 2011-2022 走看看