java中静态代码块,非静态代码块的用法 static用法详解

PCL1.12.1+VTK9.1+Qt5.14.2实战:解决QVTKOpenGLNativeWidget点云渲染窗口初始化报错问题 本文针对PCL1.12.1、VTK9.1与Qt5.14.2集成开发中,QVTKOpenGLNativeWidget点云渲染窗口初始化时出现的报错与黑屏问题,提供了深度分析与两种实战解决方案。核心在于理解VTK版本升级导致的渲染窗口类型不匹配,并指导开发者通过显式创建vtkGenericOpenGLRenderWindow或利用窗口ID嵌入,正确初始化并绑定可视化组件,从而稳定实现点云渲染。 阅读详情

(一)java 静态代码块 静态方法区别
一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用
比如main方法就必须是静态的 这是程序入口
两者的区别就是:静态代码块是自动执行的;
静态方法是被调用的时候才执行的.

静态方法
(1)在Java里,可以定义一个不需要创建对象的方法,这种方法就是静态方法。要实现这样的效果,只需要在类中定义的方法前加上static关键字。例如:

public static int maximum(int n1,int n2)

使用类的静态方法时,注意:

a在静态方法里只能直接调用同类中其他的静态成员(包括变量和方法),而不能直接访问类中的非静态成员。这是因为,对于非静态的方法和变量,需要先创建类的实例对象后才可使用,而静态方法在使用前不用创建任何对象。

b 静态方法不能以任何方式引用this和super关键字,因为静态方法在使用前不用创建任何实例对象,当静态方法调用时,this所引用的对象根本没有产生。

(2)静态变量是属于整个类的变量而不是属于某个对象的。注意不能把任何方法体内的变量声明为静态,例如:
fun()
{
static int i=0;//非法。
}

(3)一个类可以使用不包含在任何方法体中的静态代码块,当类被载入时,静态代码块被执行,且只被执行一次,静态块常用来执行类属性的初始化。例如:
static
{
}

类装载步骤
在Java中,类装载器把一个类装入Java虚拟机中,要经过三个步骤来完成:装载、链接和初始化,其中链接又可以分成校验、准备和解析三步,除了解析外,其它步骤是严格按照顺序完成的,各个步骤的主要工作如下:

装载:查找和导入类或接口的二进制数据;
链接:执行下面的校验、准备和解析步骤,其中解析步骤是可以选择的;
校验:检查导入类或接口的二进制数据的正确性;
准备:给类的静态变量分配并初始化存储空间;
解析:将符号引用转成直接引用;
初始化:激活类的静态变量的初始化Java代码和静态Java代码块。
初始化类中属性是静态代码块的常用用途,但只能使用一次。

(二)静态代码块的初始化顺序

 class Parent{ 
static String name = "hello"; 
{ 
System.out.println("parent block"); 
} 
static { 
System.out.println("parent static block"); 
} 
public Parent(){ 
System.out.println("parent constructor"); 
} 
} 

class Child extends Parent{ 
static String childName = "hello"; 
{ 
System.out.println("child block"); 
} 
static { 
System.out.println("child static block"); 
} 
public Child(){ 
System.out.println("child constructor"); 
} 
} 

public class StaticIniBlockOrderTest { 

public static void main(String[] args) { 
new Child();//语句(*) 
} 
}
问题:当执行完语句(*)时,打印结果是什么顺序?为什么?
解答:当执行完语句(*)时,打印结果是这样一个顺序 :
 parent static block
child static block
parent block
parent constructor
child block
child constructor

总结:
对象的初始化顺序:首先执行父类静态的内容,父类静态的内容执行完毕后,接着去执行子类的静态的内容,当子类的静态内容执行完毕之后,再去看父类有没有非静态代码块,如果有就执行父类的非静态代码块,父类的非静态代码块执行完毕,接着执行父类的构造方法;父类的构造方法执行完毕之后,它接着去看子类有没有非静态代码块,如果有就执行子类的非静态代码块。子类的非静态代码块执行完毕再去执行子类的构造方法。总之一句话,静态代码块内容先执行,接着执行父类非静态代码块和构造方法,然后执行子类非静态代码块和构造方法。

