方法

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

格式

修饰符: 返回值类型 方法名(参数类型 参数名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. 通过BeanPostProcessor理解Spring中Bean的生命周期

    通过BeanPostProcessor理解Spring中Bean的生命周期及AOP原理 Spring源码解析(十一)Spring扩展接口InstantiationAwareBeanPostProces ...

  2. 微信小程序: rpx与px,rem相互转换

    官方上规定屏幕宽度为20rem,规定屏幕宽为750rpx,则1rem=750/20rpx. 微信官方建议视觉稿以iPhone 6为标准:在 iPhone6 上,屏幕宽度为375px,共有750个物理像 ...

  3. 微信小程序自动定位,通过百度地图根据经纬度获取该地点所在城市信息

    微信小程序获得经纬度 var that = this wx.getLocation({ type: 'wgs84', success(res) { console.log(res) that.setD ...

  4. POJ 1458 最长公共子序列(dp)

    POJ 1458 最长公共子序列 题目大意:给出两个字符串,求出这样的一 个最长的公共子序列的长度:子序列 中的每个字符都能在两个原串中找到, 而且每个字符的先后顺序和原串中的 先后顺序一致. Sam ...

  5. windows 常用dos命令

    explorer目录 打开当前目录 explorer . 打开上级目录 explorer .. 打开任意目录 explorer dirname cls 命令 清屏屏幕,屏幕显示的所有字符信息都是存放在 ...

  6. Win10系列:JavaScript 数据绑定

    使用数据绑定可以使页面中元素的属性值与数据源中的数据同步,其中数据源可以来自数据库.文件以及自定义的数据等.在常用的数据绑定方法中,简单对象绑定是将HTML元素与一个仅包含数据的简单对象相绑定,模板绑 ...

  7. 常用6种type的form表单的input标签分析及示例

    <input> 标签用于搜集用户信息. 根据不同的 type 属性值,输入字段拥有很多种形式.输入字段可以是文本字段.复选框.掩码后的文本控件.单选按钮.按钮等等. 在这里博主介绍6中ty ...

  8. tomcat访问端口

    问题描述:今天,访问服务器上的应用,tomcat服务器已经启动,确怎么都打不开:问题原因:原来有人改了端口.具体操作:进入tomcat的安装目录,进入conf文件夹下,找到server.xml文件.用 ...

  9. Android : 修改内核源码 and 编译、打包成新的boot.img

    一.Android内核源码的下载: 1.Google GIT地址: $ git clone https://android.googlesource.com/kernel/common.git $ g ...

  10. 7.3 C++模板中的函数式参数

    参考:http://www.weixueyuan.net/view/6400.html 总结: 模板类至少有一个类参数,但是可以有多个参数,这些参数中可以存在非类类型的参数. 类参数是指 class ...