java学习--代码块

package com.block.test01;
class Main{public static void main(String[] args) {Block block = new Block("你好,李焕英");new Block("你好",12,24);}
}
public class Block {String name;int begin_time;int end_time;
//如果在调用构造器时都需要打印那几句话,那么每个构造器都需要加入这几句代码//这样实在冗余,这个时候可以使用代码块
{System.out.println("电影正在加载----");System.out.println("电影加载成功");System.out.println("电影开始播放");
}public Block(String name) {System.out.println("第一个构造器");
//        System.out.println("电影正在加载----");
//        System.out.println("电影加载成功");
//        System.out.println("电影开始播放");this.name = name;}public Block(String name, int begin_time) {//        System.out.println("电影正在加载----");
//        System.out.println("电影加载成功");
//        System.out.println("电影开始播放");this.name = name;this.begin_time = begin_time;}public Block(String name, int begin_time, int end_time) {System.out.println("最后一个构造器");
//        System.out.println("电影正在加载----");
//        System.out.println("电影加载成功");
//        System.out.println("电影开始播放");this.name = name;this.begin_time = begin_time;this.end_time = end_time;}
}

运行结果:

使用代码块,他会先运行代码块,再运行构造器内代码,并且跟代码块的位置美关系,放在后面也会先运行代码块内容

多了个父类时,会先加载父类

但是普通代码块,创建一次对象就执行一次

用类名直接调用静态属性时没有创建新对象这个动作,所以只会调运静态代码块,普通代码块就不会执行

package com.block.test02;
class Main{public static void main(String[] args) {Block_ block = new Block_();}
}
public class Block_ {int a=getA();static int b=getB();public Block_() {System.out.println("构造器被调用");}{System.out.println("普通代码块被执行");}static {System.out.println("静态代码块被执行");}int getA(){System.out.println("普通属性被执行");return 100;}static int getB(){System.out.println("静态属性被执行");return 100;}}

运行结果:

静态先运行,有两种或多种静态的代码语句就按顺序依次执行,然后再执行普通代码语句,有两种或多种普通的代码语句就按顺序依次执行。最后再执行构造器

package com.block.test03;public class Block_ {public static void main(String[] args) {B b = new B();}
}
class A{{System.out.println("a类代码块");}public A() {System.out.println("a类构造器");}
}
class B extends A{{System.out.println("b类代码块");}public B() {System.out.println("b类构造器");}
}

运行结果:

解析:

在创建对象B时会调用B的无参构造器(前会进行加载类的动作,在加载类的时候会开始执行static类型的数据,本段代码没有则直接忽略),于是乎进入B的无参构造器,但是在构造其中隐藏着两个动作,1.是会默认调用父类的无参构造器,2.是会默认调运(初始化)本类的代码块,普通参数.....

所以他会先到父类A中的默认构造器中,而A的默认构造器也会1.默认调用父类的无参构造器,2.是会默认调运(初始化)本类的代码块,普通参数.....但A类的父类时Object,所以调运其默认构造器是无事发生的,但A类是有代码块的,所以,会最执行代码块的内容再执行a的无参构造器内容再回到B类,B类调运完父类无参构造器就会开始调运本类的代码块了,所以再执行本类代码块内容,最后再执行构造器内容

package com.block.test04;public class Black__ {public static void main(String[] args) {C c = new C();}
}
//加载类时A静态属性 A静态代码块  B静态属性 B静态代码块 C静态属性 C静态代码块
//创建对象时然后进入构造器,构造器默认执行两个动作,先是调用父类无参构造器再初始化代码块和属性等。。。
//于是再创建C对象时进入了C的无参构造器然后调用了他的父类B的无参构造器,而进入B也默认执行两个动作,先是调用父类无参构造器再初始化代码块和属性等。。。
//于是又调用了A类无参构造器,A类父类为objec所以调用其构造器无事发生,于是进入a类代码块属性的初始化,先后顺序由其位置决定的
//该类中属性在前所以先运行属性代码,所以此时打印出A普通属性,再就是A普通代码块最后A类构造器被执行
//然后回到了B类b类调用完A后开始初始化自己的属性代码块等,顺序按写的先后,于是打印出B普通属性B普通代码块最后B类构造器被执行
//最后再是C类同上C普通属性 C普通代码块  C类构造器被执行
class A{static int a=getA();int b=getB();static {System.out.println("A静态代码块");}{System.out.println("A普通代码块");}static int getA(){System.out.println("A静态属性");return 100;}int getB(){System.out.println("A普通属性");return 100;}public A() {System.out.println("A类构造器被执行");}
}
class B extends A{static int c=getC();int d=getD();static {System.out.println("B静态代码块");}{System.out.println("B普通代码块");}static int getC(){System.out.println("B静态属性");return 100;}int getD(){System.out.println("B普通属性");return 100;}public B() {System.out.println("B类构造器被执行");}}
class C extends B{static int E=getE();int F=getF();static {System.out.println("C静态代码块");}{System.out.println("C普通代码块");}static int getE(){System.out.println("C静态属性");return 100;}int getF(){System.out.println("C普通属性");return 100;}public C() {System.out.println("C类构造器被执行");}
}
//A

解析:

在创建对象时会进行加载类的动作,加载类时会开始执行静态属性的代码,并按前后顺序进行于是就先输出了A静态属性 A静态代码块  B静态属性 B静态代码块 C静态属性 C静态代码块
再然后创建对象时进入构造器,构造器默认执行两个动作,先是调用父类无参构造器再初始化代码块和属性等。。。(谁在前谁先被执行)
于是再创建C对象时进入了C的无参构造器然后调用了他的父类B的无参构造器,而进入B也默认执行两个动作,先是调用父类无参构造器再初始化代码块和属性等。。。
于是又调用了A类无参构造器,A类父类为objec所以调用其构造器无事发生,于是进入a类代码块属性的初始化,先后顺序由其位置决定的,该类中属性在前所以先运行属性代码,所以此时打印出A普通属性,再就是A普通代码块最后A类构造器被执行
然后回到了B类b类调用完A后开始初始化自己的属性代码块等,顺序按写的先后,于是打印出B普通属性B普通代码块最后B类构造器被执行
最后再是C类同上C普通属性 C普通代码块  C类构造器被执行

例题:

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

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

相关文章

华盈生物-20K人类蛋白组芯片的超凡应用:揭秘蛋白质的神奇世界

各位科研小伙伴们,欢迎再次来到我们的科学探险之旅!今天,我们要深入探讨一项超级实用的科研工具——20K人类蛋白组芯片。通过这款芯片,你可以揭开蛋白质世界的神秘面纱,探索各种有趣的应用方向。准备好了吗&#xff1f…

在python中使用正则表达式

正则表达式是什么?就是要寻找的数据的规律,使用正则表达式的步骤有三 第一,寻找规律,第二使用正则符号表示规律,第三,提取信息 看下面的代码 import re wenzhang (小草偷偷地从土里钻出来,嫩…

Leetcode 3228. Maximum Number of Operations to Move Ones to the End

Leetcode 3228. Maximum Number of Operations to Move Ones to the End 1. 解题思路2. 代码实现 题目链接:3228. Maximum Number of Operations to Move Ones to the End 1. 解题思路 这一题不难分析得到,要获得最多的操作次数,只需要从左…

数据结构---散列表(哈希表)

什么是哈希表 1、哈希表(Hash Table):也叫做散列表。是根据关键码值(Key Value)直接进行访问的数据结构。 2、哈希表通过「键 key 」和「映射函数 Hash(key) 」计算出对应的「值 value」,把关键码值映射到…

SwiftUI 5.0(iOS 17)滚动视图的滚动目标行为(Target Behavior)解惑和实战

概览 在 SwiftUI 的开发过程中我们常说:“屏幕不够,滚动来凑”。可见滚动视图对于超长内容的呈现有着多么秉轴持钧的重要作用。 这不,从 SwiftUI 5.0(iOS 17)开始苹果又为滚动视图增加了全新的功能。但是官方的示例可…

【Node.js】调试 Node.js 程序

调试 Node.js 程序可以使⽤以下⽅法: console.log():使⽤ console.log() 打印变量或者调试信息,可以在控制台中查看输出的结果。debugger:在代码中使⽤ debugger 命令设置断点,当程序执⾏到该点时会暂停,可…

Linux----Mplayer音视频库的移植

想要播放视频音乐就得移植相关库到板子上 Mplayer移植需要依赖以下源文件:(从官网获取或者网上) 1、zlib-1.2.3.tar.gz :通用的内存空间的压缩库。 2、libpng-1.2.57.tar.gz :png格式图片的压缩或解压库 3、Jpegsrc.v9b.tar.gz : jpeg格式图片的压…

Unity3D 如何自动点击UIElement.Button类型的按钮详解

前言 在Unity3D开发中,自动点击UI界面上的按钮是一个常见的需求,特别是在自动化测试、演示脚本或游戏AI控制等场景中。Unity的UI系统(UGUI)提供了灵活的接口来实现这一功能。下面将详细介绍如何在Unity中自动点击UIElement.Butto…

数据结构day3

一、思维导图 二、顺序表实现学生管理系统 //头文件 #ifndef TEST_H #define TEST_H #define MAX_SIZE 100//定义学生类型 typedef struct {char name[20]; //姓名int age; //年龄double score; //分数 }datatype;//定义班级类型 typedef struct {datatype student[MAX…

CDGA数据治理:突破卡点堵点,解决确权难、流通交易难问题

随着大数据时代的来临,数据已成为推动社会进步和经济发展的重要力量。然而,数据治理中的卡点堵点问题,特别是确权难、流通交易难,正成为制约数据要素市场健康发展的瓶颈。本文将探讨这些问题,并提出相应的解决方案。 确…

uniapp写登陆|微信小程序登录和微信h5登录使用同一个页面

文章目录 导文微信小程序登录先写一个样式代码实现详细解释: 微信h5登录先写一个样式代码实现1. checkWeChatCode()2. getWeChatCode()页面获取登陆后的code 导文 微信小程序登录怎么实现? 微信h5登录怎么实现? 用uniapp写同一个页面&#xf…

CloudCampus的三种部署模式

CloudCampus的三种部署模式 本地部署 客户购买控制器 自己运营 软件永久license sns ,将软件补丁、软件升级(含升级版本的新特性)、远程支持等打包在一起组成SnS年费 msp自建云部署 msp 购买控制器 msp运营 …

深入解析:conda 与 pip 使用全攻略

在 Python 环境管理和包管理中,conda 和 pip 是两种最常见的工具。了解它们之间的区别和联系,并掌握常用的使用命令和配置源,可以帮助我们更高效地管理 Python 环境和安装包。 conda 与 pip 的区别和联系 区别 包管理范围: cond…

测试数据科学家深度学习基础知识的 45 个问题(以及解决方案)

测试数据科学家深度学习基础知识的 45 个问题(以及解决方案) 一、介绍 早在2009年, 深度学习还只是一个新兴领域。只有少数人认为这是一个富有成效的研究领域。今天,它被用于开发应用程序,这些应用程序在一段时间前被认为是困难或不可能做到的。 语音识别、图像识别、在数…

Linux第三节课(基本指令)

一、补充 1. *表示可执行程序,例如: ------ ls *(显示当前目录下的所有的可执行程序) ------ ls *.c(显示当前目录下的所有的可执行的C语言程序) ------ ls test*.c(显示当前目录下的以test命名开头的所有的可执行的C语言程序) 2.rm -i 被删文件 --…

《云原生安全攻防》-- 容器攻击案例:镜像投毒与Fork炸弹

在本节课程中,我们将介绍两个比较有意思的容器攻击案例,镜像投毒与Fork炸弹。 在这个课程中,我们将学习以下内容: 镜像投毒:构建恶意镜像,诱导用户拉取镜像创建容器。 Fork炸弹:Fork炸弹的攻击…

【Socket 编程】基于UDP协议建立多人聊天室

思路 对于服务端来说,除了要接收消息之外,还要实现一个路由转发模块,该路由转发模块可以将相应发送给所有连接的客户端。而对于客户端来说,除了要发送消息给聊天室,还要能实时看到其它所有客户端的消息。 下面来看看具…

鸿蒙笔记--动画

这一节主要了解一下鸿蒙的动画,动画的引入主要是为了提升用户体验、增加用户反馈和互动感、引导用户操作以及缓解等待带来的不适感。 属性动画: Index.ets Entry Component struct Index {StatewidthSize: number 100StateheightSize: number 40build() {Column…

C++函数( Lambda、inline 、多载、指标)第二部

Lambda 函数 Lambda 函数是C11 新增的函数形式&#xff0c;这是种匿名函数&#xff0c;也就是不需要函数识别字&#xff0c;简单举例如下 #include <iostream>int main() {auto f [](int i) {return i * i;};std::cout << f(11) << std::endl;std::cout &l…

sql常见50道查询练习题

sql常见50道查询练习题 1. 表创建1.1 表创建1.2 数据插入 2. 简单查询例题(3题&#xff09;2.1 查询"李"姓老师的数量2.2 查询男生、女生人数2.3 查询名字中含有"风"字的学生信息 3. 日期相关例题(6题&#xff09;3.1 查询各学生的年龄3.2 查询本周过生日的…