总结
对于面试还是要好好准备的,尤其是有些问题还是很容易挖坑的,例如你为什么离开现在的公司(你当然不应该抱怨现在的公司有哪些不好的地方,更多的应该表明自己想要寻找更好的发展机会,自己的一些现实因素,比如对于我而言是现在应聘的公司离自己的家更近,又或者是自己工作到达了迷茫期,想跳出迷茫期等等)
Java面试精选题、架构实战文档
整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~
你的支持,我的动力;祝各位前程似锦,offer不断!
-
4.2 引用类型的传值
-
5. 可变参数
-
6. 方法重载
-
- 6.1 自定义方法的重载
-
6.2 JDK 中的方法重载
-
7. 小结
======================================================================
什么是方法、如何自定义方法,并按照分类介绍每种方法的特点,对于有参数的方法传值,会讲到基本数据类型作为方法参数和引用数据类型作为方法参数的区别。也会学习可变参数方法的定义语法和使用场景,方法重载的使用和意义也是本节的重点学习内容。
在前面我们已经了解过方法的概念,Java 程序的入口main()
就是一个方法。System.out.println();
语句中println()
也是一个方法。
IntelliJ IDEA
查看代码,可以使用Ctrl
+ 鼠标左键单击代码中的 println()
方法,查看 JDK 源码中对于这个方法的定义:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0SsCpKnb-1629443164258)(E:\Typora\Image\image-20210817164430921.png)]
上面的截图就是我们经常调用的老朋友println()
方法的代码实现,我们可以将方法理解为一个命名语句块,通过其名称 + 括号运算符()
可以调用。我们可以将需要重复编写的代码,封装到一个方法中。提高代码的复用性。
在 Java 中,定义一个方法的语法为:
访问修饰符 返回类型 方法名(参数列表) {
若干语句;
return 方法返回值;
}
代码块1234
-
访问修饰符有 4 种情况:
public
、private
、protected
,也可以省略(default
)。 -
返回类型:可以是任何的数据类型或
void
,如果方法没有返回值,返回类型设置为void
; -
方法名:方法名的命名规范和变量相同;
-
参数列表:参数是变量的一种类型,参数变量的作用域在方法内部;
-
方法体:方法内部的一些语句。当方法返回值为
void
时,可以省略return
语句。
根据方法是否带有参数、是否有返回值,可以分为 4 类:
-
无参无返回值方法
-
无参带返回值方法
-
带参数无返回值方法
-
带参数带返回值方法
3.1 无参无返回值方法
无参无返回值方法,即参数列表为空,返回值为void
的方法。例如,我们经常需要输出一段内容。可以将输出语句封装到方法中:
class MethodDemo1 {
// 定义无参无返回值方法
public void printText() {
// 三条输出语句
System.out.println(“C”);
System.out.println(“Java”);
System.out.println(“Python”);
}
}
上面代码,在类MethodDemo1
中定义了一个方法printText
,其中有一些打印语句。那么如何调用这个方法,让其执行呢?
对于非静态方法(即非static
关键字修饰的方法),首先要使用new
关键字实例化类,生成一个对象,再通过对象名.方法名()
的方式去调动方法。
如下是 MethodDemo1 类方法调用的实例:
实例演示
class MethodDemo1 {
// 定义无参无返回值方法
public void printText() {
// 三条输出语句
System.out.println(“C”);
System.out.println(“Java”);
System.out.println(“Python”);
}
public static void main(String[] args) {
// 实例化MethodDemo1类
MethodDemo1 testDemo = new MethodDemo1();
// 调用printText方法
methodDemo1.printText();
}
}
Tips:由于我们还没有学习面向对象,此处对于对象的实例化,先记住这种固定写法即可。
3.2 无参带返回值方法
无参带返回值方法,即参数列表为空,返回值不为void
的方法,方法体内部要使用return
语句返回其声明的返回类型。
我们来自定义一个返回Hello World!
字符串的方法:
实例演示
class MethodDemo2 {
// 定义无参带返回值方法
public String getHelloStr() {
// 初始化变量str
String str = “Hello World”;
// 返回str
return str;
}
public static void main(String[] args) {
// 实例化MethodDemo2
MethodDemo2 methodDemo2 = new MethodDemo2();
// 调用getStr方法,并且使用result变量接收返回值
String result = methodDemo2.getHelloStr();
// 打印返回值
System.out.println(result);
}
}
运行结果:
Hello World
3.3 带参数无返回值方法
带参数无返回值方法,即带有参数列表,返回值为void
的方法。
参数列表可能有一个或多个参数,多个参数使用逗号(,
)隔开。定义方式为:DataType 参数名1, DataType 参数名2
,DateType 为参数的类型。
下面是一个根据长和宽求长方形面积的方法实例:
实例演示
package com.caq.method;
public class TestDemo {
public static void main(String[] args) {
TestDemo test = new TestDemo();
test.pristr(1.22f,3.8f);
}
public void pristr(float width, float height){
float cube = width * height;
System.out.println(cube);
}
}
运行结果:
长方形面积为:246.0
长方形面积为:25.5
3.3.1 传参方式
在调用带参数方法时,有两种传参方式:
- 先初始化变量,再将变量传递给方法:
float a = 12.3f;
float b = 20f;
methodDemo3.printArea(a, b);
- 直接传入对应类型字面量:
methodDemo3.printArea(10.2f, 2.5f);
当调用方把参数传递给方法时,调用时传递的值会按参数位置一一绑定,这也比较符合我们正常的思维逻辑。因此,对于有多个参数的方法,一定要注意每个参数的位置。
3.4 带参数带返回值方法
package com.caq.method;public class TestDemo { public static void main(String[] args) { TestDemo test = new TestDemo(); int a = test.pristr(5); System.out.println(a); } public int pristr(int n){ int sum = 0; for (int i = 0; i < n; i++) { sum += i*i; } return sum; }}
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0Pyl12oT-1629443164261)(E:\Typora\Image\image-20210817173421155.png)]
上面有参方法的例子,参数都是简单的基本数据类型,当参数为数组时,我们再来看一个实例:
package com.caq.method;import com.caq.exception.Test;public class TestDemo { public boolean meetArray(int[] a,int element) { boolean b = false; for (int v : a) { if (v == element) { b = true; break; } } return b; } public static void main(String[] args) { TestDemo testDemo = new TestDemo(); int[] intArray = {1,2,3,7,5}; int element = 5; boolean meetArray = testDemo.meetArray(intArray,element); System.out.println(meetArray); }}
代码解析:
上述代码定义了一个查找数组中是否包含指定元素的方法,它将数组和指定元素作为方法参数,并且返回了一个布尔型的结果,方法体内部首先声明了一个待返回的布尔变量,默认为false
,然后对数组参数进行迭代,只要找到与元素参数相同的元素,即更新返回变量为true
,跳出循环;如果数组迭代完成后依旧未找到指定的元素,那么待返回变量依然是false
,最后返回这个变量。在方法调用时,以一个布尔变量来接收结果,后续代码根据这个布尔变量做了逻辑判断,以执行不同的语句块。
调用方和方法之间有参数的传递时,要注意方法传值问题。
4.1 基本类型的传值
基本数据类型指的是简单的数据段,引用数据类型指的是有多个值构成的对象。
基本类型参数的传递,是调用方值的复制。双方各自的后续修改,互不影响。简单来讲,方法内部对参数变量的任何操作,都不会影响到方法外部的变量。
我们看一个实例:
实例演示
class Car { public void speedUp(int speed) { System.out.println(“小汽车加速前,速度为:” + speed); speed ++; System.out.println(“小汽车加速后,速度为:” + speed); } public static void main(String[] args) { // 定义小汽车初始速度变量 int speed = 10; // 实例化Car类,创建一个car对象 Car car = new Car(); // 调用car对象下的speed方法 car.speedUp(speed); // 打印调用方法后速度参数的值 System.out.println(“调用speedUp方法后,调用方的speed参数为:” + speed); }}
运行结果:
小汽车加速前,速度为:10小汽车加速后,速度为:11调用speedUp方法后,调用方的speed参数为:10代码块123
我们根据输出的结果验证了以上给出的结论。整型参数speed
是一个基本数据类型,在speedUp
方法内部进行了自增,但主方法中的speed
变量的值并不会受到其影响。
4.2 引用类型的传值
结语
小编也是很有感触,如果一直都是在中小公司,没有接触过大型的互联网架构设计的话,只靠自己看书去提升可能一辈子都很难达到高级架构师的技术和认知高度。向厉害的人去学习是最有效减少时间摸索、精力浪费的方式。
我们选择的这个行业就一直要持续的学习,又很吃青春饭。
虽然大家可能经常见到说程序员年薪几十万,但这样的人毕竟不是大部份,要么是有名校光环,要么是在阿里华为这样的大企业。年龄一大,更有可能被裁。
送给每一位想学习Java小伙伴,用来提升自己。
本文到这里就结束了,喜欢的朋友可以帮忙点赞和评论一下,感谢支持!
会受到其影响。
4.2 引用类型的传值
结语
小编也是很有感触,如果一直都是在中小公司,没有接触过大型的互联网架构设计的话,只靠自己看书去提升可能一辈子都很难达到高级架构师的技术和认知高度。向厉害的人去学习是最有效减少时间摸索、精力浪费的方式。
我们选择的这个行业就一直要持续的学习,又很吃青春饭。
虽然大家可能经常见到说程序员年薪几十万,但这样的人毕竟不是大部份,要么是有名校光环,要么是在阿里华为这样的大企业。年龄一大,更有可能被裁。
送给每一位想学习Java小伙伴,用来提升自己。
[外链图片转存中…(img-e8IV6kZl-1714888621823)]
本文到这里就结束了,喜欢的朋友可以帮忙点赞和评论一下,感谢支持!