JAVA 语言 面向对象之代码块

代码块的定义:  使用{}定义的一段代码

代码块可分为四种:1.普通代码块

                              2.构造快

                              3.静态块

                              4.同步代码块

1.普通代码块:

举例代码如下:

public class Test {
    public static  void  main(String[] args){
        {
            int x = 50;
            System.out.println("x = " + (x+=10));
        }//直接用{}定义,表示普通代码块
        int x = 100;
            System.out.println("x = "+ (x+=10));
    }
}

2.构造块:

举例代码如下 :

class Person{
    {
        System.out.println("Person 类的构造块");
    }
    public Person(){
        System.out.println("Person 类的构造方法");
    }
}
public class Test {
    public static  void  main(String[] args){
       new Person();
       new Person();
    }
}

对应结果如下:

 

从上图可知,构造块比构造方法先执行 ,产生新对象就会调用一次构造块.

3.静态代码块

特点:使用static定义

静态块的分类:1.在非主类中

                       2.在主类中

(1)定义在非主类的静态块

举例代码如下:

class Person{
    {
        System.out.println("Person 类的构造块");
    }
    public Person(){
        System.out.println("Person 类的构造方法");
    }
    static {
        System.out.println("Person 类的静态块");//定义在非主类的静态块
    }
}
public class Test {
    public static  void  main(String[] args){
        System.out.println("-----start-----");
        new Person();
        new Person();
        System.out.println("-----end-----");
    }
}

对应结果如下:

 

由上图可知:静态块优先于构造块执行,且只执行一次.

(2)主类中的静态块:

举例代码如下:

public class Test {
    {
        System.out.println("Person 类的构造块");
    }
    public Test(){
        System.out.println("Person 类的构造方法");
    }
    static {
        System.out.println("Person 类的静态块");//定义在主类的静态块
    }
    public static  void  main(String[] args){
        System.out.println("-----start-----");
        new Test();
        new Test();
        System.out.println("-----end-----");
    }
}

对应结果如下:

 

由上图可知:在主类中的静态块,优先于主方法(main())执行的.

对一道例题进行举例:

代码如下:

class HelloA{
	public HelloA(){
		System.out.println("Hello A!父类构造方法");
	}
	{
		System.out.println("I am A class.父类非静态代码块");
	}
	static{
		System.out.println("I am A class.父类静态代码块");
	}
}

public class HelloB extends HelloA{
	public HelloB(){
		System.out.println("Hello B!子类构造方法");
	}
	{
		System.out.println("I am B class.非静态代码块");
	}
	static{
		System.out.println("I am B class 静态代码块");
	}
	
public static void main(String[] args){
	System.out.println("----start----");
	new HelloB();
	new HelloB();
	System.out.println("----end----");
    }
}

对应结果如下:

 

由上图可知,符合我们上面讲到的所有要求. 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值