注意:子类的构造方法,不管这个构造方法带不带参数,默认的它都会先去寻找父类的不带参数的构造方法。如果父类没有不带参数的构造方法,那么子类必须用supper关键子来调用父类带参数的构造方法,否则编译不能通过。

注:(一般如果类没有构造方法,用new创建对象时,系统会调用默认的无参构造方法;如果类中一定了一个或者多个构造方法,那么java不提供默认的构造方法)

【精品5万字图文详解】特征平台建设方案与最佳实践 关键词:特征工程、特征平台、特征存储、特征服务、机器学习、数据工程摘要:本文全面介绍了特征平台的建设方案与最佳实践,从特征工程的基本概念出发,深入剖析了特征平台的核心组件、架构设计和实现方法。文章通过生动的类比和实例,使读者能够轻松理解特征工程的重要性及特征平台如何解决企业在机器学习过程中面临的数据管理挑战。同时,详细探讨了主流开源特征平台的对比分析、系统设计要点、实际落地案例以及未来发展趋势,为企业构建高效特征平台提供了全面的指导和参考。想象一下,小明是一位热爱烹饪的小学生。有一天,他想做一道美味的菜肴送 阅读详情

相关推荐

深入理解「二进制掩码」:从原理到实践

二进制掩码本质上是一个二进制数,用于通过位操作(如与、或、非、异或等)选择性地操作目标数据的某些位。掩码的每一位(bit)可以看作一个“开关”,决定是否对目标数据的对应位进行操作。二进制掩码是位操作的灵魂,掌握它不仅能提升代码效率,还能解锁许多高级编程技巧。从基础的位提取到复杂的子集枚举,掩码的应用无处不在。希望本文的讲解和代码示例能帮助你快速上手,并在实际项目中灵活运用。如果你有更多关于掩码的疑问或应用场景,欢迎在评论区留言交流!

m0_73494933的博客 2432

java中静态代码块的用法 static用法详解

(一)java 静态代码块 静态方法区别一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用比如main方法就必须是静态的 这是程序入口两者的区别就是:静态代码块是自动执行的;静态方...

weixin_34310785的博客 900

STM32与HT7038的高精度电能计量系统设计与实现

本文详细介绍了基于STM32微控制器与HT7038三相电能计量芯片的高精度电能计量系统设计与实现。文章从项目选型出发,深入剖析了硬件电路设计、SPI驱动开发、芯片校准及系统集成等关键环节,为智能电表、能源监控等应用提供了高性价比且稳定的国产化解决方案。

pytorch8learner的博客 389

Java-静态代码块、非静态代码块、静态方法,非静态方法

执行顺序:静态代码块--非静态代码块--默认构造方法--普通方法 使用地方:非静态代码块可在普通方法中定义(不过作用不大)。静态代码块必须在类中进行 使用场景:静态代码块可用来初始化一些项目最常用的变量或对象 静态方法可用作不创建对象也可能需要执行的代码 执行情况:静态代码块在类被加载的时候自动运行(通俗点讲就是new后自动执行了静态代码块) ...

Jio的博客 1065

白盒测试逻辑覆盖之谓词覆盖、子句覆盖、三类有效字句覆盖等知识点

本篇笔记会简化书本上的概念,用容易理解的方式来说明,有些例子打字麻烦,我会直接放图片! 目录 基础知识: 谓词覆盖predicate coverage 子句覆盖 clause coverage 组合覆盖 combinatorial coverage 有效字句覆盖Active Clause Coverage 广义有效子句覆盖(General Active Clause Coverage) 相关性有效子句覆盖(Correlated Active Clause Coverage) 限制性有效

weixin_46019681的博客 2664

Mac用户看过来!M1/M2芯片安装CiteSpace完整指南(从Homebrew到成功运行)

本文为Mac M1/M2芯片用户提供CiteSpace安装的完整指南,从Homebrew安装适配的Java环境到最终成功运行CiteSpace。详细步骤包括环境检查、Java配置、CiteSpace下载与优化,解决常见问题如内存分配、图形渲染和中文显示乱码,确保科研人员能顺利使用这一文献可视化工具。

weixin_42530458的博客 308

关于Java中的静态块讲解

