`
schy_hqh
  • 浏览: 556094 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

(基础)java的构造代码块与静态代码块,局部代码块

 
阅读更多

构造代码块、静态代码块、局部代码块

 

构造代码块

作用:可以为所有对象进行同样的初始化(初始化可以代表执行一个方法)

每次调用构造函数,都会执行一次

构造代码块的调用时机:

子类先super()调用父类构造函数,

再对成员变量进行显示初始化,

然后才调用构造代码块,

最后通过构造函数的入参进行初始化!

 

构造代码块与构造函数功能上的区别:

构造代码块(通用代码块,负责统一方法的调用)

--->  具有初始化对象的通用性,可以为所有对象进行相同的操作;

 

构造函数(特性代码块,专门对特有数据进行初始化,不负责方法的调用)

--->  具有初始化对象的针对性,针对每个对象做特定的初始化;

 

 这样做的好处:职责分明,结构清晰!

 

使用构造代码块完成对象初始化的统一操作

 

注意:成员变量的初始化过程

 

public class ConstructCode {
	
	private String name;
	private String sex = "男";//显示初始化
	
	//构造代码块
	{
		//每次创建对象都会先调用这个方法
		notice();
	}
	
	//构造函数:负责对特性的数据进行初始化
	public ConstructCode(String name) {
		//默认初始化,name=null,sex=null
		//--->super();
		//--->显示初始化,sex="男",name=null
		//--->构造代码块
		this.name = name;//最后对name进行初始化
	}
	
	public void notice() {
		System.out.println("通知:马上进来一个新同学!");
		System.out.println("性别:"+sex+",姓名:"+name);
	}
	
	public void welcome() {
		System.out.println("welcome:"+this.name);
	}
	
	public static void main(String[] args) {
		ConstructCode c = new ConstructCode("xiaoqiang");
		c.welcome();
	}
	
}

 结果:

通知:马上进来一个新同学!
性别:男,姓名:null
welcome:xiaoqiang

 

 

 

==========================================================

 

 

静态代码块

作用:为类进行初始化

随着类的加载而执行,只执行一次(类只加载一次)

 

一般,当一个类中的方法都是静态的,则有可能使用静态代码块完成初始化;

如果类中有非静态方法,一般都通过构造函数进行初始化;

 

如,ClassA中存在的都是静态方法,方法M()用来返回数据库的基础数据

则,可以在静态代码块中执行数据库的访问操作,随着类的加载,这段代码就自动执行了,很妙!

 

使用静态代码块进行初始化

import java.util.List;
import java.util.Map;

public class StaticCode {
	public static List<Map> baseData;

	static 
	{
		//查询数据库
		Configuration cfg = new Configuration().configure();

		SessionFactory sfactory = cfg.buildSessionFactory();

		Session session = sfactory.openSession();

		String hql = "select new map(n.name as name,n.age as age,n.birthday as birthday) from ContactPerson n where id > :lid and id < :mid";

		baseData = session.createQuery(hql).setParameter("lid", 10)
				.setParameter("mid", 20).list();

	}

	public static Map getBaseData() {
		return baseData;
	}
}

 

==========================================================

 

构造代码块与静态代码块的执行时机 

代码块与构造函数谁先执行,代码块能执行多少次?

只有创建对象,构造代码块才会执行,因为构造代码块是在构造函数调用的,每次创建对象都会执行1遍!

 

public class Child {
	
	int num = 10;
	
	{
		//先super(),再显示初始化,再调用构造代码块
		System.out.println("构造代码块:num="+num);
		num = 20;
	}
	
	public Child() {
		//此时num的值为默认初始值0
		super();
		//--->进行显示初始化,此时num的值变为10
		//--->执行构造代码块,num被改为了20
		System.out.println("Child constructor run, num="+num);
	}
	
	public void method() {
		System.out.println("Child.method()");
	}
}

 结果:

构造代码块:num=10
Child constructor run, num=20

 

 

 静态代码块与主函数谁先执行,静态代码块能执行多少次?

类一旦被加载,其中的静态代码块就会执行,而且只执行1次,因为类就加载1次!

基于这个特定,才应用到对类做一些初始化操作。

public class Test{
	
	{
		System.out.println("构造代码块与对象有关系,创建对象才会执行");
	}
	
	public static void main(String[] args) {
		//静态代码块随着类的加载就会被执行--->先执行静态代码块
		//main()被JVM调用才得到执行--->类加载完成后,才可能被JVM调用类中main()方法,所以main()后执行
		System.out.println("main running...");
	}
	
	/*  ---------------------------------------------
	   |运行结果:
	   |静态代码块与类有关系,随着类的加载而执行,而且只执行一次,only once!
	   |main running...
	    ---------------------------------------------
	*/
	
	static
	{
		System.out.println("静态代码块与类有关系,随着类的加载而执行,而且只执行一次,only once!");
	}
}

 

 ==========================================================

 

局部代码块 

方法内部定义的代码块,称为局部代码块,其中定义的变量的生命周期最短。

作用:

方法中,某段代码之后,都不再使用某个变量(这个变量有可能是一个很大的Map集合,很占内存),则可以将其定义到局部代码块中,及时结束其生命周期,释放空间!

public class particalCodeTest {
	
	public static void say() {
		
		{
			int count = 10;
			for(int i=0;i<count;i++) {
				System.out.println(i);
			}
		}
		
		//代码块结束,count变量所占空间将被立即释放!
		
		System.out.println("局部代码块中定义的变量,生命周期短,用完即释放");
	}
	
	public static void main(String[] args) {
		say();
	}
}

 

分享到:
评论

相关推荐

    Java构造代码块,静态代码块原理与用法实例分析

    Java构造代码块、静态代码块原理与用法实例分析 Java构造代码块和静态代码块是Java中两种特殊的代码块,它们的运行机制和应用场景不同,下面将详细介绍Java构造代码块和静态代码块的原理、用法和注意事项。 一、...

    Java 中普通代码块,构造代码块,静态代码块区别及代码示例

    Java编程语言中有三种类型的代码块,它们分别是普通代码块、构造代码块和静态代码块,每种都有其特定的用途和执行顺序。 1. **普通代码块**: 普通代码块(也称为局部代码块)是在方法或者类的成员变量声明之间...

    java代码-日常练习33,代码块### 静态代码块 static{代码内容;} 随着类的加载就执行一次 构造器代码块 {代码内容;} 每创建对象就执行一次 局部代码块 {代码内容;} 方法执行一次执行一次

    在日常练习33中,我们关注的是三种不同类型的代码块:静态代码块、构造器代码块和局部代码块。下面将详细讲解这三种代码块的特点和用法。 1. 静态代码块: 静态代码块由`static`关键字标识,它是在类被加载到Java...

    Java代码块与代码加载顺序原理详解

    Java代码块主要有三种类型:局部代码块、构造代码块和静态代码块。 (一)局部代码块 局部代码块是指在方法内部使用的代码块,以{ }括起来,用于限定变量的生命周期,尽早释放,节约内存。局部代码块的调用是以...

    java代码块测试

    1. **局部代码块**:这些代码块定义在方法内部,仅在该方法调用时执行。它们通常用来限制变量的作用域,提高内存效率。 2. **构造器代码块**或**实例初始化块**:当创建类的新实例时,这些代码块会执行。它们可以...

    java的部分基础知识(5)

    代码块分为局部代码块、构造代码块和静态代码块。局部代码块限定了变量的作用域,常用于控制变量生命周期。构造代码块则用于抽取构造方法中的重复代码,确保在创建对象时先于构造方法执行。静态代码块在类加载时执行...

    Java成员变量局部变量静态变量成员方法全局方法等概念的区

    局部变量是在方法、构造器或者块中声明的,它们的作用域仅限于声明它们的代码块。一旦代码块执行完毕,局部变量就会被销毁。局部变量不能在类的外部直接访问,也不能在其他方法中使用,除非将它们作为参数传递。 3...

    Java 成员变量和局部变量

    1. **生命周期与作用域**: 局部变量在其声明的代码块内部有效,一旦离开该块,变量就不再存在。它们不会在方法调用之间保持值。 2. **必须初始化**: 与成员变量不同,局部变量在声明时必须立即初始化,否则编译器将...

    java面向对象精华总结.pdf

    本文总结了 Java 面向对象编程的精华内容,涵盖了面向对象的思想、类和对象的关系、封装、继承、多态、构造代码块、静态代码块、设计模式等重要知识点。 一、面向对象的思想 面向对象是一种编程思想,它强调将功能...

    Java面向对象的相关信息

    代码块是Java中的一段代码,根据其位置和用途分为局部代码块、构造代码块和静态代码块。局部代码块定义在方法内部,用于限制变量的作用域,通常用于提高代码的组织性和可读性。构造代码块位于类的成员变量区域,目的...

    尚硅谷JAVA基础笔记吐血整理

    构造器用于初始化新创建的对象,代码块可以是实例初始化块或静态初始化块,内部类可以是成员内部类、局部内部类、匿名内部类等。 【封装、继承和多态】 封装是将数据和操作数据的方法绑定在一起,保护数据不被随意...

    Java开发技术大全(500个源代码).

    localVSmember.java 局部变量与成员变量同名问题示例 onlyTest.java 对象传值示例 otherClass.java 从类的外部访问对象的成员 showInstVar.java 演示不同的对象拥有不同的成员变量 showMain.java 演示main方法...

    342.340.JAVA基础教程_面向对象(下)-复习:代码块和final(342).rar

    本教程主要聚焦于Java的基础,特别是面向对象编程的概念,包括代码块和`final`关键字的使用。面向对象编程(Object-Oriented Programming, OOP)是Java的核心特性,它通过将数据和操作数据的方法封装在类中,实现...

    Android代码块执行顺序分析总结

    代码块可以分为普通代码块、构造代码块、静态代码块、同步代码块。 二、代码块执行顺序 在Android中,代码块执行顺序是一个复杂的问题。我们可以通过一个简单的示例来了解代码块执行顺序。假设我们有一个父类...

    Java语言基础入门教程 Java实训教程 4.类构造函数-this-静态属性方法-instanceof运算符共55页.pptx

    - 一种特殊的代码块,用于在类加载时初始化静态变量。 - 使用`static`关键字声明。 #### 五、`instanceof`运算符 `instanceof`是一个二元运算符,用于测试对象是否为特定类或其子类的实例。 - **基本语法**: -...

    java代码笔记2010-06-01:Java内部类 静态内部类 局部内部类 明明内部类;StringBuffer reverse的使用;

    局部内部类只在方法、构造器或者块中定义,其作用域仅限于该方法、构造器或块。这使得局部内部类可以访问它所在范围内的所有变量,包括局部变量,但这些变量必须是final的。局部内部类主要用来实现某个特定功能,其...

    入门java代码

    1. **Java基础**:首先,你需要了解Java的基本语法,包括数据类型(如整型、浮点型、字符型和布尔型)、变量(局部、成员和静态变量)以及基本的控制结构(如if语句、for循环和while循环)。 2. **类的概念**:类是...

    Java基础知识总结大全

    如果静态代码块与主函数位于同一个类中,则静态代码块会在主函数之前执行。 #### 四、设计模式 设计模式是解决软件设计中常见问题的有效方法。它们是经过验证的设计方案,能够帮助开发者编写更易于理解和维护的...

Global site tag (gtag.js) - Google Analytics