博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
小谈Java中的静态块与非静态块
阅读量:5923 次
发布时间:2019-06-19

本文共 1344 字,大约阅读时间需要 4 分钟。

原文地址:

java中经常有一些静态块,这是用来在生成类之前进行的初始化,无论java还C++语言中的static,都是最先初始化好的。结构如下:

static {

静态语句代码块

}

{

非静态语句代码块

}

异同点

相同点:都是在JVM加载类时且在构造方法执行之前执行,在类中都可以定义多个,一般在代码块中对一些static变量进行赋    值。

不同点:静态代码块在非静态代码块之前执行(静态代码块--》非静态代码块--》构造方法)。

    静态代码块只在第一次new执行一次,之后不在执行,而非静态代码块在每new一次就执行一次。非静态代码块可以    在普通方法中定义(个人感觉作用不大);而静态代码块不行。

package com.sample.client;public class Test {	public int a;		static {		System.out.println("Test Static 静态语句块");	}	public Test() {		System.out.println("Test 默认无参构造器");	}	{		System.out.println("Test 非静态");	}}

package com.sample.client;public class Test1 extends Test {	public int i;	public double d;		static {		System.out.println("Test1 Static 静态语句块");	}		public Test1 () {		System.out.println("Test1 默认无参构造器");	}		{		System.out.println("Test1 非静态");	}		public static void main(String[] args) {		Test1 t = new Test1();			}}

 
输出结果如下:Test Static 静态语句块Test1 Static 静态语句块Test 非静态Test 默认无参构造器Test1 非静态Test1 默认无参构造器

小结:

1、静态代码块是在类加载时自动执行的,非静态代码块在创建对象自动执行的代码,不创建对象不执行该类的非静态代码块。 顺序: 静态代码块--》非静态代码块--》类构造方法。

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

3、如果某些代码必须要在项目启动时候就执行的时候,我们可以采用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,此时代码是被动执行的。

区别:静态代码块是自动执行的;

 静态方法是被调用的时候才执行的;

作用:静态代码块可以用来初始化一些项目最常用的变量和对象;静态方法可以用作不创建对象也可以能需要执行的代码。

转载于:https://www.cnblogs.com/JSD1207ZX/p/9386239.html

你可能感兴趣的文章
oracle修改MAX_STRING_SIZE,突然断电处理
查看>>
java hibernate关联查询返回一个集合,转换成json报json死循环处理
查看>>
C# 删除Collections中的重复数据
查看>>
NFS 网络系统配置及自动挂载
查看>>
corosync(openais)+drbd+pacemaker实现mysql服务器的高可用性群集
查看>>
centos 6.2 硬盘安装(双系统)
查看>>
RHEL6.2 64位系统Virtualbox虚拟机下安装过程
查看>>
Linux中文件查找——find命令
查看>>
How to Install Apache Kafka on CentOS 7
查看>>
Exchange 2016 将邮箱数据库排除
查看>>
正式学习React(四) 前序篇
查看>>
yum安装mysql
查看>>
如何在fedora 16下配置×××连接
查看>>
linux下cache和buffer的使用情况
查看>>
多余的拼音导致Python的数据类型错误
查看>>
前端开发知识之前端移动端适配总结
查看>>
Matrix
查看>>
Apache Spark源码走读之18 -- 使用Intellij idea调试Spark源码
查看>>
VMware 中如何打开U盘弹出U盘或者移动硬盘的(两种方法)
查看>>
南阳38--布线问题
查看>>