[align=center][b]Java的4种代码块[/b][/align]
[color=red]一、普通代码块[/color]
直接在一个方法中出现的{}就称为普通代码块,也叫局部代码块,出现在局部位置,作用主要是限定变量的生命周期。例子程序如下:
public class CodeDemo01{
public static void main(String[] args){
//普通代码块
{
int x = 10;
System.out.println("x=" + x);
}
int x = 100;
System.out.println("x=" + x);
}
}
[color=red]二、构造代码块[/color]
直接在类中成员位置定义的没有加static关键字的代码块{}称为构造代码块,每次调用构造方法执行前都会执行构造代码块。作用:可以把多个构造方法中共同代码放到一起,对对象进行初始化。例子程序如下:
public class CodeDemo02{
public CodeDemo02(){
System.out.println("========这是构造方法=========");
}
//这是构造代码块,而且在new对象时,构造代码块优先构造方法执行
{
System.out.println("=========这是构造块!=========");
}
public static void main(String[] args){
new CodeDemo02();
new CodeDemo02();
}
}
[color=red]三、静态代码块[/color]
使用static关键字声明的代码块称为静态代码块,静态块的主要目的是用来为静态属性初始化,静态代码块只执行一次。例子程序如下:
public class CodeDemo03{
static{
System.out.println("这是主类中的静态代码块!");
}
public static void main(String[] args){
new Demo();
new Demo();
new Demo();
}
}
class Demo{
static{
System.out.println("这是Demo类中的静态代码块!");
}
{
System.out.println("这是Demo类中的构造块!");
}
public Demo(){
System.out.println("这是构造方法!");
}
}
静态块优先于主方法的执行,静态块优先于构造方法的执行,而且只执行一次!
以上三种代码:
面试题:静态代码块,构造代码块,构造方法的执行顺序?
静态代码块---构造代码块---构造方法
静态代码块:只执行一次。
构造代码块:每次调用构造方法执行前都会执行。
[color=darkred]补充:看以下代码写执行结果[/color]
class Fu{
static{
System.out.println("静态代码块Fu");
}
{
System.out.println("构造代码块Fu");
}
public Fu(){
System.out.println("构造方法Fu");
}
}
class Zi extends Fu{
static{
System.out.println("静态代码块Zi");
}
{
System.out.println("构造代码块Zi");
}
public Zi(){
System.out.println("构造方法Zi");
}
}
public class ExtendsTest {
public static void main(String[] args) {
Zi zi = new Zi();
}
}
[color=red]执行结果:
静态代码块Fu
静态代码块Zi
构造代码块Fu
构造方法Fu
构造代码块Zi
构造方法Zi
分析:执行main方法时,发现Zi类,类加载器去加载Zi类,发现继承Fu类,先加载Fu类静态代码块(静态随着类加载,然后加载子类静态代码块)。
new Zi();先执行Fu类初始化(成员默认初始化,显示初始化,构造方法初始化)构造代码块和构造方法,然后执行子类构造代码块和构造方法。[/color]
[color=red]四、同步代码块[/color]
同步代码块主要出现在多线程中。
[color=red]未完待续(代码块在继承中的执行顺序)..........[/color]
[color=red]一、普通代码块[/color]
直接在一个方法中出现的{}就称为普通代码块,也叫局部代码块,出现在局部位置,作用主要是限定变量的生命周期。例子程序如下:
public class CodeDemo01{
public static void main(String[] args){
//普通代码块
{
int x = 10;
System.out.println("x=" + x);
}
int x = 100;
System.out.println("x=" + x);
}
}
[color=red]二、构造代码块[/color]
直接在类中成员位置定义的没有加static关键字的代码块{}称为构造代码块,每次调用构造方法执行前都会执行构造代码块。作用:可以把多个构造方法中共同代码放到一起,对对象进行初始化。例子程序如下:
public class CodeDemo02{
public CodeDemo02(){
System.out.println("========这是构造方法=========");
}
//这是构造代码块,而且在new对象时,构造代码块优先构造方法执行
{
System.out.println("=========这是构造块!=========");
}
public static void main(String[] args){
new CodeDemo02();
new CodeDemo02();
}
}
[color=red]三、静态代码块[/color]
使用static关键字声明的代码块称为静态代码块,静态块的主要目的是用来为静态属性初始化,静态代码块只执行一次。例子程序如下:
public class CodeDemo03{
static{
System.out.println("这是主类中的静态代码块!");
}
public static void main(String[] args){
new Demo();
new Demo();
new Demo();
}
}
class Demo{
static{
System.out.println("这是Demo类中的静态代码块!");
}
{
System.out.println("这是Demo类中的构造块!");
}
public Demo(){
System.out.println("这是构造方法!");
}
}
静态块优先于主方法的执行,静态块优先于构造方法的执行,而且只执行一次!
以上三种代码:
面试题:静态代码块,构造代码块,构造方法的执行顺序?
静态代码块---构造代码块---构造方法
静态代码块:只执行一次。
构造代码块:每次调用构造方法执行前都会执行。
[color=darkred]补充:看以下代码写执行结果[/color]
class Fu{
static{
System.out.println("静态代码块Fu");
}
{
System.out.println("构造代码块Fu");
}
public Fu(){
System.out.println("构造方法Fu");
}
}
class Zi extends Fu{
static{
System.out.println("静态代码块Zi");
}
{
System.out.println("构造代码块Zi");
}
public Zi(){
System.out.println("构造方法Zi");
}
}
public class ExtendsTest {
public static void main(String[] args) {
Zi zi = new Zi();
}
}
[color=red]执行结果:
静态代码块Fu
静态代码块Zi
构造代码块Fu
构造方法Fu
构造代码块Zi
构造方法Zi
分析:执行main方法时,发现Zi类,类加载器去加载Zi类,发现继承Fu类,先加载Fu类静态代码块(静态随着类加载,然后加载子类静态代码块)。
new Zi();先执行Fu类初始化(成员默认初始化,显示初始化,构造方法初始化)构造代码块和构造方法,然后执行子类构造代码块和构造方法。[/color]
[color=red]四、同步代码块[/color]
同步代码块主要出现在多线程中。
[color=red]未完待续(代码块在继承中的执行顺序)..........[/color]