java代码块的定义_Java几种代码块的定义与常见问题

Java几种代码块的定义与常见问题

代码块,通俗的说就是用一对“{}”括起来的一段代码,代码块可以根据位置分为以下几类:

局部代码块:局部代码块就是指直接在方法或是语句中定义的代码块,请看如下范例:

package org.qty.demo1;

public class Demo1 {

public static void main(String[] args) {

{

int i= 10;

System.out.println(i+",我是局部代码块");

}

int i = 20;

System.out.println(i);

}

}

结果打印:

10,我是局部代码块

20

以上就是利用了局部代码块对主方法进行了“分隔”,局部代码块起到了限定的作用,即使变量重名,在这里变量i的作用域只限定于局部代码块之内,而不会影响代码块以外,所以局部代码块主要作用是分隔。

构造代码块:构造代码块就是指定义在成员位置的代码块,或者说就是直接写在类中的代码块。

观察如下范例:

class A{

String name; //成员属性

{

System.out.println("我是构造代码块"); //与构造方法同级

}

public A(){ //构造方法

System.out.println("我是A类的构造方法");

}

}

public class Demo {

public static void main(String[] args) {

A a1 = new A();

A a2 = new A();

}

}

结果打印:

我是构造代码块

我是A类的构造方法

我是构造代码块

我是A类的构造方法

在类中可以看到代码块是定义在成员位置的,与构造方法、成员属性同级,这就是构造块,也就是直接定义在类中的代码块。

从结果很容易可以看出以下两点:

在实例化A类对象a1、a2时,构造块的执行顺序是大于构造方法的(这里和构造块写前写后没关系,将构造块写在构造方法后面也是一样的结果)

每当实例化一次A类对象时,都会在执行构造方法之前优先执行构造代码块。

静态代码块:静态代码块就是指用static关键字修饰的代码块。

观察如下范例:

class A{

String name; //成员属性

{

System.out.println("我是构造代码块");

}

static {

System.out.println("我是静态代码块");

}

public A(){ //构造方法

System.out.println("我是A类的构造方法");

}

}

public class Demo {

public static void main(String[] args) {

A a = new A();

A b = new A();

A c = new A();

}

}

输出打印:

我是静态代码块

我是构造代码块

我是A类的构造方法

我是构造代码块

我是A类的构造方法

我是构造代码块

我是A类的构造方法

从结果能看出,执行顺序:静态代码块>构造代码块>构造方法,这从static关键字的含义也能得知,因为static修饰过后的量会随着class文件一同加载,属于优先级最高的。

说到执行顺序再来看一个范例:

class A {

public A() {

System.out.println("class A");

}

{

System.out.println("I'm A class");

}

static {

System.out.println("class A static");

}

}

class B extends A {

public B() {

System.out.println("class B");

}

{

System.out.println("I'm B class");

}

static {

System.out.println("class B static");

}

}

public class Demo {

public static void main(String[] args) {

B b = new B();

}

}

结果打印:

class A static

class B static

I’m A class

class A

I’m B class

class B

当实例化子类对象时,首先要加载父类的class文件进内存,静态代码块由于有static修饰,所以是随着类的创建而执行,所以父类静态代码块最先被执行,子类class文件再被加载,同理静态代码块被先执行;实例化子类对象要先调用父类的构造方法,而调用父类构造方法前会先执行父类的构造代码块,因此就有如下顺序:

父类静态代码块——>子类静态代码块——>父类构造块——>父类构造方法——>子类构造块——>子类构造方法

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

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

相关文章

gradle各版本下载地址

gradle各版本下载地址 原创 2016年08月16日 11:17:25标签:gradle更新 /android studio59713gradle各版本下载地址:http://services.gradle.org/distributions 以前都是手动下载gradle的文件,然后修改的,今天想从一些博客网站上下载…

SUSE中LVM的使用心得

一、服务器分区规划(按100个商务群规划,可扩展) myvg卷组容量--700G(硬盘空间的80%左右) /boot 100M 用于系统启用需要的空间 / 20G 用于放置一些系统用户文件 /usr 150G    用于tomcat:发布程序…

thinkphp 5数据库操作

1、原生sql $optionsDb::table(__MALL_POST__) ->alias(m) ->join(__MALL_CATEGORY_VALUE__ v,m.id v.itemid) ->join(__MALL_CATEGORY_OPTION__ o,v.oid o.oid) ->where(m.id,$articleId) ->select(); 参见 :https://www.kancloud.cn/manual/thin…

使用CRT调试内存分配堆来找出未释放的内存空间

忘记释放已经分配的内存是一种常见的编程错误,当然我指的是在C编程当中,例如下面的代码里面就存在一个忘记释放内存的编程错误。我个人觉得忘记释放内存的编程错误是不可避免的,毕竟程序员都是人,困了,心情不好了&…

java bean工厂_从零构建轻量级Java Web框架

Bean工厂回顾下前面的知识,通过加载配置文件获取应用基础包名,加载基础包名下所有的类,获取Controller,Service类。到目前为止,我们只是加载了类,但是无法通过获取的类来实例化对象。因此需要一个反射工具,…

生活

