Java初识方法

5.初识方法

方法就是一段代码片段,这个片段可以完成特定的功能,并且可以重复利用。

5.1 方法的定义

5.1.1方法的定义格式

[方法修饰列表] 返回值类型 方法名(方法参数列表){

方法体

}

①方法修饰列表

是可选项,方法的修饰符可以包括:public,protected,private,abstract,static, final,synchronized,其中public,protected,private 不能同时存在。

②返回值类型

如果没有返回值使用void 关键字,如果存在返回值可以是基本类型和引用类型;如果存在返回值,必须使用 return语句,return语句后面不能再执行语句,因为不可能会执行到,编译会发生错误。

③方法名:任意合法的标识符。

④方法参数列表

参数列表可以有多个,也可以没有参数。如:method1(int a,int b),多个采用逗号分割。

5.1.2普通方法示例


public class MethodTest02{

public static void main(String[] args){ //入口

//在main方法中对sumInt方法进行调用,完成功能.

//注意:加有static的方法,调用的时候必须采用“类名.”的方式调用。

MethodTest02.sumInt(10,20);

MethodTest02.sumInt(50,100); //调用

}

//定义方法,完成两个整数的求和。

//注意:目前所有的方法请定义成public static .

public static void sumInt(int a,int b){

int c = a + b;

System.out.println(a + "+" + b +"=" +c);

}

}


public class MethodTest03{

public static void main(String[] args){ //入口

//方法调用.

MethodTest03.println("Hello World"); //"Hello World" 是实际参数(实参)

//方法调用

MethodTest03.m1(13,15);

MethodTest03.m2();

//调用m3

int retValue = MethodTest03.m3(100,200);

System.out.println("计算结果是:"+retValue);}

//方法的定义

//方法的形式参数列表中起决定性作用的是参数的类型。

    //参数的名字(局部变量的名字)是随意的只要是合法的标识符即可。

public static void println(String msg){ //String msg 是形式参数列表(形参)

System.out.println(msg);

}

public static void m1(int a,int b){

System.out.println(a+"+"+b+"="+(a+b));

}

public static void m2(){

System.out.println("呵呵");

}

//该方法有返回值,程序必须使用return语句返回值。

public static int m3(int a,int b){

int c = a + b;

return c; //程序执行到此处m3方法执行结束。并返回值c

//return语句下面不能再有其他代码,因为根本无法执行到。

//System.out.println("ABC"); //编译无法通过。

}

}


public class MethodTest04{

//入口

public static void main(String[] args){

A.m1();

//Error:在当前类中没有m1方法.

//m1();

MethodTest04.m2();

//前提:在当前类中.

       //类名. 可以省略

m2();

}

public static void m2(){

System.out.println("m2.....");

}

}

class A{

public static void m1(){

System.out.println("A‘s m1 method invoke!");

}

}


public class MethodTest06{

public static void main(String[] args){

m1(0);

System.out.println("ABC");

//以下程序编译可以通过。(程序分编译期和运行期,编译期只看语法不运算)

if(true){

return;

}

System.out.println("bjpowernode");

}

5.2方法的重载(overload)

5.2.1重载的条件:

①方法名相同

②方法的参数类型,个数,顺序至少有一个不同

③方法的返回类型可以不同(不依靠返回类型来区分重载)

④方法的修饰符可以不同,因为方法重载和修饰符没有任何关系

⑤方法重载只出现在同一个类中

5.2.2重载的优点:

①程序员只需要记忆很少的方法名,方便调用

②代码更加美观。


public class MethodTest08{

//入口

public static void main(String[] args){

//对于程序来说需要记忆1个方法名.

System.out.println(Compute.sum(10,20));

System.out.println(Compute.sum(1.0,2.0));

System.out.println(Compute.sum(10L,20L));

}

//以下都构成方法重载

public static void m1(int a){}

public static void m1(double a){}

public static void m2(int a,int b){}

public static void m2(int a){}

public static void m3(int a,double b){}

public static void m3(double a,int b){}

//以下两个m4方法并没有构成重载.

       //方法重复。错误的。

//public static void m4(int a){}

//public static void m4(int b){}

//方法的重载和方法的返回值类型无关.

/*

public static void m5(){}

public static int m5(){

return 100;

}

*/

