JavaBasic_05
方法
简述:实现特定功能的代码块
格式
修饰符: 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…){ 函数体; return 返回值;}
方法格式的解释说明
修饰符
修饰符比较多,后面会详细介绍。目前public static
返回值类型
用于限定返回值的数据类型 (有可能我们执行的特定功能就是一个复杂的运算,返回值类型就是用来规定,计算结果最终的数据类型的
方法名
(标识符) 我们自己可以定义的名字
一个单词: 方法名全部小写
多个单词: 第一个单词,首字母小写,从第二个单词开始,每个单词首字母大写
参数类型
形式参数:参数类型 参数名1,参数类型 参数名2… (和变量定义很相似) 就相当于方法中定义的变量
实际参数(存在于方法,存在于方法调用):实际在执行方法时,形式参数的初始值 (和形式参数是赋值关系)
参数名
是一个变量,接收调用方法时传入的参数
函数体
实现方法特定功能的一条或者多条语句
return
结束方法以及 返回 方法指定类型(返回值类型)的值,(将最终计算的结果,传递到方法调用的地方
返回值
程序被return带回的结果,返回给调用者
如何写一个方法呢?两个明确
返回值类型 明确功能结果的数据类型
参数列表 明确有几个参数,以及参数的类型
有明确返回值的方法调用:
单独调用,没有意义
输出调用,有意义,但是不够好,因为我不一定非要把结果输出
赋值调用,推荐方式
方法的使用:(究竟使用哪种方式调用,取决于,方法调用使用的场景)
有返回值的方法的使用
没有返回值的方法的使用 只有一种调用方式就是直接调用 (纯粹的操作,不关心操作结果)
方法定义的注意事项:
方法不能嵌套定义,方法之间是平行关系
方法定义,在运行代码不会自动运行,必须通过方法调用的方式来执行我们的方法代码,方法不调用不执行
方法定义的时候参数之间用 逗号 隔开
方法调用的时候不用在传递数据类型 不要这样调用方法: add(int x, int y)
如果方法有明确的返回值,一定要有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); }}
方法调用过程图解
方法重载
产生的原因,只是方便使用者来使用方法
定义
在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数\参数类型不同\参数顺序不同)
编译器,在区分不同方法的时候:一定不仅仅只用方法名来区分,方法名+参数列表
注意:在区分不同方法的时候,并不考虑方法的返回值
哪些重载方式:
参数个数:
参数类型不同:
参数顺序不同: 是指参数列表中的参数的类型顺序不同
方法重载特点
与返回值类型无关,只看方法名和参数列表
在调用时,虚拟机通过参数列表的不同来区分同名方法
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:数据类型 数组名[ ];
数组的初始化
数组初始化概述:
Java中的数组必须先初始化,然后才能使用。
所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。
数组的初始化方式
动态初始化:初始化时程序猿只指定数组长度,由系统为数组分配初始值。 (自己指定数组的元素个数, 初值系统指定)
静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。 (不能指定数组中的元素个数,可以指定每一个数据的初始值)
数组的动态初始化:
格式:数据类型[] 数组名 = 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的更多相关文章
随机推荐
- 通过BeanPostProcessor理解Spring中Bean的生命周期
通过BeanPostProcessor理解Spring中Bean的生命周期及AOP原理 Spring源码解析(十一)Spring扩展接口InstantiationAwareBeanPostProces ...
- 微信小程序: rpx与px,rem相互转换
官方上规定屏幕宽度为20rem,规定屏幕宽为750rpx,则1rem=750/20rpx. 微信官方建议视觉稿以iPhone 6为标准:在 iPhone6 上,屏幕宽度为375px,共有750个物理像 ...
- 微信小程序自动定位,通过百度地图根据经纬度获取该地点所在城市信息
微信小程序获得经纬度 var that = this wx.getLocation({ type: 'wgs84', success(res) { console.log(res) that.setD ...
- POJ 1458 最长公共子序列(dp)
POJ 1458 最长公共子序列 题目大意:给出两个字符串,求出这样的一 个最长的公共子序列的长度:子序列 中的每个字符都能在两个原串中找到, 而且每个字符的先后顺序和原串中的 先后顺序一致. Sam ...
- windows 常用dos命令
explorer目录 打开当前目录 explorer . 打开上级目录 explorer .. 打开任意目录 explorer dirname cls 命令 清屏屏幕,屏幕显示的所有字符信息都是存放在 ...
- Win10系列:JavaScript 数据绑定
使用数据绑定可以使页面中元素的属性值与数据源中的数据同步,其中数据源可以来自数据库.文件以及自定义的数据等.在常用的数据绑定方法中,简单对象绑定是将HTML元素与一个仅包含数据的简单对象相绑定,模板绑 ...
- 常用6种type的form表单的input标签分析及示例
<input> 标签用于搜集用户信息. 根据不同的 type 属性值,输入字段拥有很多种形式.输入字段可以是文本字段.复选框.掩码后的文本控件.单选按钮.按钮等等. 在这里博主介绍6中ty ...
- tomcat访问端口
问题描述:今天,访问服务器上的应用,tomcat服务器已经启动,确怎么都打不开:问题原因:原来有人改了端口.具体操作:进入tomcat的安装目录,进入conf文件夹下,找到server.xml文件.用 ...
- Android : 修改内核源码 and 编译、打包成新的boot.img
一.Android内核源码的下载: 1.Google GIT地址: $ git clone https://android.googlesource.com/kernel/common.git $ g ...
- 7.3 C++模板中的函数式参数
参考:http://www.weixueyuan.net/view/6400.html 总结: 模板类至少有一个类参数,但是可以有多个参数,这些参数中可以存在非类类型的参数. 类参数是指 class ...