Java方法
什么是方法
简述:我们通常将Java中的方法理解为完成一个特定功能的一段代码。在Java开发中通常用于重复使用性的代码段、具备特殊功能的代码段、提升代码整体的可读性。
定义:修饰符1 修饰符2 数据类型 方法名(参数列表){}
其中修饰符1修饰符2皆是可选的 数据类型为必选(可以是无返回值的) 方法名为自定义的标识符 参数列表不限制数据类型、长度、是否含有参数列表
示例:public static void main(String[] args) {}
以主函数为例进行简述:
```java
public static void main(String[] args) {
//主方法 也是一个方法
}
```
➧public :是方法的修饰符,控制了方法的使用范围为最大的(公开的)
➧static:表示该方法是一个静态方法,属于类,不属于对象,可以直接使用类名访问(类方法、全局方法)
➧void:表示该方法没有返回值,有返回值的方法需要在方法体中使用return关键字返回具体的值
➧main:表示方法名称。
➧String[] args:表示使用该方法的时候需要传递参数,在这里参数是String类型的数组,args 表示参数(形参)的名称。
➧形参:在定义方法时候指定的参数名称叫做形式参数。
注意:主方法是我们现在程序的入口,主方法为特殊定义的方法不能进行任何修改。
方法的分类及调用
Java方法可以分为无参、有参。无返回值、有返回值。如果非要对其进行分类 那么进行简单的排列组合可以有四种分类。无参无返回值方法、无参有返回值方法、有参无返回值方法、有参有返回值方法。
无参方法
简述:无参方法可以简单的理解为在方法调用的过程中不传递参数给予方法使用
定义:public static 数据类型/void 方法名() {}
调用:方法名();
即可执行方法内的语句
无参无返回值
定义:public static void 方法名() {}
这就是一个无参方法
示例:设置一个打印输出的函数 用于打印小明和小红的身份信息
//方法的定义
public static void show() {
System.out.println("小明、年龄22、性别男、爱好吃饭");
System.out.println("小红、年龄22、性别女、爱好喝水");
}
//方法的调用
public class Mod {
public static void main(String[] args) {
show();
}
public static void show() {
System.out.println("小明、年龄22、性别男、爱好吃饭");
System.out.println("小红、年龄22、性别女、爱好喝水");
}
}
//控制台输出
//比较另类的理解(现实不是这样的)
在调用无参方法时可以理解为将方法内的语句写到主方法中
public class Mod {
public static void main(String[] args) {
// show();
System.out.println("小明、年龄22、性别男、爱好吃饭");
System.out.println("小红、年龄22、性别女、爱好喝水");
}
public static void show() {
System.out.println("小明、年龄22、性别男、爱好吃饭");
System.out.println("小红、年龄22、性别女、爱好喝水");
}
}
无参有返回值
简述:返回值指的是方法在执行结束后会返回一个对应数据类型的数据给方法可以将其理解为一个具有数据的不变量 可以参与赋值与运算
定义:public static 数据类型 方法名() {}
数据类型可以是基本数据类型 也可以是引用数据类型
示例:将所需要打印的小明的身份信息 返回一个输入的字符串
//方法的定义
//将所需要打印的小明的身份信息 返回为一个字符串
public static String showStr() {
return "小明、年龄22、性别男、爱好吃饭";
}
//方法的调用
public static void main(String[] args) {
showStr();
String Str = null;
Str = showStr()+"可以参与赋值与运算";
System.out.println(showStr());
System.out.println(Str);
}
控制台输出
//注意 有返回值方法无论是参与运算还是被打印输出都是需要执行方法内部的语句的
修改后的方法
public static String showStr() {
System.out.println("我被执行了!!!");
return "小明、年龄22、性别男、爱好吃饭";
}
//完整
package com.xxxx.xxxx;
import java.util.Scanner;
public class Mod {
public static void main(String[] args) {
showStr();
String Str = null;
Str = showStr()+"可以参与赋值与运算";
System.out.println(showStr());
System.out.println(Str);
}
//将所需要打印的小明的身份信息 返回为一个字符串
public static String showStr() {
System.out.println("我被执行了!!!");
return "小明、年龄22、性别男、爱好吃饭";
}
}
控制台输出
有参方法
有参无返回值
简述:参数是指在方法运行前对方法内的形式参数进行数据赋值 使方法具有更高的复用性
定义:public static void 方法名(参数列表){}
参数列表不限制数据类型 参数数量
示例:打印三个数的最大值
//定义方法
public static void max(double num1,double num2 ,double num3) {
double max=0;
if(num1>max) {
max=num1;
}
if(num2>max) {
max=num2;
}
if(num3>max) {
max=num3;
}
System.out.println("max:"+max);
}
//方法调用
public static void main(String[] args) {
double a=5.8,b=10.7,c=10.6;
max(a, b, c);
}
//控制台输出
有参有返回值
简述:具有返回值
定义:public stati![在这里插入图片描述](https://img-blog.csdnimg.cn/20210324224423806.png#pic_center) c 数据类型 方法名(参数列表){}
示例:返回三个数的和
//定义方法
public static double sum(double num1,double num2 ,double num3) {
return num1+num2+num3;
}
//方法调用
public static void main(String[] args) {
double a=5.8,b=10.7,c=10.6;
max(a, b, c);
System.out.println("sum:"+sum(a, b, c));
}
//控制台输出
注意事项
❥方法内部不能定义方法
❥方法内部可以调用其他的方法
❥形式参数和实际赋值的参数标识符不需要一致 为了方便代码的阅读通常形参和实参的变量标识符为一致的
❥传递参数的类型需要严格对应定义的参数列表的顺序
Java修饰符简述(方法修饰)
Java语言中为我们提供了很多修饰符 主要作用是设置方法访问权限、对方法的属性进行设置。
修饰符可以分为访问控制修饰符和非访问控制修饰符。
访问控制修饰符
简述:访问控制修饰符的作用是对方法的访问权限进行设置 比如公共方法public 便可以被所有类访问
Java种为方法共提供了四种控制访问修饰符 公开(public),受保护(protected),默认,私有(private)
❣ public:共有访问。对所有的类都可见。
❣ protected:保护型访问。对同一个包可见,对不同的包的子类可见。
❣ 默认:默认访问权限。只对同一个包可见,注意对不同的包的子类不可见。
❣ private:私有访问。只对类自身可见。
非访问控制修饰符
简述:通过使用修饰符对方法进行特定的限制
Java为方法提供了下面常用的修饰符(包括但不限于) 抽象方法控制符abstract 、静态方法控制符static 、最终方法控制符final 、本地方法控制符native 、同步方法控制符synchronized 、轻量级的同步机制volatile
❣ abstract修饰符 是抽象的意思。修饰方法后,该方法为抽象方法必须被子类重写(override)。
❣ static修饰符 表示“全局”或者“静态”的意思。静态方法不依赖于任何对象就可以进行访问,它不依附于任何对象。在静态方法中不能访问类的非静态成员变量和非静态成员方法,因为非静态成员方法、变量都是必须依赖具体的对象才能够被调用。
❣ final修饰符 意思是不可变。用final关键字修饰方法,它表示该方法不能被覆盖。将方法锁定,防止任何继承类修改它的意义和实现。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。
❣ native修饰符 说明其修饰的方法是一个原生态方法,方法对应的实现不是在当前文件,而是在用其他语言(如C和C++)实现的文件中。Java语言本身不能对操作系统底层进行访问和操作,但是可以通过JNI接口调用其他语言来实现对底层的访问。
❣ synchronized修饰符 该修饰符主要用于多线程程序中的协调和同步。
❣ volatile修饰符 是Java提供的一种轻量级的同步机制。同synchronized相比(synchronized通常称为重量级锁)。
方法的重载
简述:在类中可以定义同名方法 但是其参数列表需要不同(参数类型、个数、顺序)可以理解为定了了方法名相同的不同方法 在开发中常用于具有多种参数传递的方法 比如 计算三角形的面积 可以传递3条边长参数 也可以传递2个长和宽的参数
定义:发生在同一个类中,方法名相同 参数列表不同(形参个数 顺序 类型) 与返回类无关
示例: 计算三角形的面积
//方法的定义 定义三个同名的方法
//无参无返回值
public static void triangleArea() {
System.out.println("请输入三角形的三条边长:");
double length[] = new double[3];
for(int i = 0;i<3;i++) {
System.out.println("请输入三角形的第"+(i+1)+"条边长");
length[i] = scanner.nextDouble();
}
//判断输入是否能够构成三角形
if(length[0]+length[1]<length[2] || length[0]+length[2]<length[1] || length[1]+length[2]<length[0]){
System.out.println("你输入数据的不能构成三角形");
return ;
}
double area=0,p=0;
//三角形的面积公式
p= (length[0]+length[1]+length[2])/2;
area = Math.sqrt (p*(p-length[0])*(p-length[1])*(p-length[2]));
System.out.println("三角形的面积为:"+area);
}
//有参无返回值
public static void triangleArea(double a,double b,double c) {
//判断输入是否能够构成三角形
if(a+b<c || a+c<b || b+c<a){
System.out.println("你输入数据的不能构成三角形");
return ;
}
double area=0,p=0;
p= (a+b+c)/2;
area = Math.sqrt (p*(p-a)*(p-b)*(p-c));
System.out.println("三角形的面积为:"+area);
}
//有参有返回值
public static double triangleArea(double length,double high) {
return length*high*0.5;
}
//方法的调用
public static void main(String[] args) {
//调用无参无返回值
triangleArea();
//调用有参无返回值
triangleArea(6,8,10);
//调用有参有返回值
System.out.println(triangleArea(6.7,8.6));
}
//控制台输出
//完整代码
package com.qingsu.basis;
import java.util.Scanner;
import java.lang.Math;
public class Mod {
static Scanner scanner = new Scanner(System.in);
public static void main(String[] args) {
//调用无参无返回值
triangleArea();
//调用有参无返回值
triangleArea(6,8,10);
//调用有参有返回值
System.out.println(triangleArea(6.7,8.6));
}
//无参无返回值
public static void triangleArea() {
System.out.println("请输入三角形的三条边长:");
double length[] = new double[3];
for(int i = 0;i<3;i++) {
System.out.println("请输入三角形的第"+(i+1)+"条边长");
length[i] = scanner.nextDouble();
}
//判断输入是否能够构成三角形
if(length[0]+length[1]<length[2] || length[0]+length[2]<length[1] || length[1]+length[2]<length[0]){
System.out.println("你输入数据的不能构成三角形");
return ;
}
double area=0,p=0;
//三角形的面积公式
p= (length[0]+length[1]+length[2])/2;
area = Math.sqrt (p*(p-length[0])*(p-length[1])*(p-length[2]));
System.out.println("三角形的面积为:"+area);
}
//有参无返回值
public static void triangleArea(double a,double b,double c) {
//判断输入是否能够构成三角形
if(a+b<c || a+c<b || b+c<a){
System.out.println("你输入数据的不能构成三角形");
return ;
}
double area=0,p=0;
p= (a+b+c)/2;
area = Math.sqrt (p*(p-a)*(p-b)*(p-c));
System.out.println("三角形的面积为:"+area);
}
//有参有返回值
public static double triangleArea(double length,double high) {
return length*high*0.5;
}
}
方法练习
实现对一个整形数组数据的冒泡排序 并返回排序结果
//方法的定义
//冒泡排序
public static int[] sort(int num[]){
int centerNum=0;
for (int i = 0; i < num.length-1; i++) {
for (int j = 0; j < num.length-i-1; j++) {
if (num[j]>num[j+1]) {
centerNum = num[j];
num[j] = num[j+1];
num[j+1] = centerNum;
}
}
}
return num;
}
//方法的调用
public static void main(String[] args) {
int num[] = {6,5,4,8,3,1,10};
for (int i = 0; i < sort(num).length; i++) {
System.out.print( sort(num)[i]+"\t");
}
}
//控制台输出
//完整代码
package com.qingsu.basis;
public class Mod {
public static void main(String[] args) {
int num[] = {6,5,4,8,3,1,10};
for (int i = 0; i < sort(num).length; i++) {
System.out.print( sort(num)[i]+"\t");
}
}
//冒泡排序
public static int[] sort(int num[]){
int centerNum=0;
for (int i = 0; i < num.length-1; i++) {
for (int j = 0; j < num.length-i-1; j++) {
if (num[j]>num[j+1]) {
centerNum = num[j];
num[j] = num[j+1];
num[j+1] = centerNum;
}
}
}
return num;
}
}
后记
诸位,很高兴你能看到这篇拙笔。我想你可能是在校的学生、也可能是自学编程的一员…… 能看到这篇文章说明你已经坚持学习到Java中方法部分、再往下也许就是Java语言的面向对象部分。仅对于Java语言而言,此时你已经掌握Java语言的小半。但对于Java开发者而言这些仅仅是开始。我不仅回想起两年前搜索如何搭建Java开发环境、如何打印输出一个Hello World!、什么是变量等等。前辈们的文章节约了我大量的学习时间、开拓了我的编程视野。在两年之后回想其学习编程的种种,便开始写一个文章以期能给后进者一些帮助。
我将这些文章称之为教程向回忆录,每每写起文章时我就在想我当时再学习的路上需要从百度搜索种得到些什么呢?放空自己,予以空杯心态写起这些也许更能同后进者产生共鸣!
那么为什么再方法这里写下这个小小的感悟呢?按照正常的学习计划Java基础的学习计划对于学生而言现在也许已经进入学期后期,马上就要迎来期末。此时你有大量的课程需要复习 高数 英语 概率 等等。而后续的面向对象、异常处理、多线程等等也不是拥有C语句基础便可以轻松掌握的学习难度的骤然增加和学习时间的紧张。导致大量的同学放弃了继续向下深入学习。引用一句名言“不知道命运赠送的礼物,早已在暗中标好了价格”。
这个决定往往是Java开发者和转行的分水岭,坚持下去便是通往成为程序开发者进入互联网行业的路。放弃或许从此就与软件开发分道扬镳。其实编程贵在坚持,后面的种种并不比此前难学、或者高深。希望诸位不要在此放弃,未来我们携手一起建设更美好的数字时代!
一定要尽力啊!