面向对象之代码块_Java5

01_代码块的概述和分类

  • A:代码块概述
    • 在Java中,使用{}括起来的代码块被称为代码块
  • B:代码块分类
    • 根据位置和声明的不同,可以分为局部代码块,构造代码块,静态代码块,同步代码
  • C:常见代码块的应用
    • a:局部代码块
      • 在方法中出现;限定变量生命周期,及早释放,提高内存利用率
    • b:构造代码块(初始化块)
      • 在类中方法外出现;多个构造方法中相同的代码块存放到一起,每次调用构造都执行,并且在构造方法前执行;每创建一次对象就会执行一次,优先于构造方法执行
    • c:静态代码块
      • 在类中方法外出现,加了static修饰
      • 在类中方法外出现,并加上static修饰;用于给类进行初始化,在加载的时候就执行,并且只执行一次
      • 一般用于加载驱动
public class Demo1 {

	public static void main(String[] args) {
		{
			int x = 10;
			System.out.println("局部代码块"+x);
		}
		
		Student s1 = new Student();
		System.out.println("----------------------");
		Student s2 = new Student("张三", 23);
		System.out.println(s2.getName()+"..."+s2.getAge());
	}
}

class Student{
	private String name;
	private int age;
	
	public Student(){
	}
	
	public Student(String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	public String getName() {
		return name;
	}
	
	public int getAge() {
		return age;
	}

	{
		System.out.println("构造代码块!");		//构造代码块:每创建一次对象就会执行一次,优先于构造函数执行
												//构造函数:是java函数中一种特殊的函数,定义方法为函数名与类名完全相同
	}
}
/*
局部代码块10
构造代码块!
----------------------
构造代码块!
张三...23
*/
public class Demo1 {

	public static void main(String[] args) {
		{
			int x = 10;
			System.out.println("局部代码块"+x);
		}
		
		Student s1 = new Student();
		System.out.println("----------------------");
		Student s2 = new Student("张三", 23);
		System.out.println(s2.getName()+"..."+s2.getAge());
	}
}

class Student{
	private String name;
	private int age;
	
	public Student(){
	}
	
	public Student(String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	public String getName() {
		return name;
	}
	
	public int getAge() {
		return age;
	}

	{
		study();
	}
	
	public void study() {
		System.out.println("学生学习");
	}
}
/*
局部代码块10
学生学习
----------------------
学生学习
张三...23
*/
public class Demo1 {

	public static void main(String[] args) {
		{
			int x = 10;
			System.out.println("局部代码块"+x);
		}
			
		Student s1 = new Student();
		System.out.println("----------------------");
		Student s2 = new Student("张三", 23);
		System.out.println(s2.getName()+"..."+s2.getAge());
	}
}

class Student{
	private String name;
	private int age;
	
	public Student(){
	}
	
	public Student(String name, int age) {
		this.name = name;
		this.age = age;
	}
	
	public String getName() {
		return name;
	}
	
	public int getAge() {
		return age;
	}

	{
		study();
	}
	
	public void study() {
		System.out.println("学生学习");
	}
	
	static {
		System.out.println("静态代码块");  //随着类的加载而加载,且只执行一次
										  //作用:给类进行初始化,一般用来加载驱动
	}
}
/*
主方法中的静态代码块
局部代码块10
静态代码块
学生学习
----------------------
学生学习
张三...23

02_代码块面试题

  • 示例1:
class Demo1{
	public static void main(String[] arge){
		{
			int x = 3;
			System.out.println("1,普通代码块内的变量x="+x);		//普通构造代码块
		}

		int x = 1;		//x变量要重新定义int,因为普通构造代码块,用完释放
		System.out.println("主方法内的变量x="+x);

		{
			int y = 7;
			System.out.println("2,普通代码块内的变量y="+y);  
		}
	}
}

在这里插入图片描述

  • 示例2:
class Demo2{
    {
      System.out.println("第一代码块");    
    }
    
    public Demo2(){
        System.out.println("构造方法");
        }
        
        {
          System.out.println("第二构造块");
        }
      public static void main(String[] args){
          new Demo2();   //创建Demo2对象
          new Demo2();
    }
}

在这里插入图片描述

  • 示例3:
class Code{
    {
      System.out.println("Code的构造块");
    }
    
    static{
        System.out.println("Code的静态代码块");
        }
        
    public Code(){
        System.out.println("Code的构造方法");
        }
}
    
    
public class Demo3{
	{
      System.out.println("222222222");    
     }
     
     static{
        System.out.println("Demo3的静态代码块");
     }
        
	 public Demo3(){
		System.out.println("Demo3的构造方法");
	 }

	 public static void main(String[] args){
		System.out.println("Demo3的主方法");
		new Code();
		new Code();
		new Demo3();
		new Demo3();
		}
}

在这里插入图片描述

  • 示例4:
class Demo1_Code {
	{
		System.out.println("哈哈哈哈哈");				//没有执行,因为没有创建Demo1_Code对象
	}
	public static void main(String[] args) {
		{
			int x = 10;
			System.out.println(x);						//普通代码块,按顺序执行
		}
		Student s1 = new Student();
		System.out.println("-------------------------------");
		Student s2 = new Student("张三", 23);
		System.out.println("-------------------------------");	
	}

	static {
		System.out.println("主方法中的静态代码块");		//优先于主方法main执行
	}
}

class Student{
	private String name;
	private int age;
	
	public Student(){
		System.out.println("空参构造");
	}

	public Student(String name, int age){
		this.name = name;
		this.age = age;
		System.out.println("有参构造");
	}

	{
		System.out.println("构造代码块");		//构造代码块:每创建一次对象就会执行一次,并且优先于构造函数执行
	}
	
	static {									//静态代码块:随着类的加载而加载,只执行一次
		System.out.println("静态代码块");		//作用:给类进行初始化,一般用来加载驱动
	}
}

在这里插入图片描述

  • 示例5:
class Demo2_Student {
	{
		System.out.println("222222222222222222222");			//没有执行,因为没有创建Demo2_Student对象
	}
	public static void main(String[] args) {

		System.out.println("我是main方法");
		Student s1 = new Student();
		s1.study();
		System.out.println("-----------------------");
		Student s2 = new Student();
		s2.study();
	}

	static {
		System.out.println("Demo2_Student 静态代码块"); 
	}

}

class Student{
	static {
		System.out.println("Student 静态代码块");
	}

	{
		System.out.println("Student 构造代码块");
	}
	
	Student(){
		System.out.println("Student 构造方法");
	}

	public void study(){
		System.out.println("学生学习");
	}
}

在这里插入图片描述

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值