【day004】Java学习,坚持就是胜利!

一、方法的调用图解:

【day004】Java学习,坚持就是胜利!_第1张图片

二、方法有参数、无参数

package cn.itcast.day04.demo02;
/*
有参数:小括号当中有内容,当一个方法需要一些数据条件,才能完成任务的时候,就是有参数。
例如两个数字相加,必须知道两个数字是多少,才能相加。

无参数:小括号当中留空。一个方法不需要任何数据条件,自己就能独立完成任务,就是无参数。
例如定义一个方法,打印固定10次HelloWorld。
*/
public class Demo03MethodParam {
    public static void main(String[] args) {
        method1(10, 20);
        System.out.println("==================");
        method2();

    }
    // 两个数字相乘,做乘法,必须知道两个数字各自是多少,否则无法进行计算
    // 有参数
    public static void method1(int a, int b) {
        int result = a * b;
        System.out.println("结果是:" + result);
    }

    // 无参数,例如打印输出固定10次文本字符串
    public static void method2() {
        for (int i = 0; i < 10; i++) {
            System.out.println("Hello, World!" + i);
        }
    }
}

三、对比有返回值和没有返回值

【day004】Java学习,坚持就是胜利!_第2张图片

package cn.itcast.day04.demo02;
/*
题目要求:定义一个方法,用来【求出】两个数字之和。(你帮我算,算完之后吧结果告诉我。)
题目变形:定义一个方法,用来【打印】两个数字之和。(你来计算,算完之后你自己负责显示结果,不用告诉我。)

注意事项:
对于有返回值的方法,可以使用单独调用、打印调用或者赋值调用。
但是对于无返回值的方法,只能使用单独调用。
*/
public class Demo04MethodReturn {
    public static void main(String[] args) {
        // 我是main方法,我来调用你。
        // 我调用你,你来帮我计算一下,算完了之后,把结果告诉我的num变量
        int num = getSum(10, 20);
        System.out.println("返回值是:" + num);
        System.out.println("======================");

        printSum(100, 200);
        System.out.println("======================");

        System.out.println(getSum(2, 3)); // 正确写法
        getSum(3, 5); // 正确写法,但是返回值没有用到
        System.out.println("======================");

        // 对于void没有返回值的方法,只能单独调用,不能打印调用或者赋值调用
//        System.out.println(printSum(2, 3)); // 错误写法!
//        System.out.println(void);

//        int num2 = printSum(10, 20); // 错误写法!
//        int num3 = void;
//        void num4 = void;
    }
    // 我是一个方法,我负责两个数字相加。
    // 我有返回值int,谁调用我,我就把计算结果告诉谁
    public static int getSum(int a, int b) {
        int result = a + b;
        return result;
    }
    // 我是一个方法,我负责两个数字相加。
    // 我没有返回值,不会把结果告诉任何人,而是我自己进行打印输出。
    public static void printSum(int a, int b) {
        int result = a + b;
        System.out.println("结果是:" + result);
    }
}

四、判断两个数字是否相同

题目要求:
定义一个方法,用来判断两个数字是否相同。

package demo03;
/*
题目要求:
定义一个方法,用来判断两个数字是否相同。
*/
public class Demo01MethodSame {
    public static void main(String[] args) {
        System.out.println(isSame(20, 20));
        System.out.println(isSame(23, 20));
    }
    /*
    三要素:
    返回值类型:boolean
    方法名称:isSame
    参数列表:int a, int b
    */
    public static boolean isSame(int a, int b) {
        /*// 方法一:
        boolean same;
        if (a == b) {
            same = true;
        } else {
            same = false;
        }
        return same;*/

        /*// 方法二:
        boolean same = a == b ? true : false;
        return same;*/

        /*// 方法三:
        boolean same = a == b;
        return same;*/

        // 方法四:
        return a == b;
    }
}

五、求出1-100之间所有数字的和值

package demo03;
/*
题目要求:
定义一个方法,用来求出1-100之间所有数字的和值。
*/
public class Demo02MethodSum {
    public static void main(String[] args) {
        System.out.println("结果是:" + getSum());
    }
    /*
    三要素
    返回值:有返回值,计算结果是一个int数字
    方法名称:getSum
    参数列表:数据范围已经确定,是固定的,所以不需要告诉我任何条件,不需要参数
    */
    public static int getSum() {
        int sum = 0;
        for (int i = 1; i <= 100; i++) {
            sum += i;
        }
        return sum;
    }
}

六、打印制定次数的HelloWorld

