This
1.概念
- this是一个对象
- this是一个构造函数
2.介绍
解决局部变量和成员变量命名冲突
this在面向对象-封装那一篇里,有被两个地方提及。
但我们先简单给一个例子:
public Person(String name, String phone, String qqPassword, String bankCardPassword) {this.name = name;this.phone = phone;this.qqPassword = qqPassword;this.bankCardPassword = bankCardPassword;}
这是一个构造方法,this指向new出来的那个对象
而set方法中,是调用setName的那个对象
那么就会出现成员变量和局部变量命名冲突,this就是去解决这个问题的
构造方法互相调用
this是可以代表构造方法的,如何使用呢?
在某一个构造方法中调用另一个构造方法,一定要将this写在构造方法的第一行。
javabean
1.概念
javaBean 是指符合特定约定的 Java 类。
JavaBean 是一种可重用组件,主要用于构建企业级应用程序,数据之间的传递。
(1)类必须是具体的(非抽象 abstract)和公共的,public class 类名
(2)并且具有无参数的构造方法,有参构造方法
(3)所有成员变量私有化,并提供用来操作成员变量的set 和get 方法。
建议在测试的过程中重写toString。
2.快速生成
如果现在我们要生成学生的属性有:
- 学号
- 姓名
- 年级
- 年龄
一般我们可以现场定义变量,但javabean让我们可以快速生成。
我们首先需要自己编写好类,属性定义为private。
然后,使用idea快速生成getter&setter。
3.例子
下面这段代码定义了一个名为Student的类,该类包含了私有属性sNo(学号)、age(年龄)、sName(姓名)、grade(年级)和sClass(班级),并提供了对这些属性的获取和设置方法。
类中包含了两个构造方法,一个无参构造方法和一个带有参数的构造方法,用于初始化Student对象的属性。
除了构造方法外,类中还包含了一系列的getter和setter方法,用于获取和设置私有属性的值。
通过这个Student类,可以创建学生对象,并对学生对象的属性进行操作。
public class Student {private String sNo;// 学号private int age;private String sName;//姓名private int grade; // 年级private int sClass; //班级public Student(String sName) {this.sName = sName;this.sNo = "Default"; // 默认学号this.age = 0; // 默认年龄this.grade =0; // 默认年级this = 0; // 默认班级
}public Student(String sNo, int age, String sName, int grade, int sClass) {this.sNo = sNo;this.age = age;this.sName = sName;this.grade = grade;this.sClass = sClass;}public String getsNo() {return sNo;}//获取属性public void setsNo(String sNo) {this.sNo = sNo;}//定义属性public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getsName() {return sName;}public void setsName(String sName) {this.sName = sName;}public int getGrade() {return grade;}public void setGrade(int grade) {this.grade = grade;}public int getsClass() {return sClass;}public void setsClass(int sClass) {this.sClass = sClass;}
}
在上文中的这里
也许一些读者会有疑问,会不会发生冲突。
在Java中,构造方法的重载是允许的,即可以有多个构造方法,只要它们的参数列表不同。在这种情况下,public Student(String sNo, int age, String sName, int grade, int sClass) 和 public Student(String sName) 两个构造方法的参数列表是不同的,因此不会产生冲突。
当你调用new Student(“zs”)时,会调用public Student(String sName)构造方法,当你调用new Student(“123456”, 20, “张三”, 1, 2)时,会调用public Student(String sNo, int age, String sName, int grade, int sClass)构造方法。因为它们的参数列表不同,所以不会发生冲突。
对象数组
1.引入
数组较为单一,我们可以想一下如果使用数组来描述一个班级,该如何描述?
其中属性就较多:
- 班级的名字
- …
- 教师 【1个】
- 班主任 【1个】
- 学生 【多个】 -----》 数组中装一个一个的学生对象! -----》 对象数组
还要记录他们的行为等,退学,转学,什么的。
这里就要用到对象数组。
2.语法
我们该如何定义呢?
首先复习下数组的定义:
//类型[] 数组名 = new 类型[数组的长度];int[] arr = new int[5]
那么如果要用数组来描述学生该如何:
String[] arr = new String[5];
//首先定义了一个string类型长度为5的数组arrStudent[] arr = new Student[5];
//后定义一个长度为5的Student类型的数组arr
import bean.Student;//上文javabean里的例子public class StudentTest {public static void main(String[] args) {// 招生Student zs = new Student("张三");Student ls = new Student("李四");// 声明一个数组装学生Student[] class420 = new Student[2];class420[0] = zs;class420[1] = ls;System.out.println(Arrays.toString(class420));}
}