Java总结(第二周)

目录

一、数组

1.声明数组语法:数组名是任意合法的变量名

2.分配空间

3.赋值

4.处理数组中的数据

5.循环操作数组

6、二维数组

7、注意

二、方法

1、知识点概述

2、概念

3、定义参数

4、可变参数(Variable)

5、方法的参数传递问题 

1. 基本数据类型:传递原始数据类型参数

2. 引用数据类型

3、方法签名

4、方法的重载


一、数组

1.声明数组语法:数组名是任意合法的变量名

语法: 数据类型[ ] 数组名

或者: 数据类型 数组名[ ];

int[] scores;  //整形数组
double height[];  //浮点型数组
String[] names;  //字符串型数组

2.分配空间

就是指定数组中可以存储多少个元素,语法:

数组名 = new 数据类型 [ 数组长度 ]; //数组长度指的是可以存放元素的个数

scores = new int[5];  //长度为5的整形数组
height = new double[5];  //长度为5的浮点型数组
names = new String[5];  //长度为5的字符串数组

把 1 和 2 合起来写就是这样的:

int [] scores = new int [5];

3.赋值

分配空间后就可以向数组中放数据了,数组中元素都是通过下标来访问的,例:

scores[0] = 89;
scores[1] = 90;

4.处理数组中的数据

对赋值后的数组进行操作和处理,如获取并输出数组中元素的值

System.out.println("scores数组中第一个元素的值:" + scores[0]);

还有一种直接创建数组的方式,将数组声明、分配空间和赋值操作一起完成

int [] scores = {78,89,48,59}; //创建一个长度为4的数组
//等价于
int [] scores = new int []{78,89,48,59}; //这中方式的方括号里面不能指定长度

5.循环操作数组

int scores = {78,89,97,45};
for (int i = 0;i < scores.length;i ++) {
    System.out.println(scores[i]); 
    //循环打印每一个数,数组名.length  用于获取数组的长度
}

6、二维数组

示例:

int[][] num = {{1,2,3},{4,5,6}};
for (int i = 0; i < num.length;i ++) {
    for (int j = 0;j < num[i].length;i ++) {
        //依次输出
        System.out.println(num[i][j]);
    }
    //换行
    System.out.println();
}
//输出:
1 2 3
4 5 6

7、注意

1、 数组下标从 0 开始。因此 scores[3] ,表示数组中的第 4 个元素,而并非第 3 个元素
2、 数组下标的范围是 0 至 数组长度-1 ,如果越界访问,就会报错
6.使用Arrays类操作数组
Arrays 类是 Java 中提供的一个工具类,在 java.util 包中。该类中包含了一些方法用来直接操作数组,比如可直接实现数组的排序、搜索等。
1)排序,语法:Arrays,sort(数组名);
可以使用 sort( ) 方法实现对数组的排序,只要将数组名放在 sort( ) 方法的括号中,就可以完成对该数组的排序(按升序排列),例:

//定义一个整形数组
int[] scores = {78,79,89,98,72};
使用Arrays的sort()方法对数组进行排序
Arrays.sort(scores);
System.out.println("排序后数组元素的值:");
//for循环输出值
for (int i = 0;i < scores.length; i ++) {
    System.out.println(scores[i]);
}
//输出:72 78 79 89 98

2)将数组转换为字符串, 语法:Arrays.toString(数组名);

可以使用 toString( ) 方法将一个数组转换成字符串,该方法按顺序把多个数组元素连接在一起,多个元素之间使用逗号和空格隔开,例:

int [] nums = new int[] {25,89,78,45,12};
System.out.println("输出数组nums中的元素:" + Arrays.toString(nums));
//输出数组nums中的元素:[25,7,126,53,14,86]

3)使用 foreach 操作数组:foreach 并不是 Java 中的关键字,是 for 语句的特殊简化版本,在遍历数组、集合时, foreach 更简单便捷。从英文字面意思理解 foreach 也就是“ for 每一个”的意思

String[] strArr = {"123","456","789"};
//使用for循环遍历
for (int i = 0;i < strArr.length;i ++) {
    System.out.println(strArr[i]);
}
//使用foreach遍历
for (String str : strArr) {
    System.out.println(str);
}

二、方法

1、知识点概述

