1. 构造方法
new 类名(有可能使用到的参数);
类名(有可能使用到的参数); 这就是构造方法 Constructor
初始化当前创建对象中的成员变量数据!!!
public 类名(所需初始化参数列表) {
初始化语句;
}
细节:
1. 构造方法的名字必须是类名,并且其他方法的名字不能是类名
2. 构造方法没有返回值类型声明
3. 初始化参数列表和正常的方法列表操作使用一致
4. 初始化语句,大多数是都是一些赋值语句
首先
在Eclipse项目所在文件夹中,bin目录是存放当前Java程序对应的所有的.class 二进制文件(字节码文件),该文件保存了Java文件对应的所有内容
这里可以通过反编译工具看到一些特定的现象 [了解]
javap -c -l -private XXX.class
根据需求完成所需构造方法
public 类名(所需初始化参数列表) {
初始化语句;
}
需求:
1. 完成对于姓名在创建对像时初始化的构造方法
2. 完成对于姓名,年龄创建对象时初始化的构造方法
2. 完成对于姓名,年龄,性别创建对象时初始化的构造方法
注意:
如果在代码中程序员自行完成了构造方法,Java编译器不再提供自动生成的无参数构造方法。
【强制要求】
以后代码中无论什么时候都要给用户提供一个无参数构造方法使用
package com.qfedu.a.constructor;
class Dog {
// 成员变量 Field
String name;
int age;
char gender;
// 无参数构造方法
public Dog() {}
// 完成对于姓名在创建对像时初始化的构造方法
public Dog(String n) {
// 成员变量可以在类内其他中直接使用【80%正确】
name = n;
}
// 完成对于姓名,年龄创建对象时初始化的构造方法
public Dog(String n, int a) {
name = n;
age = a;
}
// 完成对于姓名,年龄,性别创建对象时初始化的构造方法
public Dog(String n, int a, char g) {
name = n;
age = a;
gender = g;
}
// 成员方法 Method
public void eat() {
System.out.println("狗狗吃狗粮");
}
public void game() {
System.out.println("狗狗玩球");
}
public void sleep() {
System.out.println("狗狗作息非常规律");
}
}
public class Demo1 {
public static void main(String[] args) {
/*
* 这里调用的是一个无参数构造构造方法
* 但是该方法在Dog类内是没有定义的!!!
*
* 以后使用比较多的情况大多数都是无参数构造方法
*
* The constructor Dog() is undefined
* 构造方法Dog()未定义
*/
// 无参数构造方法
Dog dog = new Dog();
System.out.println("Name:" + dog.name);
System.out.println("Age:" + dog.age);
System.out.println("Gender:" + dog.gender);
System.out.println("-------------------------------");
Dog dog2 = new Dog("骚杰");
System.out.println("Name:" + dog2.name);
System.out.println("Age:" + dog2.age);
System.out.println("Gender:" + dog2.gender);
System.out.println("-------------------------------");
Dog dog3 = new Dog("骚杰", 66);
System.out.println("Name:" + dog3.name);
System.out.println("Age:" + dog3.age);
System.out.println("Gender:" + dog3.gender);
System.out.println("-------------------------------");
Dog dog4 = new Dog("测试", 66 , '男');
System.out.println("Name:" + dog4.name);
System.out.println("Age:" + dog4.age);
System.out.println("Gender:" + dog4.gender);
System.out.println("-------------------------------");
}
}
总结
-
构造方法
功能是用于初始化创建对象的成员变量数据
构造方法是一个方法,参数使用方式和方法一致 -
构造方法选择
Java编译器会根据构造方法中的【参数类型,个数,顺序】来做选择,如果没有指定的构造方法,报错!!! -
无论什么时候一定要给当前类提供一个无参数构造方法。
-
以下代码报错
Dog(String name);
Dog(String color);调用:
String color = “red”;
Dog dog = new Dog(color);
在Java代码中不允许出现相同数据类型,个数,顺序的构造方法,和参数名没有关系,Java编译器选择过程中,有且只针对数据类型,个数,顺序选择,参数名真的无所谓。
this关键字
this关键字表示对象本身
1. 调用当前方法的类对象
2. 通过构造方法创建的类对象
this表示一个对象!!!当前对象!!!