package demo03;
/*
题目要求:
定义一个方法,用来打印制定次数的HelloWorld。
*/
public class Demo03MethodPrint {
    public static void main(String[] args) {
        printCount(12);
    }
    /*
    三要素
    返回值类型:只是进行一大堆打印操作而已,没有计算,也没有结果要告诉调用处
    方法名称:printCount
    参数列表:到底要打印多少次?必须告诉我,否则我不知道多少次,没法打印。次数:int
    */
    public static void printCount(int num) {
        for (int i = 0; i < num; i++) {
            System.out.println("Hello, World!" + (i + 1));

        }
    }
}

七、方法的注意事项

使用方法的时候,注意事项:

  1. 方法应该定义在类当中,但是不能在方法当中再定义方法。不能嵌套。
  2. 方法定义的前后顺序无所谓。
  3. 方法定义之后不会执行,如果希望执行,一定要调用:单独调用、打印调用、赋值调用。
  4. 如果方法有返回值,那么必须写上“return 返回值;”,不能没有。
  5. return后面的返回值数据,必须和方法的返回值类型,对应起来。
  6. 对于一个void方法当中最后一行的return可以省略不写。
  7. 对于void方法当中最后一行的return可以省略不写。
  8. 一个方法当中可以有多个return语句,但是必须保证同时只有一个会被执行到,两个return不能连写。
package demo03;
/*
使用方法的时候,注意事项:
1. 方法应该定义在类当中,但是不能在方法当中再定义方法。不能嵌套。
2. 方法定义的前后顺序无所谓。
3. 方法定义之后不会执行,如果希望执行,一定要调用:单独调用、打印调用、赋值调用。
4. 如果方法有返回值,那么必须写上“return 返回值;”,不能没有。
5. return后面的返回值数据,必须和方法的返回值类型,对应起来。
6. 对于一个void方法当中最后一行的return可以省略不写。
7. 对于void方法当中最后一行的return可以省略不写。
8. 一个方法当中可以有多个return语句,但是必须保证同时只有一个会被执行到,两个return不能连写。

*/
public class Demo04MethodNotice {
    
    public static int method1() {
        return 10;
    }

    public static void method2() {
//        return 10; // 错误的写法!方法没有返回值,return后面就不能写返回值。
        return; // 没有返回值,只是结束方法的执行而已。
    }

    public static void method3() {
        System.out.println("AAA");
        System.out.println("BBB");
//        return; // 最后一行的return可以省略不写。
    }
}

八、方法重载的基本使用

对于功能类似的方法来说,因为参数列表不一样,却需要记住那么多不同的方法名称,太麻烦。
方法的重载(Overload):多个方法的名称一样,但是参数列表不一样。
好处:只需要记住唯一一个方法名称,就可以实现类似的多个功能。

package cn.itcast.day04.demo04;
/*
对于功能类似的方法来说,因为参数列表不一样,却需要记住那么多不同的方法名称,太麻烦。
方法的重载(Overload):多个方法的名称一样,但是参数列表不一样。
好处:只需要记住唯一一个方法名称,就可以实现类似的多个功能。
*/
public class Demo01MethodOverload {
    public static void main(String[] args) {
        /*System.out.println(sumTwo(10, 20)); // 30
        System.out.println(sumTree(10, 20, 30)); // 60
        System.out.println(sumFour(10, 20, 30, 40)); // 100*/

        System.out.println(sum(10, 20)); // 两个参数的方法
        System.out.println(sum(10, 20, 30)); // 三个参数的方法
        System.out.println(sum(10, 20, 30, 40)); // 四个参数的方法
//        System.out.println(sum(10, 20, 30, 40, 50)); // 找不到任何方法来匹配,所以错误!
    }

    public static int sum (int a, int b) {
        System.out.println("有2个参数的方法执行!");
        return a + b;
    }

    public static int sum (int a, int b, int c) {
        System.out.println("有3个参数的方法执行!");
        return a + b + c;
    }

    public static int sum (int a, int b, int c , int d) {
        System.out.println("有4个参数的方法执行!");
        return a + b + c + d;
    }
}

九、方法重载的注意事项

方法重载与下列因素相关:

  1. 参数个数不同
  2. 参数类型不同
  3. 参数的多类型顺序不同

方法重载与下列因素无关:

  1. 与参数的名称无关
  2. 与方法的返回值类型无关
