Java基础视频笔记--10构造方法

构造方法

  1. 构造方法有什么作用,什么是构造方法

    • 构造方法是一个比较特殊的方法,作用:可以完成对象的创建,以及给实例变量赋值(初始化实例变量)

      换句话说:构造方法是用来创建对象,并且同时给对象的属性赋值。(注意:实例变量没有手动赋值的时候,系统

      会赋默认值。)

    • 重点(需要记忆):当一个类没有提供任何构造方法,系统会默认提供一个无参数的构造方法。(而这个构造方法被称为缺省构造器。)

    • 例如下面程序:

      public class constructor{
          public static void mian(String[] args){
              new student();//调用Student类的无参数构造方法
              //调用普通方法
              constructor.doSome();
              doSome();
              // 创建Student类型的对象
              student s1 = new student();
              System.out.println(s1);//只要输出结果不是null,说明这个对象一定创建完成了//udent@54bedef2
              //此处的输出结果大家目前是看不懂的,后期再说。
              student s3 = new student(12); 
              System.out.println(s3); //Student@5caf905d
           public static void doSome(){
             System.out.println("do some!!");  
             }
          }
      }
      //在另一个文件名为student的源文件中
      public class Student{
      	// 学号
      	int no;
      	// 姓名
      	String name;
      	// 年龄
      	int age;
      	// 当前的Student这个类当中并没有定义任何构造方法。
      	// 但是系统实际上会自动给Student类提供一个无参数的构造方法。
      	// 将无参数的构造方法(缺省构造器)写出来
      	public Student(){
      		System.out.println("无参数的构造方法执行了!");
      	}
      	// 定义一个有参数的构造方法
      	public Student(int i){
      	}
      }
      
    • 当一个类中手动的提供了构造方法,那么系统将不再默认提供无参数构造方法。建议将无参数构造方法手动的写出来,这样一定不会出问题。

    • 无参数构造方法和有参数的构造方法都可以调用

      Student x = new Student();

      Student y = new Student(123);

    • 构造方法支持方法重载吗?构造方法是支持方法重载的。在一个类当中构造方法可以有多个并且所有的构造方法名字都是一样的。方法重载特点:在同一个类中,方法名相同,参数列表不同。

  2. 构造方法怎么定义,语法是什么

    • [修饰符列表] 构造方法名(形式参数列表){

      ​ 构造方法体;

      ​ 通常在构造方法体当中给属性赋值,完成属性的初始化。

      }

      注意:第一:修饰符列表目前统一写:public。千万不要写public static。

      第二:构造方法名和类名必须一致。

      第三:构造方法不需要指定返回值类型,也不能写void,写上void表示普通方法,就不是构造方法了。

    • 普通方法的语法结构:

      [修饰符列表] 返回值类型 方法名(形式参数列表){

      ​ 方法体;

      }

  3. 构造方法怎么调用

    • 使用new运算符来调用构造方法。语法格式: new 构造方法名(实际参数列表);
  4. 什么是缺省构造器?

    • 缺省构造器就是无参数构造方法

    • 当一个程序,例如:

      //新建一个stduent.java源文件
      public class student{
          int no ; 
          String name; 
          int age; 
          public student(){
            //这就是一个无参数构造方法,这个无参数构造方法没有手动构造时,系统会默认提供  
          }
      }
      //新建一个StudentText.java源文件
      public class StudentText{
          public static void main(String[] args){
              student s1 = new student();
              System.out.println(s1.no);//0
              System.out.println(s1.name)//null
              System.out.println(s1.age);//0
          }
      }
      
  5. 怎么防止缺省构造器丢失?

    • 建议将无参数构造方法手动写出来

    • 程序:

      public class Student{
      	int no;
      	String name;
      	int age;
      	public Student(){
      		System.out.println("无参数的构造方法执行了!");
      	}
      	// 定义一个有参数的构造方法
      	public Student(int i){
      	}
      }
      //调用
      Student  s1 = new Student();
      Stuedent s2 = new Student(100);
      
    • 如果将无参数构造方法给注释掉, 那么调用中的Student s1 = new Student();就会出现报错,因为系统在你定义了构造方法的情况下,不会默认分配缺省构造器

  6. 实例变量在类加载是初始化吗?实例变量在什么时候初始化?

    • 实例变量是在构造方法执行的过程中完成初始化的,完成赋值的。

    • 程序:

      public class User{
      	// 3个属性,3个实例变量【对象变量】
      	// 用户id
      	int id; //System.out.println(User.id);错误的。需要先new对象,只有对象有了才能谈id
      	// 用户名
      	String name;
      	// 年龄
      	int age;
      	// 手动定义有参数的构造方法,无参数构造方法将消失。
      	public User(int a){
              id = a; 
              //这里两行你看不到(没有手动赋值,系统都会默认赋值。)
              //name = null
              //age = 0; 
      	}
          //无参数构造方法里面没有任何java语句,那么实例变量是怎么赋值的?
      	public User(){
      		//这里实际上有三行代码你看不见。
      		// 无参数构造方法体当中虽然什么代码都没写,
      		// 但是实际上是在这个方法体里面进行的实例变量默认值初始化
      		/*
      		id = 0;
      		name = null;
      		age = 0;
      		*/
      	}
      }
      
posted @ 2021-03-13 21:03  LightSunshine21  阅读(84)  评论(0)    收藏  举报