动态代码块、静态代码块、静态方法、静态变量(属性 )、构造方法

2023-11-11

1.动态代码块

class Super{
	int a = 10;
	public void m1(){
		System.out.println("m1...");
	}
	//动态代码块
	{
		System.out.println("动态代码块开始执行...");
		System.out.println("成员属性:"+a);
		m1();
		System.out.println("动态代码块执行结束...");
	}
	public Super(){
		System.out.println("Super()...对象构建结束");
	}
}

     等同于普通的成员方法
    书写位置:类以内,其他函数以外。最好是书写在属性和方法之后
    书写语法:  
    {
        //功能语句
    }
    执行时机:创建对象时,会触发动态代码块的执行
    执行顺序:初始化属性之后,构造方法执行之前
    作用:可以给实例属性赋值(给实例属性进行必要的赋值)

2.静态代码块

class Super{
	int a = 10;
	public void m1(){
		System.out.println("m1...");
	}
	//动态代码块
	{
		System.out.println("动态代码块开始执行...");
		System.out.println("成员属性:"+a);
		m1();
		System.out.println("动态代码块执行结束...");
	}
	//静态代码块
	static{
		System.out.println("静态代码块执行......");
	}
	public Super(){
		System.out.println("Super()...对象构建结束");
	}
}

 1. 等同于静态方法
    书写位置:本类内部
    书写语法
    static{
        //功能代码
    }
    执行时机:类加载时,会被触发执行一次
    执行顺序:在构建对象之前
2.静态成员 ---- 只会被加载一次
    静态属性   静态方法   静态代码块
  非静态成员
      成员变量   成员方法   动态代码块
3.静态代码块内部无法使用类的非静态成员

3.构造方法

作用
    构建对象 [JVM构建对象时触发执行]
    可以用来给属性赋予最终值
语法
    1.无参构造
            public 类名(){}
            若未手动提供任何一个构造函数,系统默认提供一个无参构造
            若手动提供了构造函数,则系统不再提供无参构造
    2.有参构造
            public 类名(形参列表){
            }
    3.构造函数存在重载,具体触发哪一个构造函数的执行,取决于 new 类名(实参)
        取决于实参的类型,顺序,个数

4.执行顺序

 静态代码块>构造代码块>构造函数>普通代码块

分配空间
                1.加载父类的静态成员(静态属性,静态方法,静态代码块)
                2.加载子类的静态成员(静态属性,静态方法,静态代码块)
                                    ----- 静态成员只加载一次
                3.初始化父类属性
                4.加载执行父类动态代码块
                5.触发父类构造函数的执行
                6.初始化子类属性
                7.加载执行子类的动态代码块
                8.触发子类构造函数的执行  

                                     ------ 第一个子类对象构建结束
                
                若构建多个子类对象 重复执行 345678

public class TestStaticDemo{
	public static void main(String[] args){
		new Sub();
		new Sub();
		new Sub();	
	}
}
class Super{
	String field = "父类的成员变量";
	static String staticField = "父类的静态属性";
	public void m1(){
		System.out.println("父类的成员方法");
	}
	public static void m2(){
		System.out.println("父类的静态方法");
	}
	{
		System.out.println(field);
		System.out.println("父类的动态代码块");
	}
	static{
		System.out.println(staticField);
		System.out.println("父类的静态代码块......");
	}
	public Super(){
		System.out.println("父类的构造方法,父类对象构建结束");
	}
}
class Sub extends Super{
	String field = "子类的成员变量";
	static String staticField = "子类的静态属性";
	public void m1(){
		System.out.println("子类的成员方法");
	}
	public static void m2(){
		System.out.println("子类的静态方法");
	}
	{
		System.out.println(field);
		System.out.println("子类的动态代码块");
	}
	static{
		System.out.println(staticField);
		System.out.println("子类的静态代码块......");
	}
	public Sub(){
		System.out.println("子类的构造方法,子类对象构建结束");
	}
}
程序的输出结果=========
父类的静态属性
父类的静态代码块......
子类的静态属性
子类的静态代码块......
父类的成员变量
父类的动态代码块
父类的构造方法,父类对象构建结束
子类的成员变量
子类的动态代码块
子类的构造方法,子类对象构建结束
父类的成员变量
父类的动态代码块
父类的构造方法,父类对象构建结束
子类的成员变量
子类的动态代码块
子类的构造方法,子类对象构建结束
父类的成员变量
父类的动态代码块
父类的构造方法,父类对象构建结束
子类的成员变量
子类的动态代码块
子类的构造方法,子类对象构建结束

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

动态代码块、静态代码块、静态方法、静态变量(属性 )、构造方法 的相关文章