爱上旁白,爱上娓娓道来,爱上有故事的声音。无需任何背景音乐,只想细细体验独有的味道转载于:https://www.cnblogs.com/Fsiswo/p/8167756.html

int指令01 - 零基础入门学习汇编语言64

第十三章:int指令01 让编程改变世界 Change the world by program 引言 在第12章中,我们讲解了中断过程和两种内中断的处理。 这一章中,我们讲解另一种重要的内中断,由int指令引发的中断。 万众瞩目,是什么呢&am…

JAVA中常用的逻辑运算符_Java中的常见运算符以及使用

Java中的运算符有算术运算符、关系运算符、逻辑运算符、赋值运算符、字符串连接运算符、三目运算符等。下面介绍一下这几种。1、算术运算符包括&#xff1a;加()、减(-)、乘(*)、除(/)、取余(%)、自加()、自减(--)。<1>使用乘法时&#xff0c;需注意乘积结果是否会出现溢…

【2016计概A期末】照亮房间

你需要放置一盏灯来照亮房间的每个角落&#xff0c;问这是否能办到&#xff1f; 输入包含多组数据。 每组数据第一行是正整数n(4<n<100)&#xff0c;表示房间轮廓所形成的多边形的顶点个数。 接下来n行&#xff0c;每行表示房间的一个顶点。 顶点按顺时针的顺序给出&…

Ext智能提示 - Spket(Eclipse插件)

Eclipse的Ext 2.0.2智能提示.它提供了非常准确的Ext API提示 最近在搞java的项目&#xff0c;哇哇&#xff0c;js如果没有插件的话&#xff0c;那写的真的叫痛苦&#xff0c;所以上网搜搜了&#xff0c;找到了一个插件&#xff0c;还不错&#xff0c;蛮好用的 首先下一个插…

JAVA fileupload怎么用_jquery.fileupload使用例子java

jsp页面信息如下&#xff0c;整个页面信息pageEncoding"utf-8" import"java.io.*"%>String path request.getContextPath();String basePath request.getScheme() "://" request.getServerName() ":" request.getServerPort()…

清高是有代价的

朋友C哥&#xff0c;才高八斗。虽然是记者出身&#xff0c;做过报社社长&#xff0c;但是老刘认为C哥之才&#xff0c;最重要的并非文章学问&#xff0c;而是做事之才、经营之才、管理之才。由报社社长至投资公司总裁&#xff0c;并完成某公司香港上市&#xff0c;被人誉为干了…

Java中常用的测试工具JUnit

使用步骤 1.新建一个test源文件夹&#xff08;SourceFolder&#xff09;&#xff0c;避免和业务代码的src混在一起 2.在test下新建JUnit Test Case 3.相关测试代码放到一个Test Case,每个小的测试代码搞一个测试的方法&#xff0c;方法上标记Test BeforeClass 标注BeforeClass的…

python pyqt eric_科学网—PyQt及Eric的安装 - 张鲁新的博文

PyQt及Eric的安装已有 10440 次阅读2010-4-16 13:19|个人分类:生活点滴|系统分类:科研笔记|Python, Eric, PyQtPython是功能很强大的脚本语言。Qt是跨平台的界面开发语言。二者的结合就是PyQt&#xff0c;而Eric则是由Python开发的一款支持PyQt的IDE。 Python目前有两个较大的版…

sharepoint对象模型性能比较

sharepoint的对象模型的属性和方法有多种&#xff0c;可能对于一些初学者不明白他们之间有什么区别&#xff0c;那种更优越&#xff0c;在何种情况下用那种属性或方法&#xff0c;通过这篇文章你会有所了解 1&#xff0c;splist 有些人喜欢通过列表的名字去获得列表&#xff0c…

package.json---入门说明

直接的说&#xff1a;就是管理你本地安装的npm包 一个package.json文件可以做如下事情&#xff1a; 展示项目所依赖的npm包 允许你指定一个包的版本[范围] 让你建立起稳定&#xff0c;意味着你可以更好的与其他开发者共享 创建package.json 在你要创建的目录下执行&#xff1a;…

java多线程实战指南_学习笔记《Java多线程编程实战指南》二

2.1线程属性属性属性类型及用途只读属性注意事项编号(id)long型,标识不同线程是不适合用作唯一标识名称(name)String型&#xff0c;区分不同线程否设置名称有助于代码调试和问题定位线程类别(daemon)boolean型&#xff0c;true为守护线程&#xff0c;false为用户线程否在start方…

putty, puttycm区别

2019独角兽企业重金招聘Python工程师标准>>> 在windows上实现telnet, ssh等工具有几个方案可以选择, 本文总结了putty putty cm的方案, 并且简短地和 cygwin console2方案做了一下比较. 由于putty的安装 配置比较简单, 本文主要讨论了Putty cm的配置和中文的支持.…

思科网络基础之访问控制列表

loading....转载于:https://www.cnblogs.com/changha0/p/8185866.html

java编写日期_Java常用日期操作

//日期转字符串,根据需要调整格式Testpublic voidDateToString(){Date currentTime newDate();SimpleDateFormat formatter new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String dateStringformatter.format(currentTime);System.out.println(dateString);}字符串转…