package cn.itcast.day04.demo04;
/*
对于功能类似的方法来说,因为参数列表不一样,却需要记住那么多不同的方法名称,太麻烦。
方法的重载(Overload):多个方法的名称一样,但是参数列表不一样。
好处:只需要记住唯一一个方法名称,就可以实现类似的多个功能。

方法重载与下列因素相关:
1. 参数个数不同
2. 参数类型不同
3. 参数的多类型顺序不同

方法重载与下列因素无关:
1. 与参数的名称无关
2. 与方法的返回值类型无关
*/
public class Demo01MethodOverload {
    public static void main(String[] args) {
        /*System.out.println(sumTwo(10, 20)); // 30
        System.out.println(sumTree(10, 20, 30)); // 60
        System.out.println(sumFour(10, 20, 30, 40)); // 100*/

        System.out.println(sum(10, 20)); // 两个参数的方法
        System.out.println(sum(10, 20, 30)); // 三个参数的方法
        System.out.println(sum(10, 20, 30, 40)); // 四个参数的方法
//        System.out.println(sum(10, 20, 30, 40, 50)); // 找不到任何方法来匹配,所以错误!
    }

    public static int sum(int a, double b){
        return (int) (a + b);
    }

    public static int sum(double a, int b){
        return (int) (a + b);
    }

    public static int sum (int a, int b) {
        System.out.println("有2个参数的方法执行!");
        return a + b;
    }
    // 错误写法!与方法的返回值类型无关
//    public static double sum(int a, int b) {
//        return a + b + 0.0;
//    }

    // 错误写法!与参数的名称无关
//    public static int sum(int x, int y) {
//        return x + y;
//    }

    public static int sum(double a, double b) {
        return (int) (a + b);
    }

    public static int sum (int a, int b, int c) {
        System.out.println("有3个参数的方法执行!");
        return a + b + c;
    }

    public static int sum (int a, int b, int c , int d) {
        System.out.println("有4个参数的方法执行!");
        return a + b + c + d;
    }
}

十、重载练习1_四种不同参数类型的方法

题目要求:
比较两个数据是否相等。
参数类型分别为两个byte类型,两个short类型,两个int类型、两个long类型,
并在main方法中进行测试

package cn.itcast.day04.demo04;
/*
题目要求:
比较两个数据是否相等。
参数类型分别为两个byte类型,两个short类型,两个int类型、两个long类型,
并在main方法中进行测试
*/
public class Demo02MethodOverloadSame {
    public static void main(String[] args) {
        byte a = 10;
        byte b = 20;
        System.out.println(isSame(a, b));
        System.out.println(isSame((short) 20, (short) 10));
        System.out.println(isSame(11, 12));
        System.out.println(isSame(10L, 10L));

    }

    public static boolean isSame(byte a, byte b) {
        System.out.println("两个byte参数的方法执行!");
        boolean same;
        if (a == b) {
            same = true;
        } else {
            same = false;
        }
        return same;
    }

    public static boolean isSame(short a, short b) {
        System.out.println("两个short参数的方法执行!");
        boolean same = a == b ? true : false;
        return same;
    }

    public static boolean isSame(int a, int b) {
        System.out.println("两个int参数的方法执行!");
        boolean same = a == b;
        return same;
    }

    public static boolean isSame(long a, long b) {
        System.out.println("两个long参数的方法执行!");
        return a == b;
    }
}

十一、重载练习2_判断方法的正确重载

【day004】Java学习,坚持就是胜利!_第3张图片
【day004】Java学习,坚持就是胜利!_第4张图片

【day004】Java学习,坚持就是胜利!_第5张图片

十二、重载练习3_实现重载的println方法

在调用输出语句的时候,println方法其实就是进行了多种数据类型的重载形式

package cn.itcast.day04.demo04;

// byte short int long float double char boolean
// String
// 在调用输出语句的时候,println方法其实就是进行了多种数据类型的重载形式
public class Demo04OverloadPrint {

    public static void main(String[] args) {
        myPrint(100); // int
        myPrint("Hello"); // String
    }

    public static void myPrint(byte num) {
        System.out.println(num);
    }

    public static void myPrint(short num) {
        System.out.println(num);

    }

    public static void myPrint(int num) {
        System.out.println(num);
    }

    public static void myPrint(long num) {
        System.out.println(num);
    }

    public static void myPrint(float num) {
        System.out.println(num);
    }

    public static void myPrint(double num) {
        System.out.println(num);
    }

    public static void myPrint(char zifu) {
        System.out.println(zifu);
    }

    public static void myPrint(boolean is) {
        System.out.println(is);
    }

    public static void myPrint(String str) {
        System.out.println(str);
    }

}

十三、数组的概念

数组的概念:是一种容器,可以同时存放多个数据值。

数组的特点:

  1. 数组是一种引用数据类型(除了那8个基本数据类型,其他都是引用数据类型)
  2. 数组当中的多个数据,类型必须统一
  3. 数组的长度在程序运行期间不可改变
