方法重载
前提
-
同一个类中
-
同名的方法
方法重载的好处
-
没有重载不方便:让方法调用者,在调用方法的时候,不必为了相似的功能而查阅文档,查找各种不同的方法名,降低学习成本,提高开发效率。
-
有了重置很方便:在调用一系列重载的方法时,感觉上就像是在调用同一个方法。对使用者来说,只需要知道一个方法名就能够应对各种不同情况。
规则限制
限制的来源:本质上只要让系统能够区分清楚我们具体要调用哪一个方法。
-
在同一个类中,如果两个方法的方法名一致,那么参数列表必须不同。
-
参数列表区分
-
要么是参数个数不同
-
要么是参数类型不同
-
//参数个数不同
public int add(int a, int b);
public int add(int a, int b, int c);
//参数类型不同
public int add(int a, int b);
public double add(double a, double b);
方法可变参数
①需求
在实际开发过程中,确实有一些情况不确定在调用方法时传入几个参数。所以为了让调用方法时能够弹性传参,JavaSE5.0标准增加了可变参数功能。
②声明和调用
// 能够计算任意个数整数之和的加法
// 使用String ... args来声明可变参数
public String add(String ... args) {
System.out.println("暗号:可变参数");
String sum = "";
// 在方法体内,可变参数按照数组形式来处理
for (int i = 0; i < args.length; i++) {
sum = sum + args[i];
}
return sum;
}
③语法规则
-
可变参数必须在整个参数列表的最后
-
当调用方法时实际传入的参数既匹配可变参数列表方法,又匹配一个具体的参数列表方法,那么系统会优先调用具体的参数列表方法
递归
概念
方法自己调用自己。使用递归想要达到的目的是让方法中的代码重复执行,而且往往是在上一次执行的结果的基础上,再进一步执行。
封装
①含义
将对象中数据或代码逻辑隐藏起来。对数据的操作在类的内部完成,对外界隐藏实现的细节。
②好处
-
对象(或组件)内部代码实现的细节可以对外隐藏。
-
简化外部使用对象时的操作难度。外部使用对象时,调用对象暴露出来的方法即可。
-
让整个系统的开发组件化、模块化程度更高,更有利于实现:高内聚、低耦合。
构造器
注意:构造器和方法是两码事,各是各的。
①构造器引入
当我们使用new关键字创建一个类的对象时,就是在使用这个类的构造器了:
如果我们没有明确声明构造器,那么系统回给类分配一个隐式的构造器(无参构造)。
②构造器的作用
-
作用1:创建对象。
-
作用2:在创建对象的过程中,对类进行初始化操作。这些操作写在构造器的大括号中。
-
初始化操作放到构造器里面,由构造器自动完成,程序员就不必在创建对象后还想着对这对象做初始化操作。
-
③构造器的组成部分
一个类可以有多个构造器
根据参数列表不同,多个构造器之间是重载关系。规则和方法重载一致:
-
要么参数个数不同
-
要么参数类型不同
⑤构造器相关语法规则
-
Java语言中,每个类都至少有一个构造器
-
默认构造器的修饰符与所属类的修饰符一致
-
一旦显式定义了构造器,则系统不再提供默认构造器
-
一个类可以创建多个重载的构造器
-
父类的构造器不可被子类继承
⑦类的属性赋值的顺序
//系统根据这个属性的类型来设置默认值。
private int age;
//显示初始化
private int age = 6;
//构造器初始化
public Person(int age) {
this.age = age;
}
//调用方法或直接给属性赋值
person.setAge(5);
JavaBean
①实际项目开发中用到的类
-
JavaBean
-
用来描述现实世界中的具体数据:Book、Employee、Department、Product、……
-
也有其他名称:domain(领域模型)、POJO(Plain old Java Object普通的传统的Java对象)、entity(实体类)
-
-
功能性组件:用来执行具体代码逻辑对应的操作(Javaweb中常见)
-
BookServlet
-
BookService
-
BookDao
-
-
工具类:通常用来把某个特定操作封装到工具方法中。工具类通常是用类名来直接调用方法。
-
Aarrys.sort()
-
②JavaBean的要求
必须有的组成部分:
-
私有的属性
-
针对私有属性设置的公共的getter()、setter()方法
-
无参构造器
③getter()和setter()方法的规则
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
规则描述如下:
-
getXxx()或setXxx()方法取方法名字符串
-
去掉get或set(剩下Xxx)
-
Xxx首字母小写
this关键字
①含义
-
类的方法中:代表调用当前方法的对象
-
类的构造器中:代表当前构造器正在创建的对象
②this能干什么
//[1]调用属性
System.out.println("我的年龄:" + this.age);
System.out.println("我的姓名:" + this.soldierName);
System.out.println("我的武器:" + this.weapon);
//[2]调用方法
System.out.println("我的性别:" + this.getGender());
//[3]调用构造器
public class Tiger {
private String tigerName;
private int tigerAge;
public Tiger() {
System.out.println("这里是Tiger类的无参构造器");
}
public Tiger(String tigerName) {
this();
this.tigerName = tigerName;
System.out.println("这里是Tiger类的一参构造器");
}
public Tiger(String tigerName, int tigerAge) {
this("aaa");
this.tigerName = tigerName;
this.tigerAge = tigerAge;
System.out.println("这里是Tiger类的两参构造器");
}
}
[4] this调用构造器的规则
-
在构造器中调用其他构造器,this()语句必须在第一行
-
各个构造器之间调用不能形成闭环
package关键字
用来声明当前类所在的包。package声明所在包的语句必须是在类的第一行。若缺省该语句,则指定为无名包。
import关键字
在JDK编译Java源程序的时候,并不能保证所有的类都能够被JDK默认识别到。JDK无法默认识别的类就需要我们通过import语句导入。
语法规则:
-
使用的位置:在package声明和类声明之间
-
如果导入的类或接口是java.lang包下的,或者是当前包下的,则可以省略此import语句。
-
如果导入一个类之后,又需要用到另一个同名的类,那么就需要使用全类名来引用
-
如果已经导入java.a包下的类。那么如果需要使用a包的子包下的类的话,仍然需要导入。
-
import static组合的使用:静态导入。让当前类可以直接调用导入的类中的静态属性或方法,不必写类名了。