随机推荐

  • sql注入系列之Sqli-labs(less-8)

    判断注入点 http 192 168 81 210 sqli Less 8 id 1 id等于1的时候正常id等于1 的时候页面有改变 因此可以判断可能存在注入 并且是布尔型盲注 判断注入类型 输入1 and 1 1和1 and 1 2发现
  • MySQL字符串截取:左截取、右截取、按关键字截取

    1 从左开始截取字符串 语法 SELECT LEFT str len str 被截取的字符串 len 截取长度 示例 SELECT LEFT TF 8220210412003 1 10 结果为 TF 8220210 2 从右开始截取字符串
  • python使用matplotlib创建三维图时隐藏坐标轴、网格、背景的方法

    使用下面的代码创建一条空间直线 import numpy as np import matplotlib pyplot as plt 创建一个空白画布 fig plt figure 创建一个子图 ax fig add subplot pro
  • [-] \Navicat-Cracker NavicatCrackerDlg.cpp:463 ->Please Patch first Or Specified RSA private key

    报错信息 Navicat Cracker NavicatCrackerDlg cpp 463 gt hinese Can t Generate Activation Code Keygen HINT Please Patch first O
  • 【Mo 人工智能技术博客】文本挖掘之LDA主题模型

    文本挖掘之LDA主题模型 作者 郑培 引言 主题模型是文本挖掘的重要工具 近年来在工业界和学术界都获得了非常多的关注 在文本挖掘领域 大量的数据都是非结构化的 很难从信息中直接获取相关和期望的信息 一种文本挖掘的方法 主题模型 Topic
  • ReLU,Sigmoid,Tanh,softmax,pipeline【基础知识总结】

    一 ReLU Rectified Linear Activation Function 1 优点 2 缺点 3 补充 1 Leaky ReLUs 2 参数化修正线性单元 PReLU 3 随机纠正线性单元 RReLU 二 Sigmoid 1
  • echarts自适应父级盒子宽度

    这里写自定义目录标题 效果 手动改变窗口大小 echarts实现自动适应父级盒子宽度 1 在vue中安装一个插件element resize detector 这是一个元素调整大小检测器 npm install element resize
  • 微观的C/C++编译执行过程

    前言 相信能看到这篇文章的同学 是对C语言很热爱的人 最开始学习C语言的时候 我们大多数人都是用集成开发环境 VS VC devc 等 当我们把C语言源代码写好了之后 在集成开发工具中这里点一下 哪里点一下 代码就跑起来了 这种快乐的感觉的
  • Linux下node-sass安装失败的解决方法与简单使用

    记录一下安装node sass的过程 关于CSS是不是一门编程语言 这里不讨论 但是它没有变量 语句 函数 反正我觉得他不是编程语言 于是程序员们发明了CSS预处理器 css preprocessor 它是一种专门的编程语言 可以使用你会的
  • java经典算法题

    目录 1 Java多线程 写一下两个线程交替打印 0 100 的奇偶数 2 线程安全的单例模式 3 用两个栈实现队列 4 实现单链表反转操作 5 Java实现二分查找 6 冒泡排序 7 快速排序 快速排序的基本思想 8 Java单链表实现快
  • 类的设计方法

    1 类名首字母应该大写 字段 方法以及对象 句柄 的首字母应小写 对于所有标识符 其中包含的所有单词都应紧靠在一起 而且大写中间单词的首字母 例如 ThisIsAClassNamethisIsMethodOrFieldName若在定义中出现
  • vue中页面分页引导

    一 使用driver js做页面分页引导 default 先来看看默认引导的效果 可以根据自己的需求做页面样式上的修改 change 修改修改如下 移动端web端都可以用 接下来说一下具体的用法 1 npm 安装 npm install d
  • EsayExcel使用

    EsayExcel简单入门 1 maven依赖
  • 华为OD真题学习-查找单入口空闲区域 100

    回溯法 基本做法是搜索 通过x 1 x 1横向遍历 y 1 y 1纵向遍历 获取满足连通的坐标 原始参考链接 华为OD机试真题 python 查找单入口空闲区域 2022 Q4 100分 无痕de泪的博客 CSDN博客 查找单入口空闲区域
  • static变量可以被修改吗?

    静态变量并不是说其就不能改变值 不能改变值的量叫常量 其拥有的值是可变的 而且它会保持最新的值 说其静态 是因为它不会随着函数的调用和退出而发生变化 即上次调用函数的时候 如果我们给静态变量赋予某个值的话 下次函数调用时 这个值保持不变 静
  • Java Graphics2D绘制背景透明的图形过程

    package com jhy time import java awt AlphaComposite import java awt BasicStroke import java awt Color import java awt Gr
  • 关于COLA架构的讨论

    理解 分层 概念网上可以搜到很多 大体分为 adapter client app infra domain 这五层 图例这里有 就不贴了 adapter和app相当于spring里的controller service domain是领域模
  • 推荐引擎分为哪几类,个性化推荐引擎的介绍

    在信息时代的今天 大数据为用户获取方方面面的信息提高了效率 更可以智能的帮助用户从海量内容中快速找到想要阅读的信息 或者从海量商品中快速找到想要购买的商品 推荐引擎的发展让选择不明确的用户更加了解她们的需求和喜好 下面以内容产品和电商产品为
  • apk包加固后重新签名

    使用jarsigner对未签名的加固包进行签名 建议您使用之前对APP签名时使用的keystore对加固包进行签名 jarsigner digestalg SHA1 sigalg MD5withRSA verbose keystore yo
  • 动态代码块、静态代码块、静态方法、静态变量(属性 )、构造方法

    1 动态代码块 class Super int a 10 public void m1 System out println m1 动态代码块 System out println 动态代码块开始执行 System out println