• JavaSE学习总结第05天_Java语言基础1


     

    05.01 方法概述和格式说明

    简单的说:方法就是完成特定功能的代码块

    在很多语言里面都有函数的定义,函数在Java中被称为方法

    格式:

    修饰符返回值类型方法名(参数类型参数名1,参数类型参数名2...)

    {

       函数体;

       return 返回值;

    }

     

    方法格式解释:

    修饰符:后面会详细介绍。目前public static

    返回值类型:用于限定返回值的数据类型

    方法名:一个名称,方便我们调用方法

    参数类型:限定调用方法时传入参数的数据类型

    参数名:是一个变量,接收调用方法时传入的参数

    方法体:完成功能的代码

    return:结束方法以及返回方法指定类型的值

    返回值:程序被return带回的结果,返回给调用者

    05.02 方法的定义求和案例

    根据两个明确来写一个方法

    1.返回值类型,明确功能结果的数据类型

    2.参数列表,明确有几个参数,以及参数的类型

    例:求两个数据之和

    1 public static int add(int i,int j)
    2 {
    3     return i+j;
    4 }

    05.03 方法的调用有明确返回值的方法调用

    有明确返回值的方法调用:

    1. 单独调用,没有意义

    例:add(2,3);

    2. 输出调用,有意义,但是不够好,因为不一定要把结果输出

    例:System.out.println(result);

    3. 赋值调用,推荐方式

    例:int result = add(2,3);

       System.out.println(result);

    05.04 方法的调用图解

    05.05 方法的练习1获取两个数中的较大值

    键盘录入两个数据,返回两个数中的较大值

     1 import java.util.Scanner;
     2 class Demo
     3 {
     4     public static void main(String[] args)
     5     {
     6         Scanner sc = new Scanner(System.in);
     7         System.out.println("请输入第1个数:");
     8         int num1 = sc.nextInt();
     9         System.out.println("请输入第2个数:");
    10         int num2 = sc.nextInt();
    11         int max = getMax(num1 , num2);
    12         System.out.println("较大的数是:"+max);
    13     }
    14     //返回值类型:int
    15     //参数列表:int i,int j
    16     public static int getMax(int i,int j)
    17     {
    18         return (i > j)? i : j;
    19     }
    20 }

     运行结果:

    请输入第1个数:
    43
    请输入第2个数:
    56
    较大的数是:56

    05.06 方法的练习2比较两个数是否相等

    键盘录入两个数据,比较两个数是否相等 

     1 import java.util.Scanner;
     2 class Demo
     3 {
     4     public static void main(String[] args)
     5     {
     6         Scanner sc = new Scanner(System.in);
     7         System.out.println("请输入第1个数:");
     8         int num1 = sc.nextInt();
     9         System.out.println("请输入第2个数:");
    10         int num2 = sc.nextInt();
    11         boolean flag = compare(num1 , num2);
    12         System.out.println("比较结果:"+flag);
    13     }
    14     //返回值类型:boolean
    15     //参数列表:int i,int j
    16     public static boolean compare(int i,int j)
    17     {
    18         return i == j;
    19     }
    20 }

    运行结果:

    请输入第1个数:
    34
    请输入第2个数:
    65
    比较结果:false

    05.07 方法的练习3获取三个数中的最大值

    键盘录入三个数据,返回三个数中的最大值

     1 import java.util.Scanner;
     2 class Demo
     3 {
     4     public static void main(String[] args)
     5     {
     6         Scanner sc = new Scanner(System.in);
     7         System.out.println("请输入第1个数:");
     8         int num1 = sc.nextInt();
     9         System.out.println("请输入第2个数:");
    10         int num2 = sc.nextInt();
    11         System.out.println("请输入第3个数:");
    12         int num3 = sc.nextInt();
    13         int max = getMax(num1 , num2 ,num3);
    14         System.out.println("最大的数是:"+max);
    15     }
    16     //返回值类型:int
    17     //参数列表:int a,int b,int c
    18     public static int getMax(int a,int b,int c)
    19     {
    20         int temp = (a > b)?a : b;
    21         int max = (temp > c)?temp : c;
    22         return max;
    23     }
    24 }

    运行结果:

    请输入第1个数:
    23
    请输入第2个数:
    54
    请输入第3个数:
    21
    最大的数是:54

    05.08 方法的注意事项

    1.方法不调用不执行

    2.方法与方法之间是平级关系,不能嵌套定义

    3.方法定义的时候参数之间用逗号隔开

    4.方法调用的时候不用再传递数据类型

    5.如果方法有明确的返回值,一定要有return返回一个值

    05.09 方法的调用void类型方法的定义和调用

    没有明确返回值的函数调用:其实就是void类型方法的调用,只能单独调用

    例:

     1 class Demo
     2 {
     3     public static void main(String[] args)
     4     {
     5         print(3,4);
     6     }
     7     //返回值类型:没有明确的返回值,用void
     8     //参数列表:int m,int n
     9     public static void print(int m,int n)
    10     {
    11         for(int i = 0;i < m;i++)
    12         {
    13             for(int j = 0;j <n;j++)
    14             {
    15                 System.out.print("* ");
    16             }
    17             System.out.println();
    18         }
    19     }
    20 }

    运行结果:

    * * * *
    * * * *
    * * * *

    05.10 方法的练习4根据行数和列数输出星形

    键盘录入行数和列数,输出对应的星形

     1 import java.util.Scanner;
     2 class Demo
     3 {
     4     public static void main(String[] args)
     5     {
     6         Scanner sc = new Scanner(System.in);
     7         System.out.println("请输入行数:");
     8         int row = sc.nextInt();
     9         System.out.println("请输入列数:");
    10         int col = sc.nextInt();
    11         print(row,col);
    12     }
    13     //返回值类型:void
    14     //参数列表:int m,int n
    15     public static void print(int m,int n)
    16     {
    17         for(int i = 0;i < m;i++)
    18         {
    19             for(int j = 0;j <n;j++)
    20             {
    21                 System.out.print("* ");
    22             }
    23             System.out.println();
    24         }
    25     }
    26 }

    运行结果:

    请输入行数:
    4
    请输入列数:
    5
    * * * * *
    * * * * *
    * * * * *
    * * * * *

    05.11 方法的练习5根据键盘录入输出对应的乘法表

    键盘录入一个数据n(1<=n<=9),输出对应的nn乘法表

     1 import java.util.Scanner;
     2 class Demo
     3 {
     4     public static void main(String[] args)
     5     {
     6         Scanner sc = new Scanner(System.in);
     7         System.out.println("请输入一个数(1~9):");
     8         int num = sc.nextInt();
     9         print(num);
    10     }
    11     //返回值类型:void
    12     //参数列表:int m
    13     public static void print(int m)
    14     {
    15         for(int i = 1;i <= m;i++)
    16         {
    17             for(int j = 1;j <= i;j++)
    18             {
    19                 System.out.print(j+"*"+i+"="+(i*j)+"	");
    20             }
    21             System.out.println();
    22         }
    23     }
    24 }

    运行结果:

    请输入一个数(1~9):
    3
    1*1=1
    1*2=2   2*2=4
    1*3=3   2*3=6   3*3=9

    05.12 方法重载概述和基本使用

    方法法重载概述:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。

    方法重载特点:与返回值类型无关,只看方法名和参数列表,在调用时,虚拟机通过参数列表的不同来区分同名方法。

    例:

     1 class Demo
     2 {
     3     public static void main(String[] args)
     4     {
     5         int result1 = add(2,3);
     6         System.out.println("result1 = "+result1);
     7         int result2 = add(2,3,4);
     8         System.out.println("result2 = "+result2);
     9     }
    10     //求2个数的和
    11     public static int add(int a,int b)
    12     {
    13         return a + b;
    14     }
    15     //求3个数的和
    16     public static int add(int a,int b,int c)
    17     {
    18         return a + b + c;
    19     }
    20 }

    运行结果:

    result1 = 5
    result2 = 9

    05.13 方法重载练习比较数据是否相等

    比较两个数据是否相等

    参数类型分别为两个byte类型,两个short类型,两个int类型,两个long类型,并在main方法中进行测试

     1 class Demo
     2 {
     3     public static void main(String[] args)
     4     {
     5         //测试byte
     6         byte b1 = 2;
     7         byte b2 = 3;
     8         System.out.println("byte:"+compare(b1,b2));
     9         
    10         //测试short
    11         short s1 = 5;
    12         short s2 = 5;
    13         System.out.println("short:"+compare(s1,s2));
    14 
    15         //测试int
    16         int i1 = 6;
    17         int i2 = 7;
    18         System.out.println("int:"+compare(i1,i2));
    19 
    20         //测试long
    21         long l1 = 6788;
    22         int l2 = 6788;
    23         System.out.println("long:"+compare(l1,l2));
    24     }
    25     //byte类型
    26     public static boolean compare(byte a,byte b) 
    27     {
    28         return a == b;
    29     }
    30     
    31     //short类型
    32     public static boolean compare(short a,short b) 
    33     {
    34         return a == b;
    35     }
    36     
    37     //int类型
    38     public static boolean compare(int a,int b) 
    39     {
    40         return a == b;
    41     }
    42     
    43     //long类型
    44     public static boolean compare(long a,long b) 
    45     {
    46         return a == b;
    47     }
    48 }

    05.14 数组概述和定义格式说明

    数组概念:

    1.数组是存储同一种数据类型多个元素的集合,也可以看成是一个容器。

    2.数组既可以存储基本数据类型,也可以存储引用数据类型。

    数组的定义格式:

    格式1:数据类型[] 数组名; 例:int[] arr;

    格式2:数据类型数组名[]; 例:int arr[];

    注意:这两种定义做完了,数组中的元素是没有值的

    05.15 数组的初始化动态初始化

    数组初始化概述:Java中的数组必须先初始化,然后才能使用。

    初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值。

    数组的初始化方式:

    动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。

    静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。

     

    动态初始化:初始化时只指定数组长度,由系统为数组分配初始值。

    格式:数据类型[] 数组名 = new 数据类型[数组长度];数组长度其实就是数组中元素的个数。

    例:int[] arr = new int[3];

    解释:定义了一个int类型的数组,这个数组中可以存放3个int类型的值。

    数组中的每个元素都是有编号的,编号从0开始到数组的长度减1,用数组名与编号的配合就可以获取数组中指定编号的元素,编号的专业名称叫索引,格式:数组名[索引]

    05.16 Java中的内存分配以及栈和堆的区别

    Java程序在运行时,需要在内存中分配空间。为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。

    1.栈:存储局部变量

    2.堆:存储new出来的东西

    3.方法区:(面向对象)

    4.本地方法区:(和系统相关)

    5.寄存器:(给CPU使用)

     

    局部变量:方法定义中或者方法声明上的所有变量,使用完毕,立即消失

    栈内存:存储的都是局部变量,局部变量就是定义在方法中的变量,局部变量所属的作用域一旦结束,该变量就自动释放

    堆内存:存储的是数组和对象(其实数组就是对象),凡是new建立的对象都在堆中

    堆内存特点:

    1.每一个实体都有首地址值

    2.堆内存中的每一个变量都有默认初始化值,根据数据类型的不同而不同

    byte、short、int、long默认为0

    float、double默认为0.0或0.0f

    boolean默认为false

    char默认为'u0000'

    引用类型默认为null

    3.使用完毕后,会被垃圾回收器空闲的时候回收

    05.17 数组的内存图解1一个数组

    例:

     1 class Demo
     2 {
     3     public static void main(String[] args)
     4     {
     5         int[] arr = new int[3];
     6 
     7         //输出数组名称
     8         System.out.println(arr);
     9         
    10         //输出数组元素值
    11         System.out.println(arr[0]);
    12         System.out.println(arr[1]);
    13         System.out.println(arr[2]);
    14 
    15         //给数组元素赋值
    16         arr[0] = 100;
    17         arr[2] = 200;
    18 
    19         //输出数组名称
    20         System.out.println(arr);
    21         
    22         //输出数组元素值
    23         System.out.println(arr[0]);
    24         System.out.println(arr[1]);
    25         System.out.println(arr[2]);
    26     }
    27

    运行结果:

    [I@1175422 ( [表示数组实体 I表示Int型 1175422表示十六进制哈希值 )
    0
    0
    0
    [I@1175422
    100
    0
    200

    图解:

    05.18 数组的内存图解2二个数组

    例:

     1 class Demo
     2 {
     3     public static void main(String[] args)
     4     {
     5         int[] arr1 = new int[2];
     6         int[] arr2 = new int[3];
     7 
     8         arr1[1] = 10;
     9         arr2[0] = 30;
    10         arr2[1] = 20;
    11 
    12         System.out.println(arr1);
    13         System.out.println(arr1[0]);
    14         System.out.println(arr1[1]);
    15 
    16         System.out.println(arr2);
    17         System.out.println(arr2[0]);
    18         System.out.println(arr2[1]);
    19         System.out.println(arr2[2]);
    20     }
    21 }

    运行结果:

    [I@1175422
    0
    10
    [I@949f69
    30
    20
    0

    图解:

    05.19 数组的内存图解3三个数组

    例:

     1 class Demo
     2 {
     3     public static void main(String[] args)
     4     {
     5         int[] arr1 = new int[3];
     6         arr1[0] = 10;
     7         arr1[1] = 20;
     8         arr1[2] = 30;
     9 
    10         int[] arr2 = new int[3];
    11         arr2[0] = 50;
    12         arr2[1] = 60;
    13         arr2[2] = 70;
    14 
    15         int[] arr3 = arr1;
    16         arr3[0] = 100;
    17         arr3[1] = 200;
    18 
    19         System.out.println(arr1);
    20         System.out.println(arr1[0]);
    21         System.out.println(arr1[1]);
    22         System.out.println(arr1[2]);
    23 
    24         System.out.println(arr2);
    25         System.out.println(arr2[0]);
    26         System.out.println(arr2[1]);
    27         System.out.println(arr2[2]);
    28     }
    29 }

    运行结果:

    [I@1175422
    100
    200
    30
    [I@949f69
    50
    60
    70

    图解:

    05.20 数组的初始化静态初始化及内存图

    静态初始化:初始化时指定每个数组元素的初始值,由系统决定数组长度。

    格式:数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};

    例:int[] arr = new int[]{1,2,3};

    解释:定义了一个int类型的数组,这个数组中可以存放3个int类型的值,并且值分别是1,2,3。

    简化写法:int[] arr = {1,2,3};

    例:

     1 class Demo
     2 {
     3     public static void main(String[] args)
     4     {
     5         int[] arr = {1,2,3};
     6         System.out.println(arr);
     7         System.out.println(arr[0]);
     8         System.out.println(arr[1]);
     9         System.out.println(arr[2]);
    10     }
    11 }

    运行结果:

    [I@1175422
    1
    2
    3

    图解:

     

    注意:不能同时进行动态初始化和静态初始化

    05.21 数组操作的两个常见小问题越界和空指针

     

    05.22 数组的操作1遍历

    数组遍历(依次输出数组中的每一个元素)

     1 class Demo
     2 {
     3     public static void main(String[] args)
     4     {
     5         int[] arr = {12,32,11,5,23};
     6         System.out.print("[");
     7         //arr.length返回数组的长度
     8         for(int i = 0;i < arr.length;i++)
     9         {
    10             if(i == arr.length-1)
    11                 System.out.println(arr[i]+"]");
    12             else
    13                 System.out.print(arr[i]+",");
    14         }
    15     }
    16 }

    运行结果:

    [12,32,11,5,23]

    05.23 数组的操作2获取最值

    数组获取最值(获取数组中的最大值最小值)

     1 class Demo
     2 {
     3     public static void main(String[] args)
     4     {
     5         int[] arr = {12,32,11,5,23,56,15,27};
     6         //假设第1个数是最大的
     7         int max = arr[0];
     8         //从第2个数开始遍历,依次与max比较
     9         for(int i = 1;i < arr.length;i++)
    10         {
    11             if(arr[i] > max)
    12                 max = arr[i];
    13         }
    14         System.out.println("最大的数是:"+max);
    15     }
    16 }

    运行结果:

    最大的数是:56

    05.24 数组的操作3逆序

    数组元素逆序 (就是把元素对调)

     1 class Demo
     2 {
     3     public static void main(String[] args)
     4     {
     5         int[] arr = {12,3,1,35,23};
     6         System.out.print("逆序前:");
     7         print(arr);
     8         reverse2(arr);
     9         System.out.print("逆序后:");
    10         print(arr);
    11     }
    12     //方法1
    13     public static void reverse1(int[] arr)
    14     {
    15         for(int i = 0;i < arr.length / 2;i++)
    16         {
    17             int temp = arr[i];
    18             arr[i] = arr[arr.length-1-i];
    19             arr[arr.length-1-i] = temp;
    20         }
    21     }
    22     //方法2
    23     public static void reverse2(int[] arr)
    24     {
    25         for(int start = 0,end = arr.length - 1;start <= end;start++,end--)
    26         {
    27             int temp = arr[start];
    28             arr[start] = arr[end];
    29             arr[end] = temp;
    30         }
    31     }
    32     //遍历数组的方法
    33     public static void print(int[] arr)
    34     {
    35         System.out.print("[");
    36         for(int i = 0;i < arr.length;i++)
    37         {
    38             if(i == arr.length-1)
    39                 System.out.println(arr[i]+"]");
    40             else
    41                 System.out.print(arr[i]+",");
    42         }
    43     }
    44 }

    运行结果:

    逆序前:[12,3,1,35,23]
    逆序后:[23,35,1,3,12]

    05.25 数组的操作4查表法

    数组查表法(根据键盘录入索引,查找对应星期)

     1 import java.util.Scanner;
     2 class Demo
     3 {
     4     public static void main(String[] args)
     5     {
     6         //定义一个字符串数组
     7         String[] strArray = {"星期一","星期二","星期三","星期四","星期五","星期六","星期日"};
     8         Scanner sc = new Scanner(System.in);
     9         System.out.println("请输入一个数(1~7):");
    10         int index = sc.nextInt();
    11         if(index > 7 || index < 1)
    12             System.out.println("数据输入错误");
    13         else
    14             System.out.println(index+"对应"+strArray[index-1]);
    15     }
    16 }

    运行结果:

    请输入一个数(1~7):
    1
    1对应星期一

    05.26 数组的操作5基本查找

    数组元素查找(查找指定元素第一次在数组中出现的索引)

     1 class Demo
     2 {
     3     public static void main(String[] args)
     4     {
     5         int[] arr = {23,12,26,73,14,27};
     6         int index = getIndex(arr,14);
     7         if(index == -1)
     8             System.out.println("没有找到该数");
     9         else
    10             System.out.println("找到该数,在第"+index+"位");
    11     }
    12     //返回值类型:int
    13     //参数列表:int[] arr,int key
    14     public static int getIndex(int[] arr,int key)
    15     {
    16         for(int i = 0;i < arr.length;i++)
    17         {
    18             if(arr[i] == key)
    19                 return i;
    20         }
    21         //没有找到返回-1
    22         return -1;
    23     }
    24 }

    运行结果:

    找到该数,在第4位
  • 相关阅读:
    NOIP201* 游记
    [Luogu3378] 【模板】堆 题解
    [BZOJ5105]【[Code+#1]晨跑】 题解
    牛客多校第九场 E All men are brothers 并查集/组合论
    牛客多校第九场 D Knapsack Cryptosystem 背包
    牛客多校第九场 B Quadratic equation 模平方根
    hdu多校第八场 1011 (hdu6667) Roundgod and Milk Tea 二分图匹配
    hdu多校第八场 1010(hdu6666) Quailty and CCPC 排序/签到
    hdu多校第八场 1003 (hdu6659) Acesrc and Good Numbers 数论/打表
    hdu多校第八场 1009 (hdu6665) Calabash and Landlord 计算几何/dfs
  • 原文地址:https://www.cnblogs.com/zhy7201/p/4487411.html
Copyright © 2020-2023  润新知