介绍Java中static静态块的特点与使用

记录分享编程与冲浪知识 1644

STC51单片机串口多字节数据接收的优化策略

本文深入探讨了STC51单片机串口多字节数据接收的优化策略。针对数据丢包、粘包等常见痛点,核心思路是采用“缓冲队列+定时器超时”模式,将实时处理转变为“先收纳,后处理”。文章详细讲解了硬件初始化、中断服务程序优化(快速入队与激活超时裁判)以及主循环的非阻塞设计,并进阶介绍了环形缓冲区实现与错误处理,旨在构建稳定可靠的串口通信系统。

weixin_29264201的博客 374

调用类的静态方法不会初始化对象,但是会把静态资源放到方法区

根据某类调用静态方法有初始化对象吗 调用类的静态方法时(首次引用某B类时,B类会被类加载子系统加载,B类经过加载->链接->初始化这些步骤), 意味着静态代码块已经被加载,而且只会被加载一次(无论创建了多少次对象)。类已经被加载,但是还没有使用构造器(new的时候才使用构造器)。 构造器默认调用父类的构造器,然后优先使用代码块。 在第一次new B对象时,其实可以这样说,在运行期,首次引用B类时,B类会被类加载子系统加载,经过加载->链接->初始化这些步骤把B类的信息加载进方法区,

qq_36040282的博客 2647

《open3D+pyqt》点云读取、显示与保存

《open3D+pyqt》第一章:点云读取与显示一、效果展示二、环境配置三、代码3.1 qt designer设置3.2 生成ui,qrc的py文件3.3 py文件代码 一、效果展示 二、环境配置 环境配置:Anconda+pycharm+pyqt+open3d+pyqtgraph 显示界面:这里选择pyqtgraph 参考网上教程 三、代码 3.1 qt designer设置 界面布局参照《PCL+QT》教程,界面设置:布局如下: 布局参数参考: 3.2 生成ui,qrc的py文件 3.3 py

阁楼 7113

基于FPGA的以太网设计(1)----大白话解释什么是以太网

基于FPGA的千兆以太网设计(1)----大白话解释什么是以太网

孤独的单刀 3872

静态代码块和静态方法区别

一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候就已经加载了,可以用类名直接调用。比如main方法就必须是静态的 这是程序入口 两者的区别就是:静态代码块是自动执行的; 静态方法是被调用的时候才执行的. 静...

我的Java生活 289

【ArcGIS Pro微课1000例】0067:ArcGIS Pro3.4.2学习版下载及安装教程

【ArcGIS Pro微课1000例】0067:ArcGIS Pro3.4.2学习版网盘下载及安装教程

智慧空间实验室 2388

Static静态代码块以及各代码块之间的执行顺序

前言 在Java中,Static静态代码块、构造代码块、普通代码块、构造函数的执行顺序是一个java学习者必须掌握的基础,本篇博客旨在让大家能清除了解它们之间的执行顺序。 文章目录代码块的分类1、静态代码块(也叫静态块、静态初始化块)2、构造代码块(也叫构造初始化块)3、代码块(又叫普通代码块、初始化块)执行顺序的代码测试继承中各代码块的执行顺序 代码块的分类 基本上代码块分为三种:Static静...

宜春 2万+

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

java之静态、非静态代码块详解

1、基本原理 同C语言一样,java中也是将花括号{...},包括起来的代码称为一个代码块。java中我们通常将static修饰的代码块,称为静态代码块,随类存在,仅在类初始化时执行一次,那么类在什么时候初始化,主要有以下六种:   1)创建类的实例,也就是new一个对象   2)访问某个类或接口的静态变量,或者对该静态变量赋值   3)调用类的...

2295

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Java中static的用法

        在Java中,有一个使用频率非常高的关键字——static,那么大家知道它的用法吗?下面我们一起来了解一下它吧。 1、static的用法:         static可以用来修饰成员变量、成员方法以及代码块等,被static关键字修饰的成员都会具备一些特殊属性。 2、static修饰成员变量:         被static修饰的成员变量叫做静态变量。静态变量具有以下两个...

LIAO_7053的博客 2万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

java中静态代码块、静态方法、static关键字详解

