方法
概述
① 具有某个特定功能的代码块
② 于是就将这段代码块使用一个大括号给括起来,然后再给这个大括号前面起个名字;往后如果需要使用这段代码就可以使用这个名字来代替
方法的好处
① 提高代码的复用性
② 提高代码的封装性
方法的定义格式
访问修饰词 返回值 方法名 (参数列表){
方法体;
return数据;
}
格式说明
① 访问修饰词:控制被别人访问的权限,初学阶段都写成 public static(方便对方法的调用)
② 返回值类型:如果有数据返回,那么就需要在此指定返回数据的数据类型,如果没有数据返回给调用者就写成void
③ 方法名:使用小驼峰式命名的一个标识符,一般就是功能代码块的功能名
④ 参数列表:不是一定有,当方法体需要外界数据的时候才有,可以使用参数列表将数据传入到方法的内部,如果是多个数据,各个参数之间使用逗号进行隔开;传入的参数必须声明数据类型
⑤ 方法体:特定功能的代码块
⑥ return语句:如果返回值类型不是void,那就需要返回数据。使用 return 进行数据的返回
案例:定义一个方法来获取两个整数的和(有返回值类型、没有返回值类型)
public class Method_Demo {
// 有返回值类型
public static int method_1(int x,int y){
return x + y;
}
// 无返回值类型
public static void method_2(int x,int y){
System.out.println(x + y);
}
public static void main(String[] args) {
}
}
//注意:在无返回值类型方法内部,通常具有输出语句
方法的调用
概述
如果方法只是定义好,不调用的话 该方法不执行
调用的格式
方法名(实际调用时传入的参数);
注意:如果在方法的定义时,有参数列表;在调用该方法时,就必须传入跟定义时依次对应(个数、类型、顺序)的参数列表;如果子方法定义时,没有定义参数列表,那么在调用该方法时就不允许传入参数。
方法在不同情况下的调用方式
① 如果该方法没有返回值类型:方法名(参数列表)
② 如果方法有返回值类型:
a. 返回值不进行二次使用,只想打印方法的执行结果:sout(方法名(参数列表))例如:System.out.println(method_1(5,4));
b. 方法的返回值需要多次使用,采用赋值给变量的方式:数据类型 变量 = 方法名(参数列表);例如:int sum = method_1(5,4);
方法的注意事项
① 不能在方法中定义方法
② 方法在定义时,参数列表必须有数据类型的声明
③ 方法不调用,不执行
④ 可以在方法的内部调用其他的方法,甚至是调用自己(递归)
方法的内存理解
public class Method_Demo {
// 有返回值类型
public static int method_1(int x,int y){
return x + y;
}
public static void main(String[] args) {
int sum = method_1(5,4);
System.out.println(sum);
}
}
图示:
方法的重载
概念
在同一个类中,如果有多个方法,并且这些方法具备的功能差不多,那就可以将这些方法定义成相同的名字,通过定义不同的参数列表来区分方法的不同;这种做法就叫做方法的重载
作用
没有重载的时候,需要记忆的方法名较多,当使用的时候容易混淆不清;重载之后,所有相似相同功能的方法就只需要记住一个名字即可,在使用的时候,根据自己的需要传入不同参数列表即可;
例如:平时经常使用的 System.out 下的 println() 方法,当我们需要打印内容的时候,不管将要打印什么类型的数据,想到的都是使用该方法;实际在进行打印的时候,直接将数据以参数的形式传入即可。
方法重载的三要素
① 前提:只能发生在同一个类中
② 重载的方式:
a. 方法名保持一致
b. 方法的参数列表不能一致(个数、类型、顺序,三者满足任意一个即可)
个数:参数列表的数量
类型:参数列表的数据类型
顺序:参数列表的顺序注意:
使用顺序不同这个条件进行方法重载的判断时,不要看参数的名称,要看参数的数据类型
③ 方法的返回值类型跟方法是否在进行重载没有任何关系
举个例子:定义3个方法,分别计算2个整数、2个浮点数、3个整数的和
一 : 没有使用方法的重载
public class Method_Demo {
// 定义求2个整数和的方法
public static int method_1(int x,int y){
return x + y;
}
// 定义求2个浮点数和的方法
public static double method_2(double x,double y){
return x + y;
}
// 定义三个整数求和的方法
public static int method_3(int x,int y,int z){
return x + y + z;
}
}
② 使用方法重载进行设计
public class Method_Demo {
// 定义求2个整数和的方法
public static int method(int x,int y){
return x + y;
}
// 定义求2个浮点数和的方法
public static double method(double x,double y){
return x + y;
}
// 定义三个整数求和的方法
public static int method(int x,int y,int z){
return x + y + z;
}
}
数组的定义
概念
① 一种容器,能够同时对同一类型的多个数据进行存储
② 使用数组,可以减少变量的定义和记忆,用一个简单的数组名就可以将数组内所有的数据表示出来
③ 数组内部是一个空间大小一样并且连续的结构
④ 数组在定义的时候必须明确两个内容,一是数组的大小,而是数组的类型;这两个东西一旦确定无法进行修改
数组的定义方式(两定 大小,类型)
① 静态初始化数组:定义数组的同时,对容器内的元素进行赋值数据类型
【】 数组名 = new 数剧类型【】{元素1,元素2,元素3,元素4,·······};
决定容器大小的是,大括号内具有的元素的个数静态初始化可以简写为:
数据类型【】 数组名 = {元素1,元素2,元素3,元素4,·······};
② 动态初始化数组:
先声明容器,在程序运行的过程中再将数据放置到容器中数据类型
【】 数组名 = new 数据类型【size】;
决定容器大小的是,size的数值
数组结构说明
① 数据类型:可以是基本数据类型,也可以是引用数据类型
② 数组名:合法的标识符
③ new:创建对象的关键字,使用new就意味着会在堆内存开辟内存空间
④ 前后的数据类型应保存一致
案例:定义一个容器,用来存储10个整型的数据
public class Method_Demo {
public static void main(String[] args) {
int[] arr = new int[10];
}
}
数组的遍历
① 第一种方式:(如果容器比较小时还成,容器一旦比较大就不太合适)
数组名【索引】;
② 第二种方式: 使用for循环;将数组的索引当做循环的初始化变量,在配合数组名【索引】获取元素的方式来实现
for(int i = 0;i < 数组名.length ; i++){数组名【i】;
}
③ 第三种方式:使用增强的for循环
for(数据类型 变量名 :数组){
变量名
}
④ 普通for循环和增强for循环的区别
a. 普通的for循环初始化变量都是使用 int 类型,因为变量表示的是数组内的索引
b. 增强for循环数据类型应该是数组内元素的数据类型
c. 普通for循环需要使用“数组【索引】”的方式来获取数组,这种方式既可以得到数据,也可以得到数据对应的索引
d. 增强的for循环只能够得到数组内的数据,无法获取数据对应的索引
数组的最值
① 假设数组内任意的一个元素为最大值(最小值),一般选择第一个元素或者最后一个元素
② 遍历数组,将遍历出来的元素和假设的最值进行比较
③ 当遍历出来的数据比假设的最值大(小),就将遍历出来的数据赋值给假设的最值
案例:有一个整型数组 int[] arr = {99,5,66,101,8},打印数组内最大的元素
public class Method_Demo {
public static void main(String[] args) {
int[] arr = {99,5,66,101,8};
int max = arr[0];// int max = arr[arr.length - 1]
for(int i = 0;i < arr.length ;i++){
if(max < arr[i]){
max = arr[i];
}
}
System.out.println(max);
}
}
指定元素的交换
① 找到指定元素对应的索引
② 定义中间变量(这个变量必须是数组的数据类型)
③ 实现数据的交换
案例:将数组 int[] arr = {99,5,66,101,8} 中第一个元素与最后一个元素进行交换
public class Method_Demo {
public static void main(String[] args) {
int[] arr = {99,5,66,101,8};
int temp = arr[0];// int temp = arr[arr.length - 1]
arr[0] = arr[arr.length - 1];
arr[arr.length - 1] = temp;
System.out.println(Arrays.toString(arr));
}
}
对应位置的元素进行交换(取半法)
① 将数组的一半进行遍历
② 将每一次遍历出来的元素,找到需要进行交换的元素进行交换
案例:将数组 int[] arr = {99,5,66,101,8}进行反转
public class Method_Demo {
public static void main(String[] args) {
int[] arr = {99,5,66,101,8};
for(int i = 0; i < arr.length/2;i++){
int temp = arr[i];
arr[i] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = temp;
}
}
}
数组内元素的查询
查询数组内是否存在某个元素
① 当数组内存在指定的元素,就返回该元素第一次出现时所对应的索引
② 如果不在指定的元素则返回 -1
思路
① 先进行数组的遍历
② 将遍历出的元素和指定的数据进行比较
③ 如果数据相等,返回当前元素所对应的索引
④ 如果不相等,返回 -1
案例:查询数组int[] arr = {99,5,66,101,8};中是否包含元素 9
public class Method_Demo {
public static void main(String[] args) {
int[] arr = {99,5,66,101,8,99};
boolean flag = true;
for(int i = 0; i < arr.length;i++){
if(arr[i] == 9){
flag = false;
System.out.println(i);
break;
}
}
if(flag){
System.out.println(-1);
}
}
}
冒泡排序
① 进行两两数据的比较,如果第一个数小于第二个数,保持位置不变
② 接着进行第二个和第三个数据的比较,将较大的数据放到后面,依次类推
③ 一趟冒泡排序过后,就会将当前数组内的最大值排序到数组的最后面,重复进行冒泡排序,知道循环结束排序完成
代码实现
public class Method_Demo {
public static void main(String[] args) {
int[] arr = {4,78,1,54,8,99,3,66};
for(int i = 1;i < arr.length;i ++){
for(int j = 0; j < arr.length - i;j++){
if( arr[j] > arr[j + 1]){
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
System.out.println(Arrays.toString(arr));
}
}
}
练习:
1. 简述JDK、JRE、JVM三者之间的关系
2. 简述 Java 实现跨平台的原理
3. 简述 Java 程序开发流程
4. 列举 Java 中有哪些基本数据类型,每个类型能表示的范围?
5. Java 中定义变量的方式有哪些?变量的作用是什么?
6. Java 中标识符的组成?标识符的命名规范是什么?
7. 编写程序,对不同车速进行判断,给出警告或者奖励 车速大于100并小于120,提示车辆超速; 车速大于120,给出警告; 车速大于80且小于100,给予奖励。 提示:车速可以使用 Scanner 进行输入
8. 键盘随机录入一个三位数,判断该数是否是水仙花数?如果是则打印该数是水仙花数,否则打印不是水仙花数 提示:水仙花数:一个三位数的个位3次方、十位3次方、百位3次方的和等于它本身
9. 判断三角形是否合法,键盘录入一个三角形的三条边,判断由这三条边能否组成一个三角形,若可以,计算周长,若不可以提示“非法三角形”
10. 从键盘输入三个整数分别存入num1,num2,num3,对他们进行排序,并且从小到大输出
11. 假设你想开发一个玩彩票的游戏,程序随机地产生一个两位数的彩票,提示用户输入一个两位数,然后根据下面的规则判定用户是否输赢。 1)如果用户输入的数匹配彩票的实际顺序,奖金10000元。 2)如果用户输入的数匹配彩票的所有数字,但顺序不一致,奖金3000元。 3)如果用户输入的一个数字只满足顺序情况下匹配彩票的一个数字,奖金1000元。 4)如果用户输入的一个数字只满足非顺序情况下匹配彩票的一个数字,奖金500元。 5)如果用户输入的数字没有匹配任何一个数字,则彩票作废。
12. 统计水仙花数的个数,并计算出所有水仙花数的和
13. 打印 1 - 100 之间所有的质数(只能被1和本身整除的数称为质数)
14. 循环录入5个人的年龄,并计算平均年龄,如果录入的数据出现负数或者大于130的数,立即停止,输出“输入有误,请输入0-130的年龄”;
15. 使用for循环实现:根据用户输入的正整数n,求n!,即n!=n*(n-1)*(n-2)*…*1
16. 一只公鸡5元钱,一只母鸡3元钱,三只小鸡1元钱。要求100元买100只鸡,请给出所有可行的结果?
17. 假设有一张纸厚度为0.0001米,请问将纸对折多少次后高度超过珠穆朗玛峰
18. 有一颗球,从100米的高度开始自由落体运动(不考虑空气阻力),每一次落地后反弹的高度为前一次自由落体时的一半,求第十次落地后球反弹的高度,以及第十次落地时,球的总体移动了多少米?
答案