• java面向对象值类属语句块


    在我们之前学习语句的时候,我们讲过一种比较特殊的语句块,那就是局部代码块。局部代码块的作用是什么呢,就是把临时使用的变量放在里面,之后执行完之后,局部代码块中定义的变量会直接被释放,这样就避免了那些我们只用一次的变量的释放。那么类当中有么有一种比较特殊的代码块么?肯定是有的,我们现在就来看下,在类方法外部定义的类的代码块都有什么作用?

    代码实例:

    class ClassScop
    {
    
    	int num;
    	String name;
    	/**
    	*类内部的代码块开始
    	*/
    	{	
    		System.out.println("Hello World!");
    	}
    
    	ClassScop(int num,String name)
    	{
    
    		this.num = num;
    		this.name = name;
    
    	}
    
    	static void sayLoud()
    	{
    
    		System.out.println("Say Loudly");
    
    	}
    
    
    }
    
    class ScopDemo
    {
    
    	public static void main(String[] args) {
    		//初始化对象
    		ClassScop cs1 = new ClassScop(10,"Hello cs1");
    		ClassScop cs2 = new ClassScop(9,"Hello cs2");
    		
    	}
    
    }
    

    这个地方,当我们new两个对象的时候,我们会发现此时类内部的代码块被调用了两次,那么调用这个类内部的代码块到底跟谁有关系呢?这个我们是不是还不清楚呢?到底是跟类有关系还是跟类的对象有关系,为了验证以上我们的推测哪个是正确的,这里我们来写个代码验证下:

    class ScopDemo
    {
    
    	public static void main(String[] args) {
    		//初始化对象
    		//ClassScop cs1 = new ClassScop(10,"Hello cs1");
    		//ClassScop cs2 = new ClassScop(9,"Hello cs2");
    		//因为静态变量是先于对象而存在的,如果这个跟对象有关系,此时结果就不会出现,反之则出现
    		ClassScop.sayLoud();
    		
    	}
    
    }
    

      当编译运行这段代码之后,我们没有得到 hello world,所以说这个过程跟对象的构造有关系,也就是说这里说的类内方法之外的代码块,称他为构造代码块,更贴切一些。

    那么我们再来思考一个问题,静态代码块--构造代码块--构造函数--局部代码块  这四个代码块产生的顺序是怎样的呢?

    下面我们用一个完整的示例来猜测下:

    class ClassScop
    {
    
    	int num;
    	String name;
    
    	{	
    		System.out.println("Hello Construct Scop!");
    	}
    
    	ClassScop(int num,String name)
    	{
    
    		this.num = num;
    		this.name = name;
    		System.out.println("Hello ClassScop");
    
    	}
    
    	static void sayLoud()
    	{
    
    		System.out.println("Hello Static");
    
    	}
    
    	void sayJuBu()
    	{
    
    		{
    			
    			System.out.println("Hello Jubu");
    
    		}
    		
    
    	}
    
    
    }
    
    class ScopDemo
    {
    
    	public static void main(String[] args) {
    
    		ClassScop.sayLoud();
    		ClassScop s1 = new ClassScop(10,"ddd");
    		
    	}
    
    }
    

      

    这个就是编译之后生成的结果,初始化顺序是:静态第一、构造代码块第二、构造函数第三、局部代码块第四(很多变,分在静态还有在动态方法中论述)。

    以上就是对构造代码块的讲述,构造代码块的用途,待续....

  • 相关阅读:
    在X++中使用IoC/DI模式应对不断变化的客户需求
    Predicate<T>与Func<T, bool>泛型委托
    Windows Live Writer插件:在WLW中插入语法高亮代码
    学习C#和.NET的资源
    C#中事件的动态调用
    2008年全国软件工程大会论文集
    C#基础:接口(二)
    【转载】"变化"、"复用"、"抽象"、"稳定" 影响着软件设计模式,架构,开发方法
    【领域驱动设计】.NET实践:实体、值对象和数据传输对象
    RSS订阅之基本使用
  • 原文地址:https://www.cnblogs.com/sunchuanzhen/p/3332039.html
Copyright © 2020-2023  润新知