最近在准备面试,复习java基础知识,对java中和static关键字相关的静态方法、静态代码块、非静态代码块、静态成员变量的用法进行了详细的总结。 1. 静态成员变量 声明为static关键词修饰的变量叫做静态成员变量,也叫作全局变量。在被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名

jcncsdn的博客 1万+

java静态方法、非静态代码块{}、静态代码块static{}

一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在类加载的时候 就已经加载 可以用类名直接调用 比如ma

唐伯虎的专栏 1万+

java中static代码块_java中静态代码块详解

今天在项目中看到这行代码,静态代码块,很久没用静态代码块了,今天来复习一下,依旧按照为什么?是什么?怎么用?的思想,去学习。【为什么?】先说说代码中为什么要使用这种写法吧,还记得静态代码块的特点吗?随着类的加载而执行,而且只执行一次对,没错,就是这个,上面的代码就是因为这个特点而这样写的,可以使得静态代码块中的代码只执行一次,不需要每次调用这个变量都给它赋值。【是什么?】静态代码块:执行优先级高于...

weixin_34357232的博客 3477

Static关键字详解(静态成员变量,静态方法,代码块,静态代码块,单例模式)

静态成员(包括静态变量和方法)属于类级别的成员,它们不是任何对象的实例的一部分,而是与类本身相关联。如果有一些逻辑需要在创建类的实例时执行,而这些逻辑又不适合放在构造器中,可以使用匿名代码块来完成。如果有一些逻辑需要在类加载时执行,而不是在创建实例时执行,可以使用静态代码块。匿名代码块通常用于初始化类的实例成员变量,它会在每次创建类的实例对象时执行。静态代码块通常用于初始化类的静态成员变量,它会在类加载时执行,且只执行一次。匿名代码块中定义的变量只在代码块内部有效,不会影响到类中的其他成员变量。

gn78666的博客 1113

【Java】关于 Java 静态代码块(static block)——原理与用法

本文介绍了Java中的静态代码块,包括其语法、执行时机、使用场景及注意事项。静态代码块在类加载时执行,只执行一次,常用于初始化静态资源。文章对比了静态代码块与构造代码块的区别,分析了多个静态代码块的执行顺序,并探讨了父类与子类中静态代码块的执行优先级。此外,还总结了静态代码块的典型应用场景和常见陷阱,如不能访问实例变量、必须处理异常等。最后从JVM角度解析了静态代码块的底层原理,并整理了面试常见问题。静态代码块是Java类初始化的重要机制,合理使用能有效管理类级别的初始化逻辑。

经天纬地,格物致理 1349

java关键字static用法详解

static:表明具有静态属性(源自百度百科的解释)。

2401_88153531的博客 1199

Java封装三:static-静态属性;static-静态方法;static-静态代码块;代码块中的变量应用;总结;

1.static-静态属性 (1)static代表“全局”或“静态”,可以理解为:方便在没有创建对象的情况下来进行某些操作。通常用于修饰成员变量和方法,也可以形成静态代码块。 实际应用中,可将需频繁操作、通用型信息设置、公共组件封装等操作设置为“静态” static修饰的类成员属性,是该类所有对象共享的区域; (2)类加载时产生,类彻底销毁时,才进行资源释放;其生命周期长,即资源占用周期长,要慎用。 (3)如下的一个示例: 2.static-静态方法 static修饰方...

小枯林的博客 2125

Java中初始化对象的顺序,静态代码块的用法以及Static的用法详解

转自:http://blog.youkuaiyun.com/dq3wrr/article/details/39449591 (一)java 静态代码块 静态方法区别 一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码是被动执行的. 静态方法在

梁江江 1505

java 静态代码块_Java中的static静态代码块的使用详解

一.与静态方法的比较一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,静态方法在类加载的时候 就已经加载 可以用类名直接调用 比如main方法就必须是静态的 这是程序入口。两者的区别就是:静态代码块是自动执行的; 静态方法是被调用的时候才执行的。二.静态方法...

weixin_42106357的博客 2162
上一篇: java中& 和 && 的区别
下一篇: java 自动拆装箱
lnluo_21
博客等级 码龄16年 0粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值