java非静态代码块和静态代码块介绍

news2024/9/23 1:19:47

代码块
SE.10.0…02.28

非静态普通代码块:定义在方法内部的代码块,不用任何关键字修饰,又名构造代码块、实例代码块
静态代码块:用static修饰的代码块

非静态代码块

public class Test {
    public static void main(String[] args) {
        {
            //普通代码块
            int a = 10;
            System.out.println(a);//打印10
        }
        int a = 100;
        System.out.println(a);//打印0100
    }
}

构造代码块(实例代码块,非静态代码块)

class Student {
    private static String classroom = "八年级二班";//班级
    private String name;//姓名
    private int age;//年龄

    public Student(String name, int age) {
        this.name = name;
        this.age = age;
    }
    
    {
        System.out.println("构造代码块/非静态代码块/实例代码块,一般用于初始化非静态的对象属性");
        System.out.println("而且在顺序上他会比构造方法先被编译器调用");
        name = "baixian";//所以这里对象实例化后的name应该是白线,因为构造方法最后运行
    }
}

public class Test {
    public static void main(String[] args) {
        Student student = new Student("白线",18);
        
    }
}

但是如果我的构造方法是空的,或者我没有写构造方法,那么实例化就赋值的就是我构造代码块里面的值

class Student {
    private static String classroom = "八年级二班";//班级
    private String name;//姓名
    private int age;//年龄

    public Student() {
    }

    {
        System.out.println("构造代码块/非静态代码块哦/实例代码块吗,一般用于初始化非静态的对象属性");
        System.out.println("如果构造代码为空,那么实例化的值就会优先选择这");
        name = "baixian";//所以这里对象实例化后的name应该是baixian
    }

    public String getName() {
        return name;
    }
    
}

public class Test {
    public static void main(String[] args) {
        Student student = new Student();
        System.out.println(student.getName());
    }
}

那么如果定义类的成员变量的时候初始就附了值,构造代码块里也赋了值,那么究竟实例化成哪一个的

class Student {
    
    private String classroom = "八年级二班";//班级
    private String name = "白线";//姓名
    private int age;//年龄

    {
        System.out.println("无论是一开始赋值,还是构造代码块赋值,本身都是非静态的,所以谁最后执行,谁就是实例化都的值");
        this.name = "baixian";//所以这里对象实例化后的name应该是白线
    }
    public Student() {
    }

    public String getName() {
        return name;
    }

}

public class Test {
    public static void main(String[] args) {
        Student student = new Student();
        System.out.println(student.getName());
    }
}

实际底层是编译器将构造代码块(非静态代码块)全部拷贝到构造方法里面,并且放在最前面。这样就能更深刻理解是这样的一个执行顺序了。

静态代码块

只要类被加载,就会先执行静态代码块,并且无论实例化几次,静态代码块只会被执行一次

class Student {
    static {
        System.out.println("执行静态代码块");
    }
    private String classroom = "八年级二班";//班级
    private String name = "白线";//姓名
    private int age;//年龄

    {
        System.out.println("执行非静态代码块");
    }

    public Student() {
    }


}

public class Test {
    public static void main(String[] args) {
        Student student1 = new Student();
        Student student2 = new Student();
    }
}

在这里插入图片描述

在继承背景下的静态代码块与非静态代码块,构造方法的执行顺序

看下面的代码思考123456这六行代码的执行顺序

class Animal {
    static {
        System.out.println("Animal static{}");//1
    }

    public String name;
    public int age;

    {
        System.out.println("Animal{}");//2
    }

    public Animal() {
        System.out.println("Animal()");//3
    }
}


class Dog extends Animal {
    static {
        System.out.println("Dog static{}");//4
    }

    {
        System.out.println("Dod{}");//4

    }

    public Dog() {
        System.out.println("Dog()");//6
    }

    public void wangwang() {
        System.out.println(name + "汪汪叫");//5
    }
}

public class Test {
    public static void main(String[] args) {
        Dog dog = new Dog();
    }
}

在这里插入图片描述
1、父类静态代码块优先于子类静态代码块执行,且是最早执行
2、父类实例代码块和父类构造方法紧接着执行
3、子类的实例代码块和子类构造方法紧接着再执行
4、第二次实例化子类对象时,父类和子类的静态代码块都将不会再执行

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/505997.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【EKF】卡尔曼滤波的一维应用实例

前言 推导了卡尔曼滤波的原理之后,使用一个简单的一维应用实例来训练一下,加深印象。使用一个温度测量的实例来说明,系统的状态方程为: X(k) A*X(k-1) B*u(k-1) w(k-1) Z(k) H*X(k) v(k) 其中 w 为过程噪声,方…

方言翻译APP小程序开发具备哪些功能?

我国语言文华博大精深,很多地方都有着民族特色方言,在当地很盛行但是外地人听不懂也不会说,这就給沟通造成了一定的困扰。方言翻译APP软件是专门针对地方性方言开发的一款系统软件,提供全国各地方言翻译功能,一键在线就…

Android中如何使用GPS

目录 GPS简介 GPS的常用API locationProvider 使用GPS获取位置信息 室内WIFI定位 近距离警报 GPS简介 Gobal Positioning System,全球定位系统,是美国在20世纪70年代研制的一种以人造地球卫星为基础的高精度无线电导航的定位系统,它在全…

【手机摄影】--全集

算了,摄像机太贵了,玩不起,还是看看手机摄影吧。 学习链接 :https://www.bilibili.com/video/BV14e411T7md 1. 认识手机摄影 1.1 局限性 手机的摄像头能够满足大部分场景,但以下场景会受到掣肘,最好还是用…

面试这么简单,阿里原来这么容易就能进去…...

