• Java 基础(代码块)


    类的成员之四: 代码块(或初始化块)

    1.代码块的作用:用来初始化类、对象
    2.代面树如果有修饰的话,只能使用 static.
    3. 分类:静态代码块 VS 非静态代码块

    1. 静态代码块

      内部可以有输出语句
      随着类的加载而执行,而且只执行一次
      作用: 初始化类的信息
      如果一个类中定义了多个静态代码块,则按照声明的先后顺序执行
      静态代码块的执行要优先于非静态代码块的执行
      静态代码块内只能调用静态的属性、静态的方法,不能调用非静态的结构

    5.非静态代码块

    内部可以有输出语句
    随着对象的创建而执行
    每创建一个对象,就执行一次非静态代码块
    作用:可以在创建对象时,对对象的属性等进行初始化
    如果一个类中定义了多个非静态代码块,则按照声明的先后顺序执行
    非静态代码块内可以调用静态的属性、静态的方法、或非静态的属性、非静态的方法

    对属性可以赋值的位置:
    ① 默认初始化
    ② 显式初始化/⑤ 在代码块中赋值
    ③ 构造器中初始化
    ④ 有了对象以后,可以通过 "对象.属性" 或 "对象.方法"的方式,进行赋值

    执行的先后顺序:① - ②/⑤ - ③ - ④

    实例化子类对象时,涉及到父类、子类中静态代码块、非静态代码块、构造器的加载顺序:
    由父及子,静态先行。

    BlockTest.java

    package com.klvchen.java3;
    
    public class BlockTest {
    	public static void main(String[] args) {
    		String desc = Person.desc;
    		
    		Person p1 = new Person();
    		Person p2 = new Person();
    		System.out.println(p1.age);
    		
    		Person.info();
    	}
    }
    
    class Person{
    	String name;
    	int age;
    	static String desc = "我是一个人";
    	
    	public Person() {
    		
    	}
    	
    	public Person(String name, int age) {
    		this.name = name;
    		this.age = age;
    	}
    	
    	//非 static 的代码块
    	{
    		System.out.println("hello, block - 1");
    		age = 1;
    		eat();
    		desc = "我是一个爱学习的人";
    		info();
    	}
    	
    	{
    		System.out.println("hello, block - 2");
    	}
    	
    	//static 的代码块
    	static {
    		System.out.println("hello, static block-2");
    	}
    	
    	static {
    		System.out.println("hello, static block-1");
    		desc = "我是一个爱学习的人";
    		info();
    //		eat();
    //		name = "Tom";
    	}
    	
    	public void eat() {
    		System.out.println("吃饭");
    	}
    
    	@Override
    	public String toString() {
    		return "Person [name=" + name + ", age=" + age + "]";
    	}
    	
    	public static void info() {
    		System.out.println("我是一个快乐的人!");
    	}
    }
    

    StaticBlockTest.java

    package com.klvchen.java3;
    
    public class StaticBlockTest {
    	public static void main(String[] args) {
    		System.out.println("total = " + MyPerson.total);
    		System.out.println("total = " + MyPerson.total);
    	}
    
    }
    
    class MyPerson{
    	public static int total;
    	
    	static {
    		total = 100;
    		System.out.println("in static block!");
    	}
    }
    

  • 相关阅读:
    Spring MVC @RequestMapping注解详解
    (转)Cesium教程系列汇总
    spring boot +mybatis(通过properties配置) 集成
    SpringBoot2.0之四 简单整合MyBatis
    在Windows下使用Git+TortoiseGit+码云管理项目代码
    TortoiseGit之配置密钥
    Spring Boot 学习之路二 配置文件 application.yml
    SpringBoot学习笔记(2) Spring Boot的一些配置
    【入门】Spring-Boot项目配置Mysql数据库
    Spring 的application.properties项目配置与注解
  • 原文地址:https://www.cnblogs.com/klvchen/p/14486749.html
Copyright © 2020-2023  润新知