package cn.itcast.day05.demo1;
/*
数组的概念:是一种容器,可以同时存放多个数据值。

数组的特点:
1. 数组是一种引用数据类型(除了那8个基本数据类型,其他都是引用数据类型)
2. 数组当中的多个数据,类型必须统一
3. 数组的长度在程序运行期间不可改变
*/
public class Demo01Array {
    public static void main(String[] args) {
        int score1 = 100;
        int score2 = 98;
        int score3 = 99;
    }
}

十四、数组的定义格式一_动态初始化

数组的初始化:在内存当中创建一个数组,并且向其中赋予一些默认值。

两种常见的初始化方式:

  1. 动态初始化(指定长度)
  2. 静态初始化(指定内容)

动态初始化数组的格式:
数据类型[] 数组名称 = new 数据类型[数组长度];

解析含义:
左侧数据类型:也就是数组当中保存的数据,全都是统一的什么类型
左侧的中括号:代表我是一个数组
左侧数组名称:给数组取一个名字
右侧的new:代表创建数组的动作
右侧数据类型:必须和左边的数据类型保持一致
右侧中括号的长度:也就是数组当中,到底可以保存多少数据,是一个int数字

package cn.itcast.day05.demo1;
/*
数组的概念:是一种容器,可以同时存放多个数据值。

数组的特点:
1. 数组是一种引用数据类型(除了那8个基本数据类型,其他都是引用数据类型)
2. 数组当中的多个数据,类型必须统一
3. 数组的长度在程序运行期间不可改变

数组的初始化:在内存当中创建一个数组,并且向其中赋予一些默认值。

两种常见的初始化方式:
1. 动态初始化(指定长度)
2. 静态初始化(指定内容)

动态初始化数组的格式:
数据类型[] 数组名称 = new 数据类型[数组长度];

解析含义:
左侧数据类型:也就是数组当中保存的数据,全都是统一的什么类型
左侧的中括号:代表我是一个数组
左侧数组名称:给数组取一个名字
右侧的new:代表创建数组的动作
右侧数据类型:必须和左边的数据类型保持一致
右侧中括号的长度:也就是数组当中,到底可以保存多少数据,是一个int数字
*/
public class Demo01Array {
    public static void main(String[] args) {
        // 创建一个数组,里面可以存放300个int数据
        // 格式:数据类型[] 数组名称 = new 数据类型[数组长度];
        int[] arrayA = new int[300];

        // 创建一个数组,能存放10个double类型的数据
        double[] arrayB = new double[10];

        // 创建一个数组,能存放5个字符串
        String[] arrayC = new String[5];


    }
}

十五、数组的定义格式二_静态初始化

动态初始化(指定长度):在创建数组的时候,直接指定数组当中的数据元素个数。
静态初始化(指定内容):在创建数组的时候,不直接指定数据个数多少,而是直接将具体的数据内容进行指定。

静态初始化基本格式:
数据类型[] 数组名称 = new 数据类型[] {元素1, 元素2, … };

注意事项:
虽然静态初始化没有直接告诉长度,但是根据大括号里面的元素具体内容,也可以自动推算出长度。

package cn.itcast.day05.demo1;
/*
动态初始化(指定长度):在创建数组的时候,直接指定数组当中的数据元素个数。
静态初始化(指定内容):在创建数组的时候,不直接指定数据个数多少,而是直接将具体的数据内容进行指定。

静态初始化基本格式:
数据类型[] 数组名称 = new 数据类型[] {元素1, 元素2, ... };

注意事项:
虽然静态初始化没有直接告诉长度,但是根据大括号里面的元素具体内容,也可以自动推算出长度。
 */
public class Demo02Array {
    public static void main(String[] args) {
        // 直接创建一个数组,里面装的全都是int数字,具体为:5、15、25
        int[] arrayA = new int[] {5, 15, 25};

        // 创建一个数组,里面装字符串:"Hello"、"World"、 "Java"
        String[] arrayB = new String[] {"Hello", "World", "Java"};
    }
}

十六、数组的定义格式三_省略的静态初始化

使用静态初始化数组的时候,格式还可以省略一下。

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

省略格式:
数据类型[] 数组名称 = { 元素1, 元素2, … };

注意事项:

  1. 静态初始化没有直接指定长度,但是仍然会自动推算得到长度。
  2. 静态初始化标准格式可以拆分成两个步骤。
  3. 动态初始化也可以拆分成两个步骤。
  4. 静态初始化一旦使用省略格式,就不能拆分成两个步骤了。

使用建议:
如果不确定数组当中的具体内容,用动态初始化;否则,已经确定了具体的内容,用静态初始化。

