方法重载

一个类中存在多个同名方法,这些方法的形参类型或数量不同的现象称为方法重载。同名方法的返回值类型在判断是否构成重载时不予考虑。方法重载是支持多态的方式之一。

当调用同名方法时,Java 根据传入方法的实参类型、数量和顺序确定某个唯一精确匹配的方法,然后调用该方法;如果没有找到匹配的方法,Java 会将传入的实参进行自动类型转换,然后根据转换后的实参来精确匹配某一方法;如果此时仍然没有匹配的方法,则报错。

重载方法的目的是将需处理的数据类型不同,逻辑相同的多个方法命名为同一个方法,提供通用性。

重载构造器和重载其他方法没有本质区别。

深入了解参数传递

在 Java 中,只有按值传递。当传递一个类类型变量给方法形参时,是将该变量的值赋给了方法形参。该变量的值表示所引用对象的地址,即实参与形参同时引用这个对象,方法中通过形参进行的操作会影响到所引用的对象。

返回对象

在某个方法内创建对象并返回该对象时,如果对该对象的引用存在,即使该方法执行完毕后运行栈被回收,该对象依然存在。当该对象没有任何引用时,则会在垃圾回收执行时销毁,内存被回收。

介绍访问控制

public:修饰的成员可以被任何地方的代码访问。
private:修饰的成员只能被类中的方法访问。
无修饰符:成员默认为 package 级别,可以被同一个包中任意地方的代码访问。

理解 static

static 成员在类实例化之前可以被访问。当加载一个类时,该类中的 static 变量会初始化、static 块中的语句会执行。在类外访问 static 成员时,只需要通过 ClassName.member[()]([]表示里面的内容可选,具体根据成员是变量还是方法而定)的方式访问。一个类的所有实例共享同一个 static 变量。

介绍 final

final 修饰的变量表示该变量是常量,值不能被修改。final 变量在定义时赋初值或者在构造器中赋初值。
final 也可以修饰方法参数列表中的变量和局部变量。前一种方式目的是防止变量的值在方法中被修改。后一种方式目的是防止值被修改。

再访数组

数组是作为对象实现的。所有数组都有一个名为 length 的成员变量,用于记录当前数组中元素的个数。

介绍嵌入和内部类

在一个类中定义的类称为嵌入类。例如,在类 A 中定义一个类 B,此时 B 称为嵌入类。B 可以访问 A 中的成员,包括私有成员,而 A 不能访问 B 中的成员。
static 修饰的嵌入类不能直接访问包含它的类(外部类)中的非 static 成员,必须通过对象访问。
非 static 修饰的嵌入类称为内部类(inner class),内部类可以访问外部类中的所有成员。
内部类的实例只能在外部类的上下文(也就是外部类的作用域)中创建,否则编译器报错。

可以在方法中甚至 for 循环中定义嵌入类。

探究 String 类

所有字符串都是 String 类型的对象。String 对象不可修改。对应的 StringBufferStringBuilder 类型可以修改。

创建 String 对象最简单的方式为

String s = "abc";

使用 + 号可以连接两个 String 对象。
String 对象提供了 equals() 方法判断两个 String 对象是否相等(首先判断是否是同一个对象,如果不是同一个对象则判断内容是否相同)。
length() 方法获得对象中字符个数。
charAt() 方法获取指定索引位置的字符。

使用命令行参数

命令行参数从程序名后面第一个参数开始算起。

变长参数 varargs

// 表示 a 方法可以接收 0 或多个参数, v 隐式为 type[] 变量。
void a(type ... v)

当方法中有变长参数时,参数列表中可以有非变长参数,此时变长参数必须位于参数列表的最后面。当传参时,先按顺序匹配非变长参数,匹配完后,剩下的参数匹配变长参数。参数列表中只能存在一个变长参数。

具有变长参数的方法可以重载。

//  4 个重载方法
// 传入 int 实参数量大于等于 2 时调用
a(int ...v)
a(boolean ...v)
// 传入一个 int 实参时调用
a(int v)
a(String s, int ...v)
a(int ...v)
a(int n, int ...v)
// 产生二义性错误,变长参数可为空
a(1);

b(int ...v)
b(boolean ...v)
// 产生二义性错误,变长参数可为空
b();

参考

[1] Herbert Schildt, Java The Complete Reference 11th, 2019.

 posted on 2024-04-18 14:42  x-yun  阅读(3)  评论(0编辑  收藏  举报