纲要:

一、return
1.有返回值类型的方法:1)结束方法 2)带出返回值
2.没有返回值类型的方法: 1)结束方法
不可达语句出现的情况:
1)一定会执行的return后出现的语句
2)死循环后出现的语句
3)break后面出现的语句
4)continue后面出现的语句
3.方法的兼容类型:
1.形参的数据类型>=实参的数据类型
2.返回值: return后面数据的类型<=返回值类型<=接受数据类型
4.方法的内存分析:
a. 程序运行, 首先要加载到内存 Dem001 . class 文件要进入到方法区中
b. JVM调用main(), main() 方法压栈执行
c . 逐行执行主方法中的代码
d. 调EgetArea方法,getArea 方法进栈运行
e , 为方法getArea 传递参数
g . 执行getArea0 方法中的代码 :return w*h = 30
h . 把结果返回给方法的调者, 结束方法
i. 方法getArea() 执行完毕, 弹栈释放空间
j. 把返回值30赋值给变量result
j . main()执行完毕, 弹栈释放内存
二、方法的重载
1.定义:方法签名:方法名+参数列表-->一个方法唯一的表示-->一个类中不能存在多个相同的方法
方法重载:
同一个类中
多个方法方法名相同
参数列表不同 :参数数据类型不同、个数不同、顺序不同(不同类型的参数)
2.重载方法的调用:
根据传递的实参决定调用的是重载方法中的哪一个
面向对象的三大特性: 封装 继承 多态
方法是一个类中封装的一种体现
方法的重载是一个类中多态的一种体现
3.方法重载的注意事项:
方法的重载和方法有无返回值无关
方法的重载和返回值类型无关
方法的重载和修饰符无关
方法的重载和参数的名字无关
方法重载只和方法签名相关
三、 方法的递归(了解):方法自己调用自己
临界条件:递归头 停止自己调用自己的条件
递归前进段:没有满足临界条件之前,自己调用自己
递归后退段:当满足临界条件,将结果返回给上一层
递归头: 临界条件
递归体: 自己掉用自己
四、数组:相同数据类型的有序集合
变量:存储单个数据
数组:存储多个数据
1.特点:
数组是一个引用数据类型
数组是一个容器,长度一旦确定不能改变
数组中数据类型相同
数组中数据是有序的
2.声明方式:
数据类型[] 数组名;
数据类型: 当前数组中所有数据的数据类型 基本数据类型|引用数据类型
数据类型 数组名[]; ---不推荐使用
3.初始化:
3.1动态初始化:
数据类型[] 数组名=new 数据类型[长度]; 创建指定长度的数组
数组中的数据存在默认值:
类型 默认值
byte/short/int/long 0
double/float 0.0
char ' '
boolean false
引用数据类型 null
3.2静态初始化:
数据类型[] 数组名=new 数据类型[]{值1,值2,值3...};值的个数决定创建的数组的长度
数据类型[] 数组名={值1,值2,值3...}; --推荐
注意:简略形式不可以给数组重新赋值
4.操作数组中的数据:
4.1使用:
索引范围: 从0开始 ~ 数组名.length-1
格式: 数组名[索引]
长度: 数组名.length
4.2数组的遍历:
普通for循环
增强for循环 for..each
for(数据类型 变量名i:容器名|数组名){
i就是数组中的每一个数据,不是索引 从前向后遍历
}
注意: 增强for循环只能获取值不能赋值(for each循环不能直接修改容器里的内容,因为操作的 是容器内元素的副本)
在java中,基本数据类型是值传递, 引用数据类型是地址传递
五、二维数组(了解):数组中放数组就是二维数
1.声明:
数据类型[][] 数组名; --推荐
数据类型 数组名[][];
数据类型[] 数组名[];
2.初始化:
数据类型[][] 数组名=new 数据类型[一维数组的长度][二维数组的长度];
每一个第二维都是一样长度
数据类型[][] 数组名=new 数据类型[一维数组的长度][];
每一个第一维的空间中的数据都是一个小数组,但是每一个第二维数组都没有创建
六、拓展
在内层循环中使用break跳出外层循环:
break默认是结束当前循环,想通过内层循环里的语句直接跳出外层循环,此时需要在break后通过标签指定外层循环。java中的标签是一个紧跟着英文冒号的标识符,与其他语言不同的是,java中的标签只有放在循环语句之前才有作用。需要注意的是,break后标签必须是一个有效的标签,即这个标签须在break语句所在循环的外层循环之前定义。如:
outer:
for(int i=0;i<3;i++){
for(int j=0;j<3;j++){
System.out.println(i+"---"+j);
//当j=2时结束outer标识符指定的循环
if(j==2){
break outer;
}
}
}
与break类似的,continue也可以紧跟一个标签,用于直接结束所标识循环的当次循环,重新开始下一次循环。
return也可以结束一个循环,但与continue和break不同的是,return直接结束整个方法,不管这个return处于多少层循环之内。
转载地址:https://songguoliang.iteye.com/blog/1755537
2.以下两种赋值是可以编译通过的
int a,b;
a=b=10;
a=(b=10);
3.为什么字符数组可以直接打印数组中的内容
char[] ch={'a','b','c'};
System.out.println(ch);
输出结果为abc
char类型的数组就相当于一个字符串。
因为输出流System.out是PrintStream对象,PrintStream有多个重载的println方法,其中一个就是public void println(char[] x),直接打印字符数组的话,不像int[]等其他数组,它会直接调用这个方法来打印,因而可以打印出数组内容,而不是地址。
小知识:
字符串的话,是不可以变它的内容的。字符数组的话,你是可以改变数组中包含的内容的。
往深入了说,字符串的底层也是用数组实现的。要说使用的区别,字符串方便一些,数组灵活一些。
网友评论