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 栈的结构

Java初识方法的更多相关文章

  1. JAVA 初识类加载机制 第13节

    JAVA 初识类加载机制 第13节 从这章开始,我们就进入虚拟机类加载机制的学习了.那么什么是类加载呢?当我们写完一个Java类的时候,并不是直接就可以运行的,它还要编译成.class文件,再由虚拟机 ...

  2. java——初识

    java是现在最火的高级编程语言之一,功能强,应用广. java可以做什么? 1. 开发桌面应用程序 2. 开发面向Internet的应用程序 开发java程序的基本步骤: 1. 编写源程序:mypr ...

  3. Java初识与配置环境

    Java初识 Java简介 Java是一门面向对象的程序设计语言.功能强大并且简单易用,极好的实现了面向对象理论.允许程序以类似人类的思维方式进行复杂的编程. Java具有简单性.面向对象.分布式.健 ...

  4. 004 01 Android 零基础入门 01 Java基础语法 01 Java初识 04 Java程序的结构

    004 01 Android 零基础入门 01 Java基础语法 01 Java初识 04 Java程序的结构 Java程序的结构 Java程序外层--类 程序外层,如下面的代码,是一个类的定义. c ...

  5. 003 01 Android 零基础入门 01 Java基础语法 01 Java初识 03 Java程序的执行流程

    003 01 Android 零基础入门 01 Java基础语法 01 Java初识 03 Java程序的执行流程 Java程序长啥样? 首先编写一个Java程序 记事本编写程序 打开记事本 1.wi ...

  6. 001 01 Android 零基础入门 01 Java基础语法 01 Java初识 01 导学

    001 01 Android 零基础入门 01 Java基础语法 01 Java初识 01 导学 welcome to Java World 欢迎来到Java世界 一起领略Java编程世界的奥秘与奥妙 ...

  7. Java:方法的参数是传值还是传引用

    Java中方法的参数总是采用传值的方式. 下列方法欲实现对象的交换,但实际上是不能实现的. public void swap(simpleClass a,simpleClass b){ simpleC ...

  8. Java之方法重载篇(我重载了,你要如何来调用我。。)

      一.课前引言 请看一下代码,你发现什么特殊之处了吗? public class MethodOverload { public static void main(String[] args) { ...

  9. effective java —— 终结方法守卫者

    目录: effective java —— 终结方法守卫者 effective java 第2章:创建和销毁对象.第7条 : 避免使用终结方法.最后的“终结方法守卫者 (finalizer guard ...

随机推荐

  1. Ubuntu下串口工具

    一.Kermit 1.安装: sudo apt-get install ckermit 2.配置: sudo gedit /etc/kermit/kermrc 3.在文件末端添加如下内容 : set ...

  2. C++中的delete加深认识

    delete操作: 我们在删除一个指针之后,编译器只会释放该指针所指向的内存空间,而不会删除这个指针本身. 1.假如你不去释放,那么该区域的内存始终不能被其他数据所使用.2.指向该内存的指针是个局部变 ...

  3. 【JavaWeb项目】一个众筹网站的开发(五)后台用户登录功能

    用户模块 1)注册 表单校验,使用校验插件 用户密码需要加密存储 注册成功后来到管理控制台,将用户放在session中,防止以后获取 以后用户经常获取用户id,使用mabatis主键自增策略,保存用户 ...

  4. 阿里云智能推荐AIRec产品介绍

    一.智能推荐(AIRec)简介 AIRec背景介绍 智能推荐(简称AIRec)基于阿里巴巴集团领先的大数据和人工智能技术,结合阿里巴巴在电商.内容.新闻.视频直播和社交等多个行业领域的积累,为全球企业 ...

  5. SCP-bzoj-1054

    项目编号:bzoj-1054 项目等级:Safe 项目描述: 戳这里 特殊收容措施: 直接状压BFS即可,我实现的比较渣..复杂度O(45*216). 附录: #include <bits/st ...

  6. 思维构造+匹配——cf1199E

    直接枚举每条边,如果边加到图中后还是个匹配图,就直接加,反之就不加 这样加完所有边后,剩下的点必定可以组成一个独立集:因为如果剩下的点中还有互相匹配的,那么这对点应该在加边时就被算到匹配图中 所以要么 ...

  7. Redis Cluster集群详介绍和伪集群搭建

    1 什么是Redis-Cluster 为何要搭建Redis集群.Redis是在内存中保存数据的,而我们的电脑一般内存都不大,这也就意味着Redis不适合存储大数据,适合存储大数据的是Hadoop生态系 ...

  8. Vue中时间的设置

    设置默认属性ct_month: null 方法: //默认显示今天getdatatime(){ this.ct_month= new Date(); }, //默认显示昨天getdatatime(){ ...

  9. (1)Redis 基本类型

    https://redis.io/ http://redisdoc.com/  中文 一. 库 redis默认16个库,0-15.默认端口号 6379 使用某个库  测试服务器是否连通 ping // ...

  10. 使用FTPClient实现文件上传服务器

    import ch.qos.logback.classic.Logger; import org.apache.commons.net.ftp.*; import org.slf4j.LoggerFa ...