final、static、代码块、静态代码块、内部类、代码执行顺序
final
static
import static java.lang.Integer.*;
int max_value = MAX_VALUE;
toHexString(max_value);
代码块
public static void main(String[] args) {
{
System.out.println("普通代码块-先声明");
}
System.out.println("函数普通");
{
System.out.println("普通代码块-后声明");
}
}
普通代码块-先声明
函数普通
普通代码块-后声明
public class CodeBlock {
{
System.out.println("构造代码块-先声明-执行");
}
public CodeBlock(){
System.out.println("构造器执行");
}
{
System.out.println("构造代码块-后声明-执行");
}
public void plainFunc(){
System.out.println("普通方法执行");
}
public static void main(String[] args) {
System.out.println("main方法");
CodeBlock cb1 = new CodeBlock();
cb.plainFunc();
CodeBlock cb2 = new CodeBlock();
}
}
main方法
构造代码块-先声明-执行
构造代码块-后声明-执行
构造器执行
普通方法执行
构造代码块-先声明-执行
构造代码块-后声明-执行
构造器执行
每实例化一个对象,则执行一次构造代码块
静态代码块
class Code{
{
System.out.println("Code的构造块");
}
static{
System.out.println("Code的静态代码块");
}
public Code(){
System.out.println("Code的构造方法");
}
}
public class CodeBlock{
{
System.out.println("CodeBlock的构造块");
}
static{
System.out.println("CodeBlock的静态代码块");
}
public CodeBlock03(){
System.out.println("CodeBlock的构造方法");
}
public static void main(String[] args){
System.out.println("CodeBlock的主方法");
new Code();
new Code();
new CodeBlock();
new CodeBlock();
}
}
CodeBlock的静态代码块
CodeBlock的主方法 //这里还没有加载Code,所以先执行主方法,再执行Code的静态代码块
Code的静态代码块
Code的构造块
Code的构造方法
Code的构造块
Code的构造方法
CodeBlock的构造块
CodeBlock的构造方法
内部类
public class Parcel2 {
class Contents {
private int i = 11;
public int value() { return i; }
}
class Destination {
private String label;
Destination(String whereTo) {
label = whereTo;
}
String readLabel() { return label; }
}
public Destination to(String s) {
return new Destination(s);
}
public Contents contents() {
return new Contents();
}
public void ship(String dest) {
Contents c = contents();
Destination d = to(dest);
System.out.println(d.readLabel());
}
public static void main(String[] args) {
Parcel2 p = new Parcel2();
p.ship("Tasmania");
Parcel2 q = new Parcel2();
// Defining references to inner classes:
Parcel2.Contents c = q.contents();
Parcel2.Destination d = q.to("Borneo");
}
}
public class DotThis {
void f() { System.out.println("DotThis.f()"); }
public class Inner {
public DotThis outer() {
return DotThis.this;
// A plain "this" would be Inner's "this"
}
}
public Inner inner() { return new Inner(); }
public static void main(String[] args) {
DotThis dt = new DotThis();
DotThis.Inner dti = dt.inner();
dti.outer().f();
}
}
public class DotNew {
public class Inner {}
public static void main(String[] args) {
DotNew dn = new DotNew();
DotNew.Inner dni = dn.new Inner();
}
}
Outer.Inner inner = new Outer.Inner();
inner.func();
interface content{
int func();
}
System.out.println(new content(){
@Override
public int func() {
return 1;
}
}.func());
代码执行顺序
- 静态先于非静态执行
- 代码块可以当做成员变量来看,对于静态代码块,类加载的时候执行;对于非静态代码块,构造函数之前执行,可以想成是在成员变量初始化的时候执行
- 父类优先于子类执行(因为子类涉及到对父类的重写等操作,只有父类初始完毕了,子类重写和引用才有意义)
参考文章:
1、《java编程思想》
2、http://www.cnblogs.com/sophine/p/3531282.html
final、static、代码块、静态代码块、内部类、代码执行顺序的更多相关文章
- Java父类与子类中静态代码块 实例代码块 静态变量 实例变量 构造函数执行顺序
实例化子类时,父类与子类中的静态代码块.实例代码块.静态变量.实例变量.构造函数的执行顺序是怎样的? 代码执行的优先级为: firest:静态部分 second:实例化过程 详细顺序为: 1.父类静态 ...
- Java 中的 static 使用之静态初始化块
Java 中可以通过初始化块进行数据赋值.如: 在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块.如果使用 static 修饰初始化块,就称为静态初始化块. 需要特别注意: ...
- Java类成员变量、普通成员变量、初始化块、构造方法的初始化和执行顺序
结论:执行的大致顺序如下, (1) 在一个不存在继承的类中:初始化static变量,执行static初始化块-->初始化普通成员变量(如果有赋值语句),执行普通初始化块-->构造方法 (2 ...
- 静态(static)代码块、构造代码块、构造函数、父类子类执行顺序
静态代码块:static修饰的代码块. 在类加载-初始化的时候进行,主要目的是给变量赋予初始值 构造代码块:直接在类中定义且没有加static关键字的代码块称为构造代码块. java会把构造代码块放到 ...
- JAVA代码中加了Try...Catch的执行顺序
public static String getString(){ try { //return "a" + 1/0; return "a"; } catch ...
- Java---类加载机制,构造方法,静态变量,(静态)代码块,父类,变量加载顺序
直接上代码: 代码1: public class ConstroctTest { private static ConstroctTest test = new ConstroctTest(); // ...
- 【转】java静态代码块和构造方法执行顺序
先看看下面几个类,然后判断它们的输出public class A { static{System.out.print(1);}public A(){System.out.print(2);}} pub ...
- java 子类、父类中静态代码块、字段,非静态代码块、字段以及构造函数的初始化顺序和次数
一个类中的数据初始化顺序是面试官非常喜欢出的面试题之一,本文用一个实例来介绍java中子类.父类中静态代码块.字段,非静态代码块.字段以及构造函数的执行顺序和次数. 一.包结构
- 编写Java程序,观察类启动时静态代码块和main()的执行顺序
返回本章节 返回作业目录 需求说明: 观察类启动时静态代码块和main()的执行顺序 在Book类中定义静态代码块. 在Book中分别定义一个普通实例方法和静态方法. 在Book类的静态代码块中调用静 ...
- static之静态初始化块
static之静态初始化块 所有的静态初始化块都优先执行,其次才是非静态的初始化块和构造函数,它们的执行顺序是: 父类的静态初始化块 子类的静态初始化块 父类的初始化块 父类的 ...
随机推荐
- springboot mybatis优雅的添加多数据源
springboot的原则是简化配置,本文试图不通过xml配置,使用configuration配置数据源,并进行简单的数据访问. 并且配置了多数据源,在开发过程中这种场景很容易遇到. 1.依赖 spr ...
- ReactiveCocoa_v2.5 源码解析之架构总览
ReactiveCocoa 是一个 iOS 中的函数式响应式编程框架,它受 Functional Reactive Programming 的启发,是 Justin Spahr-Summers 和 J ...
- 【特效】几种实用的按钮hover效果
效果预览:http://www.gbtags.com/gb/rtreplayerpreview-standalone/3095.htm html: <ul class="btn&quo ...
- 奥利奥好吃吗?Android 8.0新特性适配测试报告来啦!
WeTest 导读 谷歌2017 I/O开发者大会上发布了Android 8.0的正式版, 其官方代号为Oreo(奥利奥).网上关于Android8.0新功能特性的介绍已铺天盖地,新功能特性会对程序应 ...
- python数据结构之树和二叉树(先序遍历、中序遍历和后序遍历)
python数据结构之树和二叉树(先序遍历.中序遍历和后序遍历) 树 树是\(n\)(\(n\ge 0\))个结点的有限集.在任意一棵非空树中,有且只有一个根结点. 二叉树是有限个元素的集合,该集合或 ...
- Web安全学习笔记(一)
Web安全学习笔记(一): URL协议 HTTP协议 1. URL 2. HTTP协议 什么是HTTP HTTP的工作原理 HTTP报文 什么是Cookies HTTP请求方式 Referer请求的功 ...
- 关于Java和JavaScript对字符串截取处理的总结
在JavaWeb开发中,经常需要对字符串进行处理,包括Java语言和JS语言,总是容易弄混淆,这里简单对比一下两种语言对于字符串截取方法. 一.先看Java public class StringDe ...
- Archlinux 安装小计
前阵子Fedora太不稳定,几乎不能正常使用了,同时也对版本形式的linux每次升级后各种扫尾和清扫工作感到有点厌倦,心里也非常想体验一下linux的滚动发行版,所以下定决心要干掉fedora,主流的 ...
- electron 写入注册表 实现开机自启动
windows平台 首先先明确:开机自启动写入注册表的位置,在KEY_CURRENT_USER\Software\\Microsoft\\Windows\\CurrentVersion\\Run 打开 ...
- 使用vue-cli脚手架搭建简单项目框架
1.首先已经安装了node,最好版本6以上. 2.安装淘宝镜像 大家都知道国内直接使用 npm 的官方镜像是非常慢的,这里推荐使用淘宝 NPM 镜像.这样就可以直接使用cnpm了. npm insta ...