1、定义方法
方法由方法头和方法体组成,方法头:修饰符、返回值、方法签名(方法名+参数列表)
形参:定义在参数列表当中的参数;实参:调用方法时传入的值
2、通过传值进行参数传递
调用带参数的方法时,实参的值传递给形参,这个过程称为按值传递
3、重载方法
overload,重载,方法同名,参数列表不同。这里的参数列表不同指的是形式参数的类型或者数量不同,仅仅名字不同是没有用的
编译器在选择重载方法时,会选择实际参数与形式参数匹配最精确的方法进行执行。如果最精确的匹配结果不止一个,就会报错
4、方法的作用域
变量的作用域是指变量可以在程序中引用的范围
在方法中定义的变量称为局部变量
局部变量的作用域是从声明变量的地方开始,到包含该变量的块结束为止
信息的隐藏或者封装指的是:方法的实现细节封装在方法内,对调用该方法的用户隐藏

2、概念

① 访问修饰符有4种:public、protected、default、private
 ② 返回值类型可能是8大基本数据类型、引用类型或无返回值(void)
③ 方法名需符合标识符命名规范、方法名需见名知意、方法名需是小驼峰(类名是大驼峰)
④ 参数列表是该方法需要调用者传入的值(包括参数类型和参数名)
⑤ 方法体中才可编写 Java 语句(并不是所有花括号中都是方法体:如类定义的花括号中不是方法体)

方法体示例:

public class MethodBody {

    // 1.代码块
    {
        System.out.println("【{}】是方法体");
    }

    // 2.静态代码块
    static {
        System.out.println("【static {}】是方法体");
    }

    // 3.方法
    public void run(int age) {
        System.out.println("方法的花括号中是方法体");

        // 4.if
        if (age == 18) {
            System.out.println("if 语句的花括号中是方法体");
        }

        // 5.for
        for (int i = 0; i < age; i++) {
            System.out.println("for 循环的花括号中是方法体");
        }

        // 6.while
        while (age > 50) {
            System.out.println("while 循环的花括号中是方法体");
        }

        // 7.switch-case
        switch (age) {
            // 错误:在该区域写代码是错误的(该区域不是方法体)
            // System.out.println(age); // ERROR
            case 1: {
                System.out.println("switch 语句的 case 语句块是方法体");
            }
        }

        // 8.do-while
        do {
            System.out.println("do-while 循环的花括号中是方法体");
        } while (age < 5);
    }

}

3、定义参数

public class CreateMethodDemo {

    public static void main(String[] args) {
        int sum1 = CreateMethodDemo.sumOne2Hundred(1, 100);
        // sum1 = 5050
        System.out.println("sum1 = " + sum1);

        int sum2 = CreateMethodDemo.sumOne2Hundred(1, 1000);
        // sum2 = 500500
        System.out.println("sum2 = " + sum2);

        int sum3 = CreateMethodDemo.sumOne2Hundred(1, 10000);
        // sum3 = 50005000
        System.out.println("sum3 = " + sum3);
    }

    /**
     * 计算[start, end]的累加和
     *
     * @param start 起始值
     * @param end   结束值
     * @return [start, end]的累加和
     */
    private static int sumOne2Hundred(int start, int end) {
        int sum = 0;

        for (int i = start; i <= end; i++) {
            sum += i;
        }

        return sum;
    }

}

4、可变参数(Variable)

示例::编写程序计算多个整数的和。eg:计算【2, 5, 6, 7, 66, 53】的和

思路1:
可把需要进行求和的整数放入一个整型数组中,并把整型数组作为参数传给 sumByArr 方法
sumByArr 方法接收一个 int 类型的数组作为参数,在 sumByArr 的方法体中通过 for 循环遍历数组中的数字,并进行求和
思路2:
使用可变参数替换 arr 数组

public class VariableParameter {

    public static void main(String[] args) {
        int[] arr = {2, 5, 6, 7, 66, 53};
        VariableParameter vp = new VariableParameter();
        // sumByArr = 139
        System.out.println(vp.sumByArr(arr));
    }

    /**
     * 计算多个整数的和(通过数组)
     *
     * @param arr (数组中存放需要进行求和的多个整数)
     * @return 数组中多个整数的和(类型是字符串)
     */
    private String sumByArr(int[] arr) {
        if (arr == null || arr.length < 1) return "arr 数组为 null, 为数组元素为 0";

        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        return "sumByArr = " + sum; 
    }

}

 可变参数的本质是数组
