JAVA自学教程之(构造函数及其特点+构造代码块)



JAVA学习第八课(构造函数及其特点+构造代码块)。

构造函数:

 

构造函数,就是在构建 创造对象 时所调用的函数,作用就是给对象进行初始化
特点:
1.函数名和类名相同 2.不需要定义返回值类型 3.没有具体的返回值
作用:给对象进行初始化

 

 

注意:
1.默认构造函数的特点

2.多个构造函数是以重载的形式存在的

 

代码演示:

 

  1. class man
  2. {
  3.     private int age;
  4.     private String name;
  5.     man()//定义一个man类的构造函数
  6.     {
  7.         System.out.println(“sun”);
  8.     }
  9.     public void fun()
  10.     {
  11.         System.out.println(name+” “+age);
  12.     }
  13. }
  14. public class Main
  15. {
  16.     public  static void  main(String[] args)
  17.     {
  18.         man jo = new man();
  19.     }
  20. }
  21. 打印 sun、
class man
{
	private int age;
	private String name;

	man()//定义一个man类的构造函数
	{
		System.out.println("sun");
	}
	public void fun()
	{
		System.out.println(name+" "+age);
	}
}
public class Main
{
	public  static void  main(String[] args) 
	{
		man jo = new man();
	}
}

打印 sun、

PS:一个类中如果没有定义过构造函数,那么该类中会有一个默认的空参数构造函数

 

如果在类中定义了指定的构造函数,那么类中的默认构造函数就没有了

特别注意:如果定义了有参的构造函数,那么默认构造函数的形式也构造,编译器不再自动生成

实际上:默认的空参数函数是:man(){}

比如一个类: class test { } 什么也没有,但是实际上里面有一个test(){},编译器编译时会先判断有没有写构造函数,没有自动添加,有就删除默认的构造函数 构造函数,是在一创建对象的同时被调用了
一般函数和构造函数的区别:
1.构造函数:对象创建时,就会调用与之对应的构造函数,并对该对象进行初始化 一般函数: 创建对象后,需要进行函数的调用的时候才会被调用
2.构造函数,对象创建时,只调用一次 一般函数:对象创建后,想调用几次就调用几次
什么时候使用构造函数?
在描述某一事物时,该事物存在一些内容,这些内容都定义在构造函数里。 如:对象一创建,就有一个默认的年龄、姓名

示例代码:

 

  1. class man
  2. {
  3.     private int age;
  4.     private String name;
  5.     man()//定义一个man类的构造函数
  6.     {
  7.         age = 20;
  8.         name = “john”;
  9.     }
  10.     public void fun()
  11.     {
  12.         System.out.println(name+” “+age);
  13.     }
  14. }
  15. public class Main
  16. {
  17.     public  static void  main(String[] args)
  18.     {
  19.         man jo = new man();
  20.         jo.fun();
  21.     }
  22. }
class man
{
	private int age;
	private String name;

	man()//定义一个man类的构造函数
	{
		age = 20;
		name = "john";
	}
	public void fun()
	{
		System.out.println(name+" "+age);
	}
}

public class Main
{
	public  static void  main(String[] args) 
	{
		man jo = new man();
		jo.fun();

	}
}

构造函数的重载:

 


 

  1. class man
  2. {
  3.     private int age;
  4.     private String name;
  5.     man()//定义一个man类的构造函数————— |
  6.     {                                            |
  7.         age = 20;                            |
  8.         name = “john”;                       |
  9.     }                                            |
  10.     //  对象在创建前就有年龄,名字             |
  11.                                                  |
  12.     man (int a,String s)                         |——–>重载
  13.     {                                            |
  14.         age = a;                             |
  15.         name =s;                             |
  16.     }                                            |
  17.     man (String s)                               |
  18.     {                                            |
  19.         name =s;                             |
  20.     }                             —————|
  21.     public void fun()
  22.     {
  23.         System.out.println(name+” “+age);
  24.     }
  25. }
  26. public class Main
  27. {
  28.     public  static void  main(String[] args)
  29.     {
  30.         man jo = new man();
  31.         jo.fun();
  32.         man jj  = new man(1,”BLF”);
  33.         jj.fun();
  34.         man jjj  = new man(“BLF2″);
  35.         jj.fun();//打印BLF 0
  36.     }
  37. }
class man
{
	private int age;
	private String name;

