重温经典《Thinking in java》第四版之第五章 初始化与清理(二十七)

本文涉及的产品
资源编排,不限时长
无影云电脑企业版,4核8GB 120小时 1个月
无影云电脑个人版,1个月黄金款+200核时
简介: 重温经典《Thinking in java》第四版之第五章 初始化与清理(二十七)

5.2 方法重载这一小节一上来讲了一个取名字的问题,放在计算机编程语言里面,就是相同的名字的方法或者函数可以表达多种不同的含义,他们被“重载”了。下面直接举一个包含构造器重载和普通方法重载的例子,更直观的对“重载”有个理解:

importstaticnet.mindview.util.Print.*; 
classTree { 
intheight; 
Tree() { 
print("Planting a seedling"); 
height=0; 
    } 
Tree(intinitialHeight) { 
height=initialHeight; 
print("Creating new Tree that is "+height+" feet tall"); 
    } 
voidinfo() { 
print("Tree is "+height+" feet tall"); 
    } 
voidinfo(Strings) { 
print(s+": Tree is "+height+" feet tall"); 
    } 
} 
publicclassOverloading { 
publicstaticvoidmain(String[] args) { 
for(inti=0; i<5; i++) { 
Treet=newTree(i); 
t.info(); 
t.info("overloaded method"); 
        } 
// Overloaded constructor: newTree(); 
    } 
}

/* Output:

Creating new Tree that is 0 feet tall

Tree is 0 feet tall

overloaded method: Tree is 0 feet tall

Creating new Tree that is 1 feet tall

Tree is 1 feet tall

overloaded method: Tree is 1 feet tall

Creating new Tree that is 2 feet tall

Tree is 2 feet tall

overloaded method: Tree is 2 feet tall

Creating new Tree that is 3 feet tall

Tree is 3 feet tall

overloaded method: Tree is 3 feet tall

Creating new Tree that is 4 feet tall

Tree is 4 feet tall

overloaded method: Tree is 4 feet tall

Planting a seedling

*///:~

创建Tree对象时,即可以不含参数,也可以用树的高度当参数。对于普通的方法也是一样的道理,info()是不显示额外的信息,inf(String)则可以显示额外的信息。你还可以定义更多的重载函数,比如info(String,String)等等。从这些直观的代码可以总结出一个规律:相同名字的方法,每个重载的方法都必须有独一无二参数类型列表。从这个规律大家是不是就明白了什么是重载,不用过多的去追求文字上的定义描述了。

下面提到了一种情况就是,虽然参数顺序的不同也足以区分两个方法,不过,一般不建议这么做,因为这么做没什么意义,更增加了代码的维护难度:

importstaticnet.mindview.util.Print.*; 
publicclassOverloadingOrder { 
staticvoidf(Strings, inti) { 
print("String: "+s+", int: "+i); 
    } 
staticvoidf(inti, Strings) { 
print("int: "+i+", String: "+s); 
    } 
publicstaticvoidmain(String[] args) { 
f("String first", 11); 
f(99, "Int first"); 
    } 
}

/* Output:

String: String first, int: 11

int: 99, String: Int first

*///:~

目录
相关文章
|
1月前
|
Java 编译器
java“变量 x 可能未被初始化”解决
在Java中,如果编译器检测到变量可能在使用前未被初始化,会报“变量 x 可能未被初始化”的错误。解决方法包括:1. 在声明变量时直接初始化;2. 确保所有可能的执行路径都能对变量进行初始化。
|
16天前
|
Java
Java 静态变量的初始化顺序
【10月更文挑战第15天】了解 Java 静态变量的初始化顺序对于正确编写和维护代码至关重要。通过深入理解初始化顺序的原理和细节,我们可以更好地避免潜在的问题,并提高代码的质量和可靠性。
|
1月前
|
Java 编译器
【一步一步了解Java系列】:子类继承以及代码块的初始化
【一步一步了解Java系列】:子类继承以及代码块的初始化
22 3
|
1月前
|
Java
java构造方法时对象初始化,实例化,参数赋值
java构造方法时对象初始化,实例化,参数赋值
47 1
|
3月前
|
安全 Java 关系型数据库
Java连接Mysql SSL初始化失败
Java连接Mysql SSL初始化失败
|
3月前
|
存储 Java
如何在 Java 中初始化二维 ArrayList
【8月更文挑战第23天】
90 1
|
3月前
|
存储 JavaScript Java
Java中未被初始化的字符串打印出“null”?
在Java中,未初始化的`String`变量默认值为`null`。打印此类变量时输出“null”,是因为`PrintStream`类中的`print`方法特别处理了`null`值,将其转换为字符串“null”。从JDK 17开始,`println`方法通过`String.valueOf`间接实现相同功能。当拼接包含`null`的字符串时,如`s1 + &quot;BLACK&quot;`,结果为“nullBLACK”,这是因为字符串构建过程中`StringBuilder`的`append`方法将`null`转换为“null”。
|
3月前
|
存储 Java 编译器
如何在 Java 中初始化对象 Arraylist?
【8月更文挑战第23天】
103 0
|
3月前
|
存储 Java 开发工具
【Azure Developer】VS Code运行Java 版Azure Storage SDK操作Blob (新建Container, 上传Blob文件,下载及清理)
【Azure Developer】VS Code运行Java 版Azure Storage SDK操作Blob (新建Container, 上传Blob文件,下载及清理)
|
3月前
|
Java Spring
Java SpringBoot Bean InitializingBean 项目初始化
Java SpringBoot Bean InitializingBean 项目初始化
53 0