    //方法的重载和方法的修饰符列表无关

/*

static void m6(){}

public static void m6(){}

*/

}

class Compute{

public static int sum(int a,int b){

return a + b;

}

public static double sum(double a,double b){

return a + b;

}

public static long sum(long a,long b){

return a + b;

}

}

分析:System.out.println();这个println方法是否构成了方法的重载?

一个类中可以有多个main方法(要求与程序入口的main方法参数列表类型、个数或顺序不同),只不过是与程序入口的main方法构成了重载


public class MethodTest09{

public static void main(String[] args){

       //System.out SUN提供的PrintStream类型

              //printlnPrintStream类型的方法,该方法已经构成了重载。

System.out.println(10);

System.out.println(3.14);

System.out.println(true);

System.out.println(‘a‘);

System.out.println("Hello World!");

}

}

5.3 加深对方法的理解

5.3.1方法的执行原理

①方法在调用的时候,才会给该方法在内存中分配空间;如果这个方法只是定义没有调用,则不会在内存中分配空间。

②方法在调用的时候在“栈”中分配空间。(JVM内存中有一块内存是栈内存。)

③方法调用其实就是“压栈(push)”,方法结束其实就是“弹栈(pop)”。

5.3.2 栈的结构

原文地址:https://www.cnblogs.com/superjishere/p/11780480.html

时间: 2024-10-13 08:41:07

Java初识方法的相关文章

JAVA 初识类加载机制 第13节

JAVA 初识类加载机制 第13节 从这章开始,我们就进入虚拟机类加载机制的学习了.那么什么是类加载呢?当我们写完一个Java类的时候,并不是直接就可以运行的,它还要编译成.class文件,再由虚拟机解释给当前的操作系统去执行.这些过程都是我们看不见的,我们能看见的也就是一个.class文件.既然虚拟机要解释这些.class文件给当前的操作系统听,那么他怎么获得这些.class文件呢?虚拟机获得这些.class文件的过程就是类加载了. 所以,总结来说就是:虚拟机将.class文件从磁盘或者其他地

java中方法调用

JAVA中方法的调用[基础] 一.调用本类中的方法 方法一.被调用方法声明为static ,可以在其他方法中直接调用.示例代码如下: public class HelloWord { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String str="HelloWord!"; int a=0; int b=a+1; int result=

从java main方法说开去

刚刚接触java语言时,接触的便为一个java main方法.我们知道这样程序就可以运行了,但是程序是怎么运行起来的我们却不知道. 众所周知,当执行一个java程序时,首先会启动一个JVM虚拟机进程,当程序执行完时,JVM进程则消亡.其他导致JVM进程消亡的还有以下情况: System.exit(int)方法,执行该方法时,虚拟机腿粗好.int参数为状态码,为0时,正常退出:若不为0,则异常退出. 遇到异常或错误时.若在程序过程中遇到异常时,不作处理会一直抛出异常到main函数,若main函数也

Java变量方法初始化顺序

面试的时候,经常会遇到这样的考题:给你两个类的代码,它们之间是继承的关系,每个类里只有构造器方法和一些变量, 构造器里可能还有一段代码对变量值进行了某种运算,另外还有一些将变量值输出到控制台的代码,然后让我们判断输出的结果.这实际上是在考查我们对于继承情况下类的初始化顺序的了解. 我们大家都知道,对于静态变量.静态初始化块.变量.初始化块.构造器,它们的初始化顺序以此是 (静态变量.静态初始化块)>(变量.初始化块)>构造器. 我们也可以通过下面的测试代码来验证这一点: 父类--静态变量 父类

Java的方法参数-想想挺有趣的问题

一直认为Java的方法参数都是传递值,调用后对本身不影响. Java不存在C/C++中的指针,在快速排序中,传入的数组,却发生了值的改变.由此引发的思考: //为方便举例,以下为部分快速排序伪代码 传入的数组,在递归中,数组值被操作. void quickSort(int s[], int l, int r){ if (l < r){ quickSort(s, l, i - 1); quickSort(s, i + 1, r); } } 结论:Java方法参数中传递的是值,在参数是引用类型(如数

07 java main方法

1.问题:Java main方法为什么是  public static void main(String[] args)??? 序号 场景 编译 运行 解释 1 public修改为private protected或者去掉 正常 Main Method not public 只有当main方法在公有级别上时才对JVM可见,所以需要使用public修饰 2 去掉static Exception in thread "main" java.lang.NoSuchMethodError:ma

RMI - Java远程方法调用

一.入门篇 Java RMI指的是远程方法调用(Remote Method Invocation). 它是一种机制, 能够让不同操作系统之间程序实现方法调用. 比如: 一台电脑上的Java程序可以通过RMI调用另一台电脑上的方法(EJB底层就是使用RMI). 二.RMI和webservice RMI是在TCP协议上传递可序列化的Java对象, 只能用在Java虚拟机上, 客户端和服务端必须都是Java. webservice是在http协议上传递xml文件, 它与语言和平台无关, 可以在异构系统

几种任务调度的 Java 实现方法与比较

几种任务调度的 Java 实现方法与比较 综观目前的 Web 应用,多数应用都具备任务调度的功能.本文由浅入深介绍了几种任务调度的 Java 实现方法,包括 Timer,Scheduler, Quartz 以及 JCron Tab,并对其优缺点进行比较,目的在于给需要开发任务调度的程序员提供有价值的参考. 前言 任务调度是指基于给定时间点,给定时间间隔或者给定执行次数自动执行任务.本文由浅入深介绍四种任务调度的 Java 实现: Timer ScheduledExecutor 开源工具包 Qua

java中方法的重载与重写的区别

JAVA中方法的重载与重写 1)  方法的的参数上看:重载后的方法与源方法在参数的类型以参数列表的顺序上会发生改变,而重写后的方法在参数的数据类型与参数列表的顺序不会发生改变 2)原方法是否对被覆盖:重载后的方法不会覆盖原方法,而重写后的方法会覆盖父类中的方法,调用时也只会调用重写后的方法. 3)调用方法的对象上:重载后的方法被调用时,调用对象不同时,调用的方法不同,产生的结果也不同:而重写后的方法被调用时,无论调用的对象是父类或者子类的对象,调用的方法相同,产生的结果也一样