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的更多相关文章
随机推荐
- API验证插件
前言 如果在访问某WebAPI过程中request信息被他人截获,若是get请求获取数据还好,如果是post提交数据,势必威胁数据安全,所以对于一个对安全性要求较高的API来说,对每个请求做身份验证显 ...
- 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 & ...
- 你还有没有印象?腾讯QQ16个版本界面你认识多少?
腾讯公司成立于1998年11月11日(马化腾也曾经戏称“腾讯公司的生日被马云弄成双11购物节了”).1997年,马化腾接触到了ICQ:1998年11月11日,马化腾和同学张志东在广东省深圳市注册成立“ ...
- Qt_自定义菜单
一.右键菜单 右键菜单实现:通过重写contextMenuEvent(QContextMenuEvent *event)事件,QMenu+QAction即可完美实现! 重写voidcontextMen ...
- MySQL安装教程(mysql5.6_bundle)
1.下载软件包 下载链接:https://dev.mysql.com/downloads/mysql/5.6.html#downloads centos6--MySQL-5.6.35-1.el6.x8 ...
- easyui中如何为validatebox添加事件(onblur、onclick等)
在我们一般html的input标签,textbox事件可以直接使用onblur().onclick()事件,但是在easyui的validatebox没有onblur事件, 如果我们需要为valida ...
- mysql 语句根据身份证查询年龄,地址,性别
select case left(idcard,2) when '11' then '北京市'when '12' then '天津市'when '13' then '河北省'when '14' th ...
- 解决ubuntu 14.04 “E: 无法获得锁 /var/lib/apt/lists/lock - open (11: 资源暂时不可用)”的问题
http://blog.csdn.net/nicolaskaiqi/article/details/39761757
- daay04流程控制之for循环
for循环主要用于循环取值 student=['egon','虎老师','lxxdsb','alexdsb','wupeiqisb'] # i=0 # while i < len(student ...
- java中JDBC连接数据库操作的基本步骤
JDBC基本步骤 创建一个以JDBC连接数据库的程序,包含7个步骤: 1.加载JDBC驱动程序: 在连接数据库之前,首先要加载想要连接的数据库的驱动到JVM(Java虚拟机), 这通过java.lan ...