<init>与<clinit>,static与final与static final
<init>
和<clinit>
- init是对象构造器方法,初始化对象的时候执行
- clinit是类构造器方法,类加载的初始化阶段执行
final常量赋值(必须是一下其中一种)
- 显式赋值
- 构造参数中赋值
<init>
- 代码块中赋值
static类变量初始化
<clinit>
同步方法(static赋语句、static代码块由jvm clinit收集并执行)
接口与类一样都会生成<clinit>
接口与类不同的是,执行接口的<clinit>()方法不需要先执行父接口的<clinit>()方法。 只有当父接口中定义的变量使用时,父接口才会初始化。
接口的实现类在初始化时也一样不会执行接口的<clinit>()方法
接口中的属性都是static final类型的常量,因此在准备阶段就已经初始化
static final类常量
- 显式赋值
- static代码块
编译成class文件后都是 显示赋值
new对象执行的方法顺序
static代码块(多个static会按照书写顺序执行,static赋值语句同样)
此时已经收集好了所有类变量
所以这里有个需要注意的点是:静态代码块中
- 可以给所有类变量赋值以及使用声明在其前面的类变量,
- 不能使用声明在其之后的类变量(非法前向引用,编译错误)
普通代码块 (编译后普通代码块内容会加在构造方法的前几行)
构造方法
注:变量值以最后一次赋值为准,常量只能且必须有一次赋值
<clinit>()方法是由编译器自动收集类中的所有类变量的赋值动作和静态语句块(static{}块)中的语句合并产生的,编译器收集的顺序是由语句在源文件中出现的顺序所决定的,静态语句块中只能访问到定义在静态语句块之前的变量,定义在它之后的变量,在前面的静态语句块可以赋值,但是不能访问
仅调用静态变量/静态常量
- static代码块
<init>与<clinit>,static与final与static final的更多相关文章
- Java基础之final、static关键字
一.前言 关于这两个关键字,应该是在开发工作中比较常见的,使用频率上来说也比较高.接口中.常量.静态方法等等.但是,使用频繁却不代表一定是能够清晰明白的了解,能说出个子丑演卯来.下面,对这两个关键字的 ...
- Java关键字final、static
一.final根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理解而需要阻止改变:设计或效率. final ...
- 【转】Java关键字final、static使用总结
转自:http://lavasoft.blog.51cto.com/62575/18771/ Java关键字final.static使用总结 一.final 根据程序上下文环境, ...
- 理解Java中的final和static关键字
回顾这两个关键字前,先考虑一个问题: Static变量存储在JVM中的位置,或者说static变量是如何被加载的? JVM会把类的静态方法和静态变量在类加载的过程中读入方法区(Method Area) ...
- Java关键字final、static使用总结
Java关键字final.static使用总结 一.final 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方 ...
- Java基础-final和static的区别
很多时候会容易把static和final关键字混淆,static作用于成员变量用来表示只保存一份副本,而final的作用是用来保证变量不可变.看下面这个例子: public class Test { ...
- final与static
一.final 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理解而需要阻止改变:设计或效率. fina ...
- 转!Java关键字final、static使用总结
Java关键字final.static使用总结 一.final 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可 ...
- Java关键字final、static使用总结(转)
Java关键字final.static使用总结 一.final 根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方 ...
随机推荐
- 014_go语言中的变参函数
代码演示 package main import "fmt" func sum(nums ...int) { fmt.Print(nums, " ") toto ...
- java web应用启动报错:Caused by: java.lang.ClassNotFoundException: ServletContext
ServletContext是个接口,不同的WEB容器(tomcat, jboss等)都有各自的实现. 一般是缺少servlet-api.jar包 在Java Build Path的Libraries ...
- Django-model模型中Field属性类别及选项
参考:[Django官方文档] Django所使用模型中一些属性类别及选项(Field and Options) 1. Models Field 各种类型分别对应数据库中的各种类型,这是Django对 ...
- 代码优化之return 减少括号嵌套
代码优化之return 减少括号嵌套 例如下面的公共方法 // 优化 substring方法 解决边界越界问题 空指针问题 优化前 public static String subString ...
- DeepLab系列
论文: (DeepLabV1)Semantic image segmentation with deep convolutional nets and fully connected CRFs (De ...
- Linux中.bashrc与.bash_profile的对比
如果你平时在命令行上花费了大量时间,那么你可能会萌生出希望定制 Shell 环境的想法.今天本文就和大家讲解该如何实现你们的这个想法.其实可以通过创建别名.向环境变量 $PATH 添加新目录或更改 S ...
- 面试现场:裸面京东JavaT5第一轮电话面试
人物简介 清辞女朋友,94年资深女程序员一枚,15年非本专业毕业,有过1年测试经验,3年Java开发经验,之前有个1年大公司的工作经历,2年的车联网公司经历,每天打卡式工作,朝九晚七.工作之余没看过一 ...
- maven命令下载jar包
mvn install:install-file -Dfile=jar包保存的本地路径 -DgroupId=jar保存的父级路径 -DartifactId=jar包文件夹名称 -Dversion=版本 ...
- linux 解压与压缩
转http://www.cnblogs.com/eoiioe/archive/2008/09/20/1294681.html .tar 解包:tar xvf FileName.tar打包:tar cv ...
- Java8中list.sort的lamba表达式
最近写代码,需要对list集合排序,IDEA总是黄色警告: Reports calls to Collections.sort(list, comparator) which could be rep ...