1.方法(面向对象)
1.概念:
执行特定业务逻辑操作的结构体,在java中称为方法,在c语言中称为函数。
2.语法:
访问修饰符 返回值类型 方法名([参数1……参数n(参数列表)]){
方法体(执行特定操作的内容)
}
方法四要素:
访问修饰符: public static | private(私有) | protected(受保护) | 默认
返回值:方法的返回结果类型,类型可以是:引用类型、基本数据类型
方法名:自定义,命名规则和变量相同
参数列表:(可有可无)没有参数称为无参方法,反之有参数方法,方法定义时的参数称为形参,调用时的参数为实参数。
注意:如果方法有返回值,则必须以return结束
3.方法调用
形式一:直接调用
被调用方法名([实参列表]);(有无返回值均可,建议针对无返回值方法)
形式二:输出调用
System.out.println(方法([实参列表]));(针对有返回值的方法)
形式三:赋值调用
数据类型 变量名 = 方法([实参列表]);(针对有返回值的方法)
注意:1.方法调用时的参数列表(数量、数据类型、先后顺序)必须和方法定义时的参数列表约束一致
2.返回值:如需对返回值进行赋值,则赋值变量的数据类型一定要和方法定义时的返回值类型吻合
4.调用流程图
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eiO3Qe7O-1604928935499)(C:\Users\赵童\Pictures\Saved Pictures\微信图片编辑_20201028220306.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g4ZzW0og-1604928935504)(C:\Users\赵童\Pictures\Saved Pictures\微信图片_20201028223837.png)]
5.方法重载
条件:
1.在同一个类中
2.方法名相同
3.参数列表不同(数量、数据类型、顺序)
4.与返回值和访问修饰符没有关系
意义:
为了更好的解决方法名相同的情况下,执行不同的业务操作。
package org.wdit.unit03.MethodDemo;
/** * 方法重载:
* 条件:
* 1.在同一个类中
* 2.方法名相同
* 3.参数列表不同(数量、数据列表、顺序)
* 4.与返回值和访问修饰符无关 */
public class MethodDemo2 {
public static int sum(int num1,int num2){
return num1+num2; }
public static double sum(double num1,double num2,double num3){
return num1+num2+num3; }
public static void main(String[] args){
System.out.println(sum(1,2));
double sum = sum(1,2,3);
System.out.println(sum); }
2.一维数组
1.概念.
用于储存一组相同类型的变量(容器),这就是数组
2.声明格式
2.1数据类型 数组名[];
2.2数据类型[] 数组名;
3.初始化方式
3.1动态初始化:我们定义数组的长度,由系统自动为数组赋初始值
格式: 数据类型 数组名[] = new 数据类型[数组长度];
//定义用于储存全班40名同学的考试成绩
double scores[] = new double[40];//此时系统给与的默认值为0.0
3.2静态初始化:我们给数组赋初始值,系统来决定长度
格式1: 数据类型 数组名[] = new 数据类型[]{元素1,元素2……元素n}
格式2: 数据类型 数组名[] = {元素1,元素2……元素n}
4.数组元素值的获取与设置
格式: 数组名[索引]=赋值内容;//设置数组元素内容
数组名[索引];//获取数组元素内容
注意 :索引从0开始,数组最大索引为数组长度-1;如果索引超过边界量,则报索引越界异常
package org.wdit.unit03.MethodDemo;
public class ArrayDemo {
public static void main(String[] args){
// int scores[]=new int[3];
// double chenJi[]={98,95,96,97,98,99,99.5,99.2};
// scores[2]=2;
// System.out.println(scores);
// System.out.println(chenJi);
// System.out.println(chenJi[0]);
// System.out.println(chenJi[2]);
// System.out.println(chenJi[3]);
// System.out.println(chenJi[5]);
// System.out.println(scores[1]);
// System.out.println(scores[2]);
//定义用于储存全班10名同学的名字
String name[]=new String[10];
System.out.println(name);
//用于储存全班10名同学的成绩
double score[]={85,60,75.5,66,75,78,65,99,85,95};
System.out.println(score);
name[0]="赵童";//手动为数组第一个元素赋值赵童
name[1]="屈波";//手动为数组第一个元素赋值屈波
name[2]="唐康";//手动为数组第一个元素赋值唐康
name[3]="王必武";//手动为数组第一个元素赋值王必武
System.out.println(name[0]+"的成绩" + score[7]);
System.out.println(name[1]+"的成绩"+score[8]);
System.out.println(name[2]+"的成绩"+score[9]);
System.out.println(name[3]+"的成绩"+score[0]);
}
}
5.内存分布
栈(stack):
存放的都是方法中的局部变量,方法的运行一定要在栈中运行
局部变量:方法的参数或者是定义在方法体内的内部变量
作用域:一旦超过作用域,立即从栈当中消失
堆(heap):
凡是new出来的内容,都在堆内存中
堆里储存的元素都是 ⼀个个的地址值:16进制
堆内存中的元素都是有默认值的:规则如下:
整数 0
浮点数 0.0
字符 ‘\u0000’ Boolean false
引⽤类型 null
方法区(method area):
存储.class 相关的信息,包含⽅法的信息
本地方法区( native method area ): 与操作系统相关 此阶段了解即可 寄存器:与CPU 相关,此阶段了解即可
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ATT8kExd-1604928935508)(C:\Users\赵童\Pictures\Saved Pictures\微信图片_20201028225322.png)]
6.数组的常见操作
1、数组元素遍历
package org.wdit.unit03.MethodDemo;
import java.util.Scanner;
/**
* 数组应用一
* 需求:动态录入班级学员的姓名
*/
public class ArrayDemo1 {
public static void main(String[] args){
//1.创建键盘录入对象
Scanner input = new Scanner(System.in);
//控制台提示用户输入班级学员数量
System.out.println("请输入王者四班学员数量:");
//定义用于储存学员数量的变量
int num = input.nextInt();
//2.动态创建用于储存学员姓名的容器
String names[] = new String[num];
//3.动态为数组元素赋值
for (int i = 0 ; i < names.length ; i++){
System.out.print("请输入第"+(i+1)+"名学员的姓名:");
String name = input.next();
names[i] = name;
System.out.println();
}
System.out.println("学员信息如下");
//4.遍历数组并输出数组元素
for (int i=0;i< names.length;i++){
System.out.println("第"+(i+1)+"名学员的名字:"+names[i]);
}
}
}
2、求最值
package org.wdit.unit03.MethodDemo;
import java.util.Scanner;
/**
* 动态录入王者四班的学员考试成绩并求出最值
*/
public class ArrayDemo3 {
public static void main(String[] args){
//1.创建键盘录入对象
Scanner input= new Scanner(System.in);
//2.控制台提示用户输入班级人数
System.out.print("请输入王者四班班级人数:");
//接受并储存班级人数
int num = input.nextInt();
//3.创建用于储存学员考试成绩的容器(数组)并且动态开辟空间,空间大小来自班级人数数量
int scores[] = new int[num];
//4.循环遍历数组并且为每一个元素进行动态赋值
for (int i = 0 ; i< scores.length;i++){
System.out.print("请输入第"+(i+1)+"名学员的成绩");
int score = input.nextInt();
scores[i] = score;
}
/**
* 1.求最大值
* 分析: :假设数组中第⼀个元素为最⼤值
* 循环遍历,将每次循环产⽣的元素和所谓的最⼤值进⾏⽐较
* 如果⽐最⼤值⼤,则将最⼤值赋给max变量
* 最后max变量中存储的就是最⼤值 */
int max = scores[0];//假设数组中第⼀个元素为最⼤值
int min = scores[0];//假设数组中第⼀个元素为最⼩值
for ( int i=1;i< scores.length;i++){
//判断每⼀个元素是否⽐最⼤元素⼤
if (scores[i]>max){
max = scores[i];
}
//判断每⼀个元素是否⽐最⼩元素⼩
if (scores[i]<min){
min = scores[i];
}
}
System.out.println("最大值:"+max);
System.out.println("最小值:"+min);
}
}
3、逆序
package org.wdit.unit03.MethodDemo;
/** * 数组应用:
* 需求:给定一个数组,需要进行逆序
* 分析:首先需要将数组进行折半,前半部分替换后半部分
* min = 0 ;
* max = arr.length-1;
* 循环交换位置
* 条件:变量初始化:int min =0,int max =arr.length-1;
* 条件: min<max;
* min++,max--;
* 循环体内容:元素交换
* 需要中间变量
* int temp;
*/
public class ArrayDemo2 {
public static void main(String[] args){
int arr[] = {1,2,3,4,5,6,7,8,9};
System.out.println("逆序前数组中的元素信息如下:");
for (int i = 0 ; i < arr.length;i++){
System.out.print(arr[i]+" ");
}
//循环遍历并交换元素
for (int min = 0 ,max= arr.length-1; min<max ;min++,max--){
int temp=arr[min];
arr[min]=arr[max];
arr[max]=temp;
}
System.out.println("\n逆序后数组中的元素信息如下:");
for (int j=0;j< arr.length;j++){
System.out.print(arr[j]+"\t");
}
}
}
4、查找元素
package org.wdit.unit03.MethodDemo;
import java.util.Scanner;
/**
* 需求:在已知数组中查找指定元素
* 分析:循环遍历数组,将每次循环产生的元素和查找的元素进行对比,如果内容相等
*/
public class ArrayDemo4 {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
String[] names ={"赵童","屈波","幕佳兵","唐康"};
//提示用户输入
System.out.print("请输入你要查找的学生姓名:");
String name = input.next();
boolean flag = false;//标志为变量,默认表示没有查找到
for (int i = 0;i<names.length;i++){
if (names[i].equals(name)){
System.out.println("有这位大神!");
flag = true;
break;//终止循环
}
}
if (!flag){
System.out.println("没你这号");
}
}
}
3.二维数组
构成:在一维数组上进行了扩展,即一维数组的每一个元素也是一个一维数组,其实java中实际不存在二维数组的结构。
int school[][] = new int[5][];//开启最大维度的长度
school[0] = new int[5];//开启二维数组第一个最大维度元素的空间
school[1] = new int[10];//开启二维数组第二个最大维度元素的空间
格式
格式一:
数据类型[][] 变量名 = new 数据类型[m][n];
//m:二维数组可以储存一维数组的个数
//n:一位数组的长度
格式二:
数据类型[][] 变量名 = new 数据类型[m][];
//m:二维数组可以储存一维数组的个数
//一维数组的长度由我们动态进行指定
格式三:
数据类型[][] 变量名=new 数据类型[][]{{元素一,元素二……元素n},{元素一,元素二……元素n},{元素一,元素二……元素n}}
简化格式:
数据类型[][] 变量名={{元素一,元素二……元素n},{元素一,元素二……元素n},{}}
2.二维数组的遍历
分析:1. 遍历二维数组中储存的一维数组的个数。for(int i=0;i<arr.length;i++){……}
2.遍历二维数组中每一个一维数组中的元素
提取二维数组中的没一个一维数组:arr[索引]
遍历当前一维数组:for(int j =0;j<arr[索引].length;j++){……}
3.会发现二维数组的遍历 外层循环控制二维数组的最大维度长度
循环控制一维数组的长度
int[][] school={{1,2,3},{4,5},{7,8,9}};//定义二维数组
//遍历二维数组
for(int i=0;i<3;i++){//外层循环控制二维数组的最大长度
for(int j=0;j<school[i].length;j++){//内层循环控制每一个一维数组的长度
System.out.println(school[i][j]);
}
}
package org.wdit.unit03.MethodDemo;
import java.util.Scanner;
//方法&数组
// 二维数组的应用:
//需求:动态录入若干个班级若干名学员的考试成绩,并求出每个班级的总成绩、平均成绩分析:若干个班级需要一个 数组进行存储
// 若干名学员需要一个数组进行存储
// 若干个班级若干名需要一个二维数组
// 班级管理制度
// 若干个:需要通过键盘录入对象scnner进行动态录入
// 录入每个班级每个学员的成绩:需要遍历二维数组
// 计算总成绩、平均成绩:需要将录入元素后的二维数组进行遍历,并计算成绩。
public class ArrayDemoText1 {
public static void main(String[] args){
//1.创建键盘录入对象
Scanner input = new Scanner(System.in);
//2.提示用户输入数据
System.out.print("请你输入班级数目:");
int num = input.nextInt();
int[][] school=new int[num][];
for (int i=0;i<school.length;i++){
System.out.print("请输入第"+(i+1)+"个班级的人数:");
int number = input.nextInt();
school[i]=new int[number] ;
int sum = 0;
for (int j = 0; j < school[i].length;j++){
System.out.print("请输入第"+(i+1)+"班第"+(j+1)+"个同学的成绩");
int scores = input.nextInt();
school[i][j] = scores;
System.out.println("");
sum=sum+scores;
}
System.out.println("第"+(i+1)+"班的总分:"+sum);
System.out.println("第"+(i+1)+"班的平均分:"+sum/(school[i].length));
}
}
}
package org.wdit.unit03.MethodDemo;
public class ArrayDemo {
public static void main(String[] args){
// int scores[]=new int[3];
// double chenJi[]={98,95,96,97,98,99,99.5,99.2};
// scores[2]=2;
// System.out.println(scores);
// System.out.println(chenJi);
// System.out.println(chenJi[0]);
// System.out.println(chenJi[2]);
// System.out.println(chenJi[3]);
// System.out.println(chenJi[5]);
// System.out.println(scores[1]);
// System.out.println(scores[2]);
String name[]=new String[10];
System.out.println(name);
double score[]={85,60,75.5,66,75,78,65,99,85,95};
System.out.println(score);
name[0]="赵童";
name[1]="屈波";
name[2]="唐康";
name[3]="王必武";
System.out.println(name[0]+"的成绩" + score[7]);
System.out.println(name[1]+"的成绩"+score[8]);
System.out.println(name[2]+"的成绩"+score[9]);
System.out.println(name[3]+"的成绩"+score[0]);
System.out.println("-----------------------------------------------");
String names[] = new String[]{"赵童","幕佳兵","唐康","屈波"};
float scores[] = {97,87,77,67};
for (int i=0;i< scores.length;i++){
if (scores[i]>=80){
System.out.println(names[i]+"还不错,还得了"+scores[i]);
}else{
System.out.println(names[i]+"不行啊");
}
}
}
}
package org.wdit.unit03.MethodDemo;
import java.util.Scanner;
/**
* 数组应用一
* 需求:动态录入班级学员的姓名
*/
public class ArrayDemo1 {
public static void main(String[] args){
//1.创建键盘录入对象
Scanner input=new Scanner(System.in);
//控制台提示输入班级学员数量
System.out.println("请输入王者四班学员数量:");
//定义用于储存学员数量的变量
int num=input.nextInt();
//2.动态创建用于储存学员姓名的容器
String names[]=new String[num];
//3.动态为数组元素赋值
for (int i=0;i< names.length;i++){
System.out.print("请输入第"+(i+1)+"名学员的姓名:");
String name = input.next();
names[i] = name;
System.out.println();
}
System.out.println("学员信息如下");
//4.遍历数组并输出数组元素
for (int i=0;i< names.length;i++){
System.out.println("第"+(i+1)+"名学员的名字:"+names[i]);
}
}
}
package org.wdit.unit03.MethodDemo;
/**
* 数组应用:
* 需求:给定一个数组,需要进行逆序
* 分析:首先需要将数组进行折半,前半部分替换后半部分
* min = 0 ;
* max = arr.length-1;
* 循环交换位置
* 条件:变量初始化:int min =0,int max =arr.length-1;
* 条件: min<max;
* min++,max--;
* 循环体内容:元素交换
* 需要中间变量
* int temp;
*/
public class ArrayDemo2 {
public static void main(String[] args){
int arr[] = {99,88,77,66,55,61,71,81,91};
System.out.println("逆序前数组中的元素信息如下:");
for (int i = 0 ; i < arr.length;i++){
System.out.print(arr[i]+" ");
}
for (int min = 0 ,max= arr.length-1; min<max ;min++,max--){ //循环遍历并交换元素
int temp=arr[min];
arr[min]=arr[max];
arr[max]=temp;
}
System.out.println("\n逆序后数组中的元素信息如下:");
for (int j=0;j< arr.length;j++){
System.out.print(arr[j]+"\t");
}
}
}
package org.wdit.unit03.MethodDemo;
import java.util.Scanner;
/**
* 动态录入王者四班的学员考试成绩并求出最值
*/
public class ArrayDemo3 {
public static void main(String[] args){
//1.创建键盘录入对象
Scanner input= new Scanner(System.in);
//2.控制台提示用户输入班级人数
System.out.print("请输入王者四班班级人数:");
//接受并储存班级人数
int num = input.nextInt();
//3.创建用于储存学员考试成绩的容器(数组)并且动态开辟空间,空间大小来自班级人数数量
int scores[] = new int[num];
//4.循环遍历数组并且为每一个元素进行动态赋值
for (int i = 0 ; i< scores.length;i++){
System.out.print("请输入第"+(i+1)+"名学员的成绩");
int score = input.nextInt();
scores[i] = score;
}
/**
* 1.求最大值
* 分析: :假设数组中第⼀个元素为最⼤值
* 循环遍历,将每次循环产⽣的元素和所谓的最⼤值进⾏⽐较
* 如果⽐最⼤值⼤,则将最⼤值赋给max变量
* 最后max变量中存储的就是最⼤值
*/
int max = scores[0];//假设数组中第⼀个元素为最⼤值
int min = scores[0];//假设数组中第⼀个元素为最⼩值
for ( int i=1;i< scores.length;i++){
//判断每⼀个元素是否⽐最⼤元素⼤
if (scores[i]>max){
max = scores[i];
}
//判断每⼀个元素是否⽐最⼩元素⼩
if (scores[i]<min){
min = scores[i];
}
}
System.out.println("最大值:"+max);
System.out.println("最小值:"+min);
}
}
package org.wdit.unit03.MethodDemo;
import java.util.Scanner;
/**
* 需求:在已知数组中查找指定元素
* 分析:循环遍历数组,将每次循环产生的元素和查找的元素进行对比,如果内容相等
*/
public class ArrayDemo4 {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
String[] names ={"王必武","屈波","唐康","赵童"};
//提示用户输入
System.out.print("请输入你要查找的学生姓名:");
String name = input.next();
boolean flag = false;//标志为变量,默认表示没有查找到
for (int i = 0;i<names.length;i++){
if (names[i].equals(name)){
System.out.println("有这位大神!");
flag = true;
break;//终止循环
}
}
if (!flag){
System.out.println("没你这号");
}
}
}
package org.wdit.unit03.MethodDemo;
import java.util.Scanner;
//方法&数组
// 二维数组的应用:
//需求:动态录入若干个班级若干名学员的考试成绩,并求出每个班级的总成绩、平均成绩分析:若干个班级需要一个 数组进行存储
// 若干名学员需要一个数组进行存储
// 若干个班级若干名需要一个二维数组
// 班级管理制度
// 若干个:需要通过键盘录入对象scnner进行动态录入
// 录入每个班级每个学员的成绩:需要遍历二维数组
// 计算总成绩、平均成绩:需要将录入元素后的二维数组进行遍历,并计算成绩。
public class ArrayDemoText1 {
public static void main(String[] args){
//1.创建键盘录入对象
Scanner input = new Scanner(System.in);
//2.提示用户输入数据
System.out.print("请你输入班级数目:");
int num = input.nextInt();
int[][] school=new int[num][];
for (int i=0;i<school.length;i++){
System.out.print("请输入第"+(i+1)+"个班级的人数:");
int number = input.nextInt();
school[i]=new int[number] ;
int sum = 0;
for (int j = 0; j < school[i].length;j++){
System.out.print("请输入第"+(i+1)+"班第"+(j+1)+"个同学的成绩");
int scores = input.nextInt();
school[i][j] = scores;
System.out.println("");
sum=sum+scores;
}
System.out.println("第"+(i+1)+"班的总分:"+sum);
System.out.println("第"+(i+1)+"班的平均分:"+sum/(school[i].length));
}
}
}
package org.wdit.unit03.MethodDemo;
import java.util.Scanner;
public class ArrayText1 {
public static void main(String[] args) {
int[][] number ={{1,2},{3,4}};
for (int i =0;i< number.length;i++){
for (int j=0; j< number[i].length;j++){
System.out.println(number[i][j]);
}
}
}
}