	man()//定义一个man类的构造函数--------------- |
	{                                            |
		age = 20;                            |
		name = "john";                       |
	}                                            |
	//	对象在创建前就有年龄,名字             |
	                                             |
	man (int a,String s)                         |-------->重载
	{                                            |
		age = a;                             |
		name =s;                             |
	}                                            |
	man (String s)                               |
	{                                            |
		name =s;                             |
	}                             ---------------|
	public void fun()
	{
		System.out.println(name+" "+age);
	}
}

public class Main
{
	public  static void  main(String[] args) 
	{
		man jo = new man();
		jo.fun();
		man jj  = new man(1,"BLF");
		jj.fun();

		man jjj  = new man("BLF2");
		jj.fun();//打印BLF 0 
	}
}

PS:一个类中出现同名的函数名,必须要用的重载。
一个对象创建时如果没有调用构造函数,就意味着创建失败。
构造函数的内存分配图(如下图):对象要进堆,函数要进栈

 

 

构造函数细节:
构造函数,为了方便日后修改信息,所以要加set 构造函数的名前,不可加void等,加了之后就不是构造函数,而变成一般函数了(构造函数的特点2)
错误代码示例

 

  1. class man
  2. {
  3.     private int age;
  4.     private String name;
  5.     man(int a)
  6.     {
  7.         age = a;
  8.     }
  9.     //  对象在创建前就有年龄,名字
  10.     man (int a,String s)
  11.     {
  12.         age = a;
  13.         name =s;
  14.         fun();
  15.     }
  16.     public  void set(String s)
  17.     {
  18.         name = s;
  19.     }
  20.     public void fun()
  21.     {
  22.         System.out.println(name+” “+age);
  23.     }
  24. }
  25. public class Main
  26. {
  27.     public  static void  main(String[] args)
  28.     {
  29.         man jo = new man();
  30.         jo.set(“BLF2″);
  31.         jo.fun();
  32.     }
  33. }
class man
{
	private int age;
	private String name;

	man(int a)
	{
		age = a;
	}
	//	对象在创建前就有年龄,名字

	man (int a,String s)
	{
		age = a;
		name =s;
		fun();
	}
	public  void set(String s) 
	{
		name = s;
	}
	public void fun()
	{
		System.out.println(name+" "+age);
	}
}

public class Main
{
	public  static void  main(String[] args) 
	{
		man jo = new man();
		jo.set("BLF2");
		jo.fun();
	}
}

这段代码的问题在于:

 

因为没有定义构造函数。

   默认的构造函数是代码没有创建构造函数时自动添加,但是上述代码有构造函数了,但是没有man(){}找一个类型的构造函数,所以报错

构造代码块:
构造代码块,与对象有关(与类无关),所有对象进行初始化,具备对象的通用性 (有几个对象,就执行几次)
构造函数,具备对象的针对性 面试题:用构造代码块,静态代码块,构造函数同时操作一个变量,问操作的顺序是什么?
静态代码块先执行,在看有无对象,如果有对象构造代码块先执行,然后是构造函数

  1. class BLF
  2. {
  3.     private static String name;
  4.     {
  5.         System.out.println(“nni”);
  6.     }
  7.     BLF(String name)
  8.     {
  9.         this.name = name;
  10.         System.out.println(“哭”);
  11.     }
  12.     BLF()
  13.     {
  14.         this.name = “MIMI”;
  15.         System.out.println(“哭”);
  16.     }
  17.     public static void show()
  18.     {
  19.     System.out.println(“name : “+name);
  20.     }
  21. }
  22. public class Main
  23. {
  24.     public static void main (String[] args)
  25.     {
  26.         BLF jo = new BLF();
  27.         jo.show();
  28.         BLF jo2 = new BLF(“你”);
  29.         jo2.show();
  30.     }
  31. }
class BLF
{
	private static String name;

	{                        
		System.out.println("nni");
	}
	BLF(String name)
	{
		this.name = name;
		System.out.println("哭");
	}
	BLF()
	{
		this.name = "MIMI";
		System.out.println("哭");
	}
	public static void show() 
	{
	System.out.println("name : "+name);	

	}
}
public class Main
{

	public static void main (String[] args) 
	{
		BLF jo = new BLF();
		jo.show();
		BLF jo2 = new BLF("你");
		jo2.show();
	}
}

打印:

 

nini

nini