构造器与代码块

我们为什么需要构造器与代码块?

  当我们创建对象时,对象究竟是怎么样new出来的,又是怎么样将new出来的对象返回的呢?虽然Java是有着封装的特性,我们不知道内部的实现也不妨碍编程,但不刨根问底的程序员不是好的架构师,有余力时还是应该多看源码多看内部实现。new对象的内部实现,就离不开构造器的概念。
  简单来说,被 { } 括住的代码,就叫代码块。我们平时总会习以为常的使用代码块,甚至习惯到不以为然了,而越是这种不以为然的东西,越是应该好好分析研究一下。

构造器

  在创建对象时,调用的方法,称为构造器,或构造方法。

  一个类里,至少会有一个构造方法。即使没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法。构造方法的名称必须与类同名,一个类可以有多个构造方法(《方法的重载》)。

  来个实例:

public class Person {
	private String name;
	private int age;

	Person() {
		System.out.println("默认构造器被调用");
	}
	// 构造器的重载
	Person(String name,int age) {
		System.out.println("重载的带参构造器被调用");
		this.name = name ;
		this.age = age ;
	}
	
	@Override
	public String toString() {
		return "Person [name=" + name + ", age=" + age + "]";
	}

	public static void main(String[] args) {
		Person person1 = new Person();
		System.out.println("------------");
		Person person2 = new Person("小猪",18);
		System.out.println("------------");
		System.out.println(person1);
		System.out.println(person2);
	}
}
-------------------------------------------------
输出结果为:
默认构造器被调用
------------
重载的带参构造器被调用
------------
Person [name=null, age=0]
Person [name=小猪, age=18]

  构造器特点:

  • 1.通过new关键字调用。
  • 2.构造器名称必须和当前类名一致。
  • 3.构造器有返回值,返回的值的类型就是本类,所以不要使用void(会报警告),不可以使用return返回任何值。
  • 4.如果没有定义构造器,编译器会自动定义一个无参数构造器。如果已定义,则不会自动添加!(来个实例:)
  • 5.如果类是public的,则默认的构造器也为public。
public class Person {
	private String name;
	private int age;

	Person(String name,int age) {
		this.name = name ;
		this.age = age ;
	}

	public static void main(String[] args) {
		Person person1 = new Person();	// 此处会报错。因为不会再自动生成无参构造器
		Person person2 = new Person("小猪",18);
	}
}

代码块

  代码块,就是指在类或方法中,使用{}括起来的一段代码。

  • 1.局部代码块:是最常见的代码块,在方法里用一对“{}”括起来的一段代码,就是局部的代码块。
	// 局部代码块
	public void eatFood() {
		System.out.println("吃吃吃");
	}
  • 2.初始化代码块:在类中直接定义的,用“{}”括起来的代码,相当于写在构造器中,且代码块不管放在构造器前后,初始化代码块内的代码都会放在构造器最前面,且写在前面的代码块放在前面。
class Animal {
	
	{
		System.out.println("初始化代码块1");
	}
	
	Animal(){
		System.out.println("构造器");
	}
	
	{
		System.out.println("初始化代码块2");
	}

}
public class Test {
	
   public static void main(String[] args){
	  new Animal();
   }
}
---------------------------------------------
输出结果:
初始化代码块1
初始化代码块2
构造器
  • 3.静态代码块:在初始化代码块前面,加上一个static。静态代码块在加载字节码时就执行了(不用创建对象,就会执行),在主方法之前,且只会执行一次。
public class Test {
	
	static {
		System.out.println("静态代码块");
	}
	
   public static void main(String[] args){
	  System.out.println("main方法执行");
   }
}
---------------------------------------------
输出结果:
静态代码块
main方法执行
发布了18 篇原创文章 · 获赞 0 · 访问量 415

猜你喜欢

转载自blog.csdn.net/HhmFighting/article/details/104858724