Java中代码块的学习

原创 2018年04月16日 19:52:15
关于代码块的概述:
用{ }括起来的代码,统称为代码块;
根据其位置以及声明不同:分为以下:
局部代码块: 在main()里面,给变量限定它的生命周期
构造代码块:在一个类中的成员位置中,用{ }括起来,
作用:可以将多个构造方法中的相同的代码放到构造代码块中,对对象进行初始化。在每次执行构造方法之前,先执行构造代码块.
静态代码块:在一个类的成员位置,也是用{ }包起来,但是被static修饰

作用:一般情况 它的作用给类进行初始化

这里有一道面试题:

    构造代码块,构造方法,静态代码的优先级?

    我们通过代码来看一下执行顺序:    

//定义一个Code类
class Code{
	
	//静态代码块
	static{
		int x = 1000 ;
		System.out.println(x);
	}
	
	//构造代码块
	{
		int x = 100 ;
		System.out.println(x);
	}
	//构造方法
	public Code() {
		System.out.println("code");
	}
	
	//构造代码块
	{
		int y = 200 ;
		System.out.println(y);
	}
	
	//有参构造
	public Code(int a) {
		System.out.println("code");
	}
	
	//静态代码块
	static {
		int y = 2000 ;
		System.out.println(y);
	}
}
public class CodeDemo {
	
	public static void main(String[] args) {
		
		//创建Code类的对象
		Code code = new Code() ;
		System.out.println("--------------------");
		Code code2 = new Code() ;
		System.out.println("--------------------");
		Code code3 = new Code(100) ;
	}
}

打印出的结果为:

1000
2000
100
200
code
--------------------
100
200
code
--------------------
100
200
code

由执行结果可以看出:

静态代码块>构造代码块>构造方法
静态代码:只能执行一次

构造代码块在每次执行构造方法之前都会被执行.

    code对象:由于在静态代码块里定义的x和y的值分别为1000和2000,先执行静态代码块所以先打印x和y的值,下来执行构造代码块,在构造代码块里定义x和y的值分别为100和200,所以接下来打印构造代码块中的x和y值,最后执行构造方法,所以最后才打印无参构造中的code值。

    code2对象:由于静态代码只能执行一次,所以静态代码块不再执行,又因为构造代码块在每次执行构造方法之前都会被执行,所以继续打印构造代码块中的x和y值,执行无参构造,打印无参构造中的code。

    code3对象:同code2相同,不再执行静态代码块,但顺序执行构造代码块打印x和y值,执行有参构造中的操作,打印有参构造中的code。

学习了代码块的优先级,我们来试着做道题练习一下:

/**
 * 看程序,写结果
 * @author Administrator
 *
 */
//定义一个学生类
class Student{
	static {
		System.out.println("我是静态代码块....");
	}
	
	{
		System.out.println("我是构造代码块...");
	}
	
	public Student() {
		System.out.println("我是构造方法...");
	}
}
public class StudentDemo {
	static {
		System.out.println("今天天气不错...");
	}

	public static void main(String[] args) {
		System.out.println("我是main方法....");
		Student s1 = new Student() ;
		Student s2 = new Student() ;
	}
}

它的执行结果是什么呢?

---------------------------------我是华丽的分割线------------------------------------

执行结果:

今天天气不错...
我是main方法....
我是静态代码块....
我是构造代码块...
我是构造方法...
我是构造代码块...

我是构造方法...

可以看出,代码首先由包含main方法的类开始执行,又因为静态代码块优于方法执行,所以先打印“今天天气不错...”,接下来顺序执行main方法中的打印语句,打印"我是main方法....",接下来创建Student对象s1,进入Student对象,按照静态代码块>构造代码块>构造方法的顺序执行,依次打印"我是静态代码块....""我是构造代码块...""我是构造方法...",返回main方法,接着创建Student s2对象,由于静态代码块只执行一次,所以这次依次打印"我是构造代码块...""我是构造方法..."

Java四种代码块

在java中用{}括起来的称为代码块,代码块可分为以下四种: 1.普通代码块:    类中方法的方法体 2.构造代码块:    构造块会在创建对象时被调用,每次创建时都会被调用,优先于类构造函数执行。...
  • u012804721
  • u012804721
  • 2016-09-05 13:00:05
  • 1028

Java常见代码块的作用与区别

代码块中声明的变量的作用域只在这个 1. 局部代码块 作用在方法当中,作用是控制变量的生命周期: public void show(){ { System.out.p...
  • Dustin_CDS
  • Dustin_CDS
  • 2018-01-23 19:42:14
  • 139

Java的四种代码块

Java代码块  一.在Java中,使用”{}”括起来的代码称为代码块,代码块可以分为以下四种:  1.普通代码块:就是类中方法的方法体    public void xxx(){        ...
  • zhangzeyuaaa
  • zhangzeyuaaa
  • 2013-11-23 22:03:22
  • 4940

java中的几种代码块

今天找工作笔试碰见一道有意思的题目,问题很简单: public class A { public A() { System.out.println("调用了A的构造函数"); } {Sy...
  • wokuailewozihao
  • wokuailewozihao
  • 2017-03-12 00:15:58
  • 194

Java中局部代码块、构造代码块、静态代码块的区别?

package day08; /* * 代码块:在Java中,使用{}括起来的代码成为代码块 * 根据其位置和声明的不同,可以分为 * 局部代码块:局部位置,用于限定变量的生命周期 * ...
  • xiakexiaohu
  • xiakexiaohu
  • 2017-05-17 22:13:28
  • 2784

java语言基础(30)—— 代码块的划分及其作用

代码块:用{}包围的代码 java中的代码块按其位置划分为四种: 一 局部代码块      位置:局部位置(方法内部)      作用:限定变量的生命周期,尽早释放,节约内存      调用:调用其所...
  • wang740209668
  • wang740209668
  • 2016-03-31 21:33:14
  • 3479

java四种代码块

出自http://my.oschina.net/building/blog/99213
  • hirohrj123
  • hirohrj123
  • 2014-04-03 17:20:26
  • 1361

Java中四大代码块的执行顺序(附code)

Java中四大代码块的执行顺序(附code)
  • hejjunlin
  • hejjunlin
  • 2014-11-03 20:25:55
  • 2801

JAVA_内部类和代码块

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- JAVA内部类各种姿态和代码块 在JAVA中一般内部类分为四种:成员内部类、静态内部类、...
  • qq_20974155
  • qq_20974155
  • 2016-02-25 13:43:19
  • 536

java基础之静态代码块,局部代码块,构造代码块区别。

java中有几种常见的代码块,那怎样区别他们呢? 这里就这些问题,浅谈下我个人的理解。 1.局部代码块 局部代码块,又叫普通代码块。它是作用在方法中的代码块。例如: public void s...
  • jatpen
  • jatpen
  • 2017-08-02 14:36:52
  • 1033
收藏助手
不良信息举报
您举报文章:Java中代码块的学习
举报原因:
原因补充:

(最多只允许输入30个字)