最近和阿里的一个老朋友闲聊,感触颇深,据他说公司近期招聘的测试工程师,大多数候选人都有一个“通病”:在工作2-3年的时候遇到瓶颈,而且是一道很难跨越的坎。 为什么会遇到这种情况?因为大部分测试工程师在…

项目管理基础(第五版)读书笔记

项目管理基础(第五版)读书笔记 章节概要前言第一章:项目管理概述 日期:2023年3月23日 章节概要 前言 项目管理协会 Project Management Institute。简称PMI。项目管理知识体系指南 Project Management Body Of Knowledge。简称P…

4.QT应用程序主窗口

本章代码见文末链接 主窗口框架 新建Qt Wisgets项目mymainwindow,类名默认MainWindow,基类默认QMainWindow 更改文字如图,如果中文无法直接输入,可以试试复制粘贴 “动作编辑器”中(默认在右下角)&…

关于IRIG-B码对时的理解和分析

一、IRIG-B是什么? IRIG-B(简称B码)是一种应用于靶场的串行时间交换码。由美国靶场司令部委员会下属“靶场仪器组”提出的一种时间信息编码标准(IRIG是英文InterRange Instrumentation Group的缩写。它是美国靶场司令委员会的下属…

一百零八、Kettle采集Kafka数据到HDFS(踩坑,亲测有效)

Kafka到HDFS,除了用Kafka API和flume之外,还可以用kettle,最大优点是不用写代码! 版本:Kettle版本:8.2、Hadoop版本:3.1.3 前提: 详情请看鄙人的一百零一、Kettle8.2.0连接Hive…

pip安装配置清华镜像源scrapy框架,并进行框架的案例演示

文章目录 运行cmd终端后直接输入安装成功scrapy框架安装成功 为什么使用此命令安装scrapy框架成功后创建scrapy项目建议在pycharm终端创建项目打开项目 用scrapy框架实现案例——从新浪网爬取热点并把数据输入到excel表中编辑setting.py文件创建脚本、写入脚本在终端运行脚本文…

长三角生物医药产业加速跑,飞桨螺旋桨为创新药企、医药技术伙伴装上AI大模型引擎...

生物医药是国家“十四五”规划中明确的战略性新兴产业之一。长三角地区是中国生物医药产业的排头兵,也是《“十四五”生物经济发展规划》的“生物经济先导区”之一。据《上海市生物医药产业投资指南》显示,2022 年上海市生物医药产业在 I 类国产创新药数…

新手如何学习挖漏洞?【网络安全】

新手如何学习挖漏洞?看这篇就够了 前言 有不少阅读过我文章的伙伴都知道,我从事网络安全行业已经好几年,积累了丰富的经验和技能。在这段时间里,我参与了多个实际项目的规划和实施,成功防范了各种网络攻击和漏洞利用&…

Cron表达式X分钟执行一次的设计缺陷。SQL JOIN的设计缺陷。在线Cron表达式网站的缺陷。Spring 定时任务的年问题。

Cron Cron表达式 定时任务计划任务 Chronological英 /ˌkrɒnəˈlɒdʒɪk(ə)l/adj. 按发生时间顺序排列的;(年龄)按时间计算的1. 月 周设计精妙吗? 学习 0/5 * * * * ? * 秒 分 时 日 月 周 年1. 年一般省略。为&#xf…

Live800:服务经济时代,企业如何满足客户需求?

在互联网与市场经济的催化下,我们正在从产品经济时代过渡到服务经济时代。在产品经济时代,企业关注的核心是质量和成本;而在服务经济时代,如何面向客户,满足客户需求则成为企业建立核心竞争力的关键。 具体来说&#x…

【精选】关于洪涝灾害智慧水利和人工智能大模型的解决方案2023版

本资料来源公开网络,仅供个人学习,请勿商用,如有侵权请联系删除 智慧水利平台 实现“全局一盘棋”的智慧水利综合管理,通过“一图、一库、一平台”结合水利大数据、数字孪生与人工智能,为水利工作提供有力的管理抓手&…

SingleR --细胞注释

文章目录 briefExample使用内置的 references使用其他注释好的数据集作为 reference singleR还提供了注释诊断的方法 brief Example The celldex package provides access to several reference datasets (mostly derived from bulk RNA-seq or microarray data)。 The Human…

《狂飙》原著来了,邀你重新见证

2023年的开篇十分精彩且丰富,经历过生活的不幸,新的一年万物复兴,每个人心底那颗躁动的心又重新释放,希望新的开始不负所望,年末复盘时所得皆所愿! 开篇 开年影视第一炮,炸出了所有人被压抑的内…

AIGC技术发展和应用方向

AIGC(Artificial Intelligence Generated Content)是指通过人工智能技术生成的各种文本、图像、音频和视频等多媒体内容。AIGC技术是机器学习和自然语言处理等技术的结合,通过对海量数据的学习和分析,可以让计算机模拟人类的创造力…

Spring Boot 单体应用一键升级成 Spring Cloud Alibaba

作者:十眠 背景 随着 Apache Dubbo、Nacos 以及 Spring Cloud 等服务框架的流行,越来越多的企业开始采用微服务架构来构建其应用程序。微服务架构使企业能够将其应用程序拆分成多个小型服务,这些服务可以独立部署和扩展。这种架构模式也使企…

怎么给pdf文件添加水印

怎么给pdf文件添加水印?PDF文件的应用比较广泛,大家喜欢将各种办公资料和文档转换成PDF格式,为什么呢?因为pdf文件具有比较强的稳定性而且不利于编辑修改,所以更利于保存和转发。有时候我们会在工作中花费大量时间制作…