方法

简述:实现特定功能的代码块

格式

修饰符: 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…){            函数体;             return 返回值;}

方法格式的解释说明

  • 修饰符

    • 修饰符比较多,后面会详细介绍。目前public static

  • 返回值类型

    • 用于限定返回值的数据类型 (有可能我们执行的特定功能就是一个复杂的运算,返回值类型就是用来规定,计算结果最终的数据类型的

  • 方法名

    • (标识符) 我们自己可以定义的名字

    • 一个单词: 方法名全部小写

    • 多个单词: 第一个单词,首字母小写,从第二个单词开始,每个单词首字母大写

  • 参数类型

    • 形式参数:参数类型 参数名1,参数类型 参数名2… (和变量定义很相似) 就相当于方法中定义的变量

    • 实际参数(存在于方法,存在于方法调用):实际在执行方法时,形式参数的初始值 (和形式参数是赋值关系)

  • 参数名

    • 是一个变量,接收调用方法时传入的参数

  • 函数体

    • 实现方法特定功能的一条或者多条语句

  • return

    • 结束方法以及 返回 方法指定类型(返回值类型)的值,(将最终计算的结果,传递到方法调用的地方

  • 返回值

    • 程序被return带回的结果,返回给调用者

如何写一个方法呢?两个明确

  1. 返回值类型 明确功能结果的数据类型

  2. 参数列表 明确有几个参数,以及参数的类型

有明确返回值的方法调用:

  • 单独调用,没有意义

  • 输出调用,有意义,但是不够好,因为我不一定非要把结果输出

  • 赋值调用,推荐方式

方法的使用:(究竟使用哪种方式调用,取决于,方法调用使用的场景)

  1. 有返回值的方法的使用

  2. 没有返回值的方法的使用 只有一种调用方式就是直接调用 (纯粹的操作,不关心操作结果)

方法定义的注意事项:

  1. 方法不能嵌套定义,方法之间是平行关系

  2. 方法定义,在运行代码不会自动运行,必须通过方法调用的方式来执行我们的方法代码,方法不调用不执行

  3. 方法定义的时候参数之间用 逗号 隔开

  4. 方法调用的时候不用在传递数据类型 不要这样调用方法: add(int x, int y)

  5. 如果方法有明确的返回值,一定要有return带回一个值 //有返回值的方法

  • 为什么我们的代码没有调用main方法,main总是可以执行呢?main不是我们的代码调用,是虚拟机来调用的。

​        //第一种调用形式-直接调用,直接通过方法名调用,一般不使用这种方式,来进行方法调用        // x, y 就是我们的实际参数        add(x, y);​        //第二种,方法调用的方式-输出调用,输出调用也不太好        System.out.println(add(x, y));​        //第三种调用方式,赋值调用(通常我们使用的最多的方法调用形式就是,赋值调用)        int result = add( x, y);        System.out.println(result);​
public class MethodDemo1 {​    public static void main(String[] args) {           //没有返回值的方法调用,因为没有返回值,所以我们不关心方法的返回结果        // 1.直接调用           test(10);       // 2.输出调用  对于没有返回值的方法,不能使用输出调用        System.out.println(test(10));​        // 3. 赋值调用 对于没有返回值的方法,不能使用赋值调用        //    void 不是任何变量的类型,void只有一种使用场景,在定义无返回值的方法的时候,指明方法是没有返回值的         void i =test(10);​    }​​    public static int add(int a, int b) {​        //实现方法的特定功能:两数求和        // c 变量中就存储了计算的最终结果        int c = a + b;​        //通过return 语句将最终的计算结果,传递给调用者使用        return c;    }​    // 定义没有返回值的方法,即使方法没有返回值,我们也必须在方法定义中指明没有返回值    // 通过一个特殊的类型: void    public static void test(int add) {​        System.out.println("i = " + add);    }​}​

方法调用过程图解


方法重载

产生的原因,只是方便使用者来使用方法

定义

在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数\参数类型不同\参数顺序不同)

编译器,在区分不同方法的时候:一定不仅仅只用方法名来区分,方法名+参数列表

注意:在区分不同方法的时候,并不考虑方法的返回值

哪些重载方式:

  1. 参数个数:

  2. 参数类型不同:

  3. 参数顺序不同: 是指参数列表中的参数的类型顺序不同

方法重载特点

  1. 与返回值类型无关,只看方法名和参数列表

  2. 在调用时,虚拟机通过参数列表的不同来区分同名方法

 public class Overload{​    public static void main(String[] args) {​        // 2数相加的功能        int add = add(10, 20);​        // 3数相加        int i = add3(10, 20, 30);​        //4数相加        int i1 = add3(10, 20, 30, 40);​        // + 不管是字符串拼接也好还是,数值加法也好        System.out.println(1 + 2);        System.out.println("1" + "2");​        //两数求和的调用,利用方法重载,可以使得用户调用方法的时候更方便        int d = add(10,20);        add(10, 20, 30);        add(10, 20, 30 ,40);​         add(10, 20);    }​    public static int add(int a, int b) {​        //实现方法的特定功能:两数求和        //c 变量中就存储了计算的最终结果        int c = a + b;​        //通过return 语句将最终的计算结果,传递给调用者使用        return c;    }​    public static int add(int a, int b, int c) {        int d = add(a, b) + c;//        return d;​        return add(a, b) + c;    }​​    public static int add(int a, int b, int c, int d) {        return add(a, b, c) + d;    }​      //编译器在区分不同的方法时,并不考虑返回值//    public static void add(int a, int b, int c, int d){////    }​​    // 第二种重载方式:参数类型不同    public static double add(int a, float b) {        return a + b;    }​    //第三种重载方式: 参数顺序不同(类型顺序,而不是形式参数的名称的顺序)    public static double add(float a, int b) {        return a+b;    }​}

数组

数组概念

  1. 数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。

  2. 数组既可以存储基本数据类型,也可以存储引用数据类型。(对象的地址)

数组的特征图解

数组的定义格式

有两种定义格式,但是,我们推荐大家使用的是第一种格式

格式1:数据类型[] 数组名;

格式2:数据类型 数组名[ ];

数组的初始化

数组初始化概述:
  1. Java中的数组必须先初始化,然后才能使用。

  2. 所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。

数组的初始化方式
  • 动态初始化:初始化时程序猿只指定数组长度,由系统为数组分配初始值。 (自己指定数组的元素个数, 初值系统指定)

  • 静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。 (不能指定数组中的元素个数,可以指定每一个数据的初始值)

数组的动态初始化:

格式:数据类型[] 数组名 = new 数据类型[数组长度]

数组长度其实就是数组中元素的个数。

数组的静态初始化:

格式1:数据类型[ ] 数组名 = new 数据类型[]{元素1,元素2,…};

格式2,简便写法,限制,声明数组的同时。 int[] arr = {1,2,3};

静态初始化图解

动态初始化图解1

动态初始化图解2

数组操作常见的两个小问题

数组索引越界

ArrayIndexOutOfBoundsException

访问到了数组中的不存在的索引时发生。

一般我们初始化一个数组完成之后(包含的元素个数有限,是n个),数组的索引应该是有一个范围[0 - n-1],如果访问数组的索引超出了[0 - n -1]这个范围,就会数组索引越界

空指针异常

NullPointerException

数组引用没有指向实体,却在操作实体中的元素时。

空指针异常是指:当引用变量的值为null(空,没有),访问这个引用变量所指向的对空间

空指针异常图解


java为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。

  • 栈:存储局部变量 以及 栈帧 局部变量:就是在方法体中定义的局部变量

  • 堆: 存储new出来的东西,比如数组

  • 方法区:字节码文件内容等

  • 本地方法栈(系统相关) 本地方法:指非java语言实现,c,c++,JNI,非Java语言

  • 程序计算器:指明当前正在执行的Java指令(100多条指令,00011110),就是一个数,用来指明当前程序执行第几条java指令。

1.栈内存中存储的是局部变量 1.new出来的东西
2. 栈内存中的东西,显示初始化之后,在使用(代码初始化) 2. 堆上的数据天生有初值 —— byte short int long 0 ;——float,double 0.0 ;—— boolean false ——引用数据类型 null
3.栈中的变量,一旦方法运行完之后,栈中的局部变量的内存空间会立马被系统回收 3.堆中变量,使用完毕之后就变成垃圾,但是这些资源不是立马被系统回收,当系统中的垃圾回收器运行的时候被回收

int[] a = new int[3];

普通的基本类型数据:存的就是数值

引用变量:地址

java:是没有办法直接操作空间,只能通过引用变量,间接访问空间

存在的目的:程序只能通过引用变量,间接访问。

JavaBasic_05的更多相关文章

随机推荐

  1. API验证插件

    前言 如果在访问某WebAPI过程中request信息被他人截获,若是get请求获取数据还好,如果是post提交数据,势必威胁数据安全,所以对于一个对安全性要求较高的API来说,对每个请求做身份验证显 ...

  2. python dpkt解析ssl流

    用法:python extract_tls_flow.py -vr  white_pcap/11/2018-01-10_13-05-09_2.pcap  -o pcap_ssl_flow.txt  & ...

  3. 你还有没有印象?腾讯QQ16个版本界面你认识多少?

    腾讯公司成立于1998年11月11日(马化腾也曾经戏称“腾讯公司的生日被马云弄成双11购物节了”).1997年,马化腾接触到了ICQ:1998年11月11日,马化腾和同学张志东在广东省深圳市注册成立“ ...

  4. Qt_自定义菜单

    一.右键菜单 右键菜单实现:通过重写contextMenuEvent(QContextMenuEvent *event)事件,QMenu+QAction即可完美实现! 重写voidcontextMen ...

  5. MySQL安装教程(mysql5.6_bundle)

    1.下载软件包 下载链接:https://dev.mysql.com/downloads/mysql/5.6.html#downloads centos6--MySQL-5.6.35-1.el6.x8 ...

  6. easyui中如何为validatebox添加事件(onblur、onclick等)

    在我们一般html的input标签,textbox事件可以直接使用onblur().onclick()事件,但是在easyui的validatebox没有onblur事件, 如果我们需要为valida ...

  7. mysql 语句根据身份证查询年龄,地址,性别

    select  case left(idcard,2) when '11' then '北京市'when '12' then '天津市'when '13' then '河北省'when '14' th ...

  8. 解决ubuntu 14.04 “E: 无法获得锁 /var/lib/apt/lists/lock - open (11: 资源暂时不可用)”的问题

    http://blog.csdn.net/nicolaskaiqi/article/details/39761757

  9. daay04流程控制之for循环

    for循环主要用于循环取值 student=['egon','虎老师','lxxdsb','alexdsb','wupeiqisb'] # i=0 # while i < len(student ...

  10. java中JDBC连接数据库操作的基本步骤

    JDBC基本步骤 创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lan ...