xc的java学习日记(Day08:代码块)

Day08

局部代码块,构造代码块和静态代码块

CodeDemo

  • 局部代码块:局部变量,用于限定变量的生命周期。
  • 构造代码块:在类中的成员位置,用{}括起来的代码。每次调用构造方法执行前都会先执行构造代码块。
    作用:可以把多个构造方法中的共同代码放在一起。
  • 静态代码块:在类中的成员位置,用{}括起来的代码,只不过它用static修饰。
  • 作用:一般是对类进行初始化。
    • 执行顺序:静态-构造-构造方法
    • 静态代码块只执行一次,构造代码块每次调用构造方法都执行。

class Code{
         //构造代码块
       	{
       	int x = 100;
       		System.out.println(x);
            }
        //无参构造方法
         public Code(){
            	System.out.println("code");
       		}
        //带参构造方法
       	public Code(int a){
   			System.out.println("code");	
   			} 			
   		//构造代码块 			
   		{ 			
   			int y = 200;
   			System.out.println(y);
   			}
       }
class CodeDemo{
   public static void main(String[] args){
   		//局部代码块
   	{
   		int x = 10;
   		System.out.println(x);
   	}
   	{
   		int y = 20;
   		System.out.println("y"); 
   	}
   	System.out.println("-----------");
   	Code c = new Code();
   	System.out.println("-----------");
   	Code c2 = new Code();
   	System.out.println("-----------");
   	Code c3 = new Code(1);
   }
}

class Student {
   	static {
   		System.out.println("Student 静态代码块");
   	}
   	
   {
   	System.out.println("Student 构造代码块");
   }
   
   public Student() {
   	System.out.println("Student 构造方法");
   }
}


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
Student 静态代码块
Student 构造代码块
Student 构造方法
Student 构造代码块
Student 构造方法

*/

1.静态代码块
A:格式 - 在java类中(静态代码块不能存在于方法中)使用static关键字和{}声明的代码块
B:执行时 - 静态代码在类被加载的时候就运行了,并且只运行一次,优先级高于其余代码块和构造函数。
(若有多个静态代码块,则按书写顺序执行)
C:作用 - eg:一个项目启动时需要加载很多配置文件,这时可以把配置文件放入静态代码块中。
D:说明 - 静态代码块不能存在于任何方法中——
    对于普通方法,是通过加载类,然后new出实例化对象,通过对象运行此方法,而静态代码块只需要加载类就可以直接运行了。
    对于静态方法,在类加载时,静态方法也已经加载,但是我们必须通过类名或者对象名才能访问,也就是说相比于静态代码快,静态代码是主动运行的,而静态方法是被动运行的。

2.构造代码块
A:格式 - 在java类中使用{}声明的代码块(和静态代码块的区别是少了static关键字):

public class Test1{
	static{
		System.out.println("静态代码块")
	}
	{
		System.out.println("构造代码块")
	}
}

B:执行时 - 构造代码块时创建对象时被调用,每次创建对象被调用一次,但是优先于构造函数执行。需要注意的是,构造函数块并不是优先级高于构造函数,而是依托于构造函数。即:若不实例化对象,构造代码块是不会执行的。
eg:

public class CodeBlock{
		{
				System.out.println("构造代码块");
		}
		public CodeBlock(){
				System.out.println("无参构造函数");
		}
		public CodeBlock(String str){
				System.out.println("有参构造函数");
		}
}

反编译的class文件:
在这里插入图片描述
C:作用 - 和构造函数相似,都能对对象进行初始化,并且只要创建一个对象,就执行一次。但是反过来,构造函数不一定每个对象建立时都执行(多个构造函数的情况下,建立对象时传入的参数不同则初始化使用对应的构造函数不同)。

3.构造函数
A:构造函数的命名必须和类名完全相同。在java中普通函数可以和构造函数同名,但是必须带有返回值。
B:构造函数的功能主要用于在类的对象创建时定义初始化的状态。无返回值,也不能用void来修饰。这就保证了它不仅什么也不用返回,而且不能有任何选择。其他方法都有返回值,即使是void返回值。尽管方法体本身不会自动返回什么,但仍然可以让它返回一些东西,而这些东西可能是不安全的
C:构造函数不能被直接调用,必须通过new运算符在创建对象是才会自动调用;而一般的方法是在程序执行到它的时候被调用的
D:当定义一个类的时候,通常情况下都会显示该类的构造函数,并在函数中制定初始值的工作也可省略,不过java编译器会提供一个默认的构造函数,此默认构造函数是不带参数的。而一般的方法不存在这一特点。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值