package cn.itcast.day05.demo1;
/*
使用静态初始化数组的时候,格式还可以省略一下。

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

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

注意事项:
1. 静态初始化没有直接指定长度,但是仍然会自动推算得到长度。
2. 静态初始化标准格式可以拆分成两个步骤。
3. 动态初始化也可以拆分成两个步骤。
4. 静态初始化一旦使用省略格式,就不能拆分成两个步骤了。

使用建议:
如果不确定数组当中的具体内容,用动态初始化;否则,已经确定了具体的内容,用静态初始化。
*/
public class Demo03Array {
    public static void main(String[] args) {
        // 省略格式的静态初始化
        int[] arrayA = {10, 20, 30};
        
        // 静态初始化的标准格式,可以拆分成为两个步骤
        int[] arrayB;
        arrayB = new int[]{11, 21, 31};
        
        // 动态初始化也可以拆分成两个步骤
        int[] arrayC;
        arrayC = new int[5];
        
        // 静态初始化的省略格式,不能拆分
//        int[] arrayD;
//        arrayD = {21, 32, 43};

    }
}

十七、访问数组元素进行获取

package cn.itcast.day05.demo1;
/*
直接打印数组名称,得到的是数组对应的:内存地址哈希值。
二进制:01
十进制:0123456789
十六进制:0123456789abcdef
*/
public class Demo04ArrayUse {
    public static void main(String[] args) {
        // 静态初始化的省略格式
        int[] array = { 10, 20, 30 }; // [I@50cbc42f

        System.out.println(array);

        // 直接打印数组当中的元素
        System.out.println(array[0]); // 10
        System.out.println(array[1]); // 20
        System.out.println(array[2]); // 30
        System.out.println("=================");

        // 也可以将数组当中的某一个单个元素,赋值交给变量
        int num = array[1];
        System.out.println(num);
    }
}

十八、访问数组元素进行赋值

package cn.itcast.day05.demo1;
/*
使用动态初始化数组的时候,其中的元素将会自动拥有一个默认值。规则如下:
如果是整数类型,那么默认为0;
如果是浮点类型,那么默认为0.0;
如果是字符类型,那么默认为'\u0000';
如果是布尔类型,那么默认为false;
如果是引用类型,那么默认为null。

注意事项:
静态初始化其实也有默认值的过程,只不过系统自动马上将默认值替换成为了大括号当中的具体数值。
*/
public class Demo05ArrayUse {
    public static void main(String[] args) {
        // 动态初始化一个数组
        int[] array = new int[3];

        System.out.println(array); // 内存地址值
        System.out.println(array[0]); // 0
        System.out.println(array[1]); // 0
        System.out.println(array[2]); // 0
        System.out.println("===================");

        // 将数据123赋值交给数组array当中的1号元素
        array[1] = 123;
        System.out.println(array[0]); // 0
        System.out.println(array[1]); // 123
        System.out.println(array[2]); // 0
    }

十九、Java中的内存划分

Java的内存需要划分成为5个部分:

  1. 栈(Stack):存放的都是方法的局部变量。方法的运行一定要在栈当中运行。
    局部变量:方法的参数,或者是方法{ }内部的变量
    作用域:一旦超出作用域,立刻从栈内存当中消失。

  2. 堆(Heap): 凡是new出来的东西,都在堆当中。
    堆内存里面的东西都有一个地址值:16进制
    堆内存里面的数据,都有默认值。规则:
    如果是整数 默认为0
    如果是浮点数 默认为0.0
    如果是字符 默认为’\u0000’
    如果是布尔 默认为false
    如果是引用类型 默认为null

  3. 方法区(Method Area): 存储.class相关信息,包含方法的信息。

  4. 本地方法栈(Native Method Stack):与操作系统相关。

  5. 寄存器(pc Register):与CPU相关。

二十、一个数组的内存图

package cn.itcast.day05.demo02;

public class Demo01ArrayOne {
    public static void main(String[] args) {
        int[] array = new int[3]; // 动态初始化
        System.out.println(array); // 内存地址值
        System.out.println(array[0]); // 0
        System.out.println(array[1]); // 0
        System.out.println(array[2]); // 0
        System.out.println("=====================");

        // 改变数组当中元素的内容
        array[1] = 10;
        array[2] = 20;
        System.out.println(array); // 内存地址值
        System.out.println(array[0]); // 0
        System.out.println(array[1]); // 10
        System.out.println(array[2]); // 20
    }
}

【day004】Java学习,坚持就是胜利!_第6张图片

你可能感兴趣的:(java,编程语言,字符串)