可变参数必须是方法的参数列表中的最后一个参数

public class VariableParameter {

    public static void main(String[] args) {
        VariableParameter vp = new VariableParameter();
        // 当 sumByVariable1Parameter 的参数列表中一个【值】都没有
        // 的时候, 返回值是可变参数类型的默认值
        int sum = vp.sumByVariable1Parameter(2, 5, 6, 7, 66, 53);
        // sumByVariable1Parameter = 139
        System.out.println("sumByVariable1Parameter = " + sum);
    }

    /**
     * 计算多个整数的和(通过可变参数)
     *
     * @param nums (参数列表中可以放多个需要进行求和的整数)
     * @return 参数列表中多个整数的和(类型 int)
     */
    private int sumByVariable1Parameter(int... nums) {
        int sum = 0;
        for (int i = 0; i < nums.length; i++) {
            sum += nums[i];
        }
        return sum;
    }

}

String 类有静态方法 format 可用于拼接字符,它的底层就用到了【可变参数】 

public class VariableParameter {

    public static void main(String[] args) {
        String info = String.format("name: %s; age: %d; money: %f", 
        							"庆医", 10, 895863.99);
        // info = name: 庆医; age: 10; money: 895863.990000
        System.out.println("info = " + info);
    }
 
}

5、方法的参数传递问题 

1. 基本数据类型:传递原始数据类型参数

基本类型作为参数是值传递
基本类型作为返回值,返回的是值本身
基本类型:byte、short、int、long、float、double、boolean、char

原始参数(eg:int 或 double)通过 value 传递给方法。意味着对参数值的任何更改仅存在于该方法的作用域内。

当方法返回后,栈帧销毁参数消失后,对它们的任何更改都将无效。

示例:

public class ArgumentsPassingTest {

    public static void main(String[] args) {
        int n = 10;
        test(n); // 值传递(v 和 n 没有关系)
        // n = 10
        System.out.println("n = " + n);
    }

    private static void test(int v) { // v = 10
        v = 20;
    }

}

基本类型作为返回值,返回的是值本身

2. 引用数据类型

 引用类型作为参数是引用传递(地址传递)
引用类型作为返回值是引用传递 (地址传递)

引用数据类型参数(例如对象)也按值传递给方法。这意味着当方法返回时,传入的引用仍然引用着与之前相同的对象。但是,如果对象字段的值具有适当的访问级别,则可以在方法中更改它们。

public class ArgumentsPassingTest {

    public static void main(String[] args) {
        int[] nums = {1, 2, 3};
        test(nums);
        // nums = [1, 66, 3]
        System.out.println("nums = " + Arrays.toString(nums));
    }

    private static void test(int[] param) {
        param[1] = 66;
    }

}

引用类型作为返回值是引用传递(地址传递):

public class ArgumentsPassingTest {

    public static void main(String[] args) {
        int[] test = test();

        // test = [1314, 520, 666]
        System.out.println("test = " + Arrays.toString(test));
    }

    private static int[] test() {
        int[] ints = {1314, 520, 666};
        return ints;
    }

}

栈帧销毁销毁的是局部变量信息,堆空间的对象不会被回收的。

3、方法签名

方法签名只由2部分组成:方法名、参数类型

private static void test(double pai, String name, int age) {
    return null;
}

上面方法的方法签名是:test(double, String, int)
在同一个类中,方法签名是唯一的(同一方法签名在同一个类中只能出现一次)

4、方法的重载

重载的方法通过传递给方法的参数的数量和类型来区分。
例如:run(String s) 和 run(int i) 是不同且独特的方法,因为它们拥有不同的参数类型。

 重载:① 方法名相同,参数类型或数量不同;② 重载与返回值类型、参数名称无关
编译器在区分方法时不考虑返回类型,因此即使它们具有不同的返回类型,也不能声明具有相同签名的两个方法。
您不能声明多个具有相同名称和相同数量和类型的参数的方法,因为编译器无法区分它们。

下面的两个方法构成方法重载:

private static int[] test(double weight, String name, int age) {
    return null;
}

private static int[] test(int age, double weight, String name) {
    return null;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值