Java基础知识(JavaSE)总结04

一阶段: JavaSE学习04

1.IDEA:一款强大的开发工具(下载,安装,破解网上搜索即可)

IDEA的运行
  1. 创建Project项目
  2. 创建Module模块
  3. 创建Package包
  4. 创建class类
  5. 在类中编写代码
  6. 完成编译运行
IDEA快捷键使用
/**
 * @author 你的大龙猫啊
 */
/*
需求:常用快捷键  
   psvm + 回车  快速生成main方法
   sout + 回车  快速生成输出语句
   Ctrl + Alt + L 格式化代码
   Alt + Enter  代码修正提示
   Ctrl + C   复制当前行
   Ctrl + V   粘贴
   Ctrl + X   剪切当前行

   Ctrl +/  单行注释
   Ctrl + Shift  多行注释
   Alt + 1  打开\隐藏 工程目录结构
   Alt + 4  打开\隐藏 控制台
   Ctrl + D 向下复制一行
   Ctrl + Shift + ↑ 上移当前行
   Ctrl + Shift + ↓ 下移当前行
 */
public class Demo_ShortCut {
    public static void main(String[] args) {
        System.out.println("快捷键真好用");
    }
}

2.数组

**定义:**数组就是存储数据长度固定的容器,存储多个数据的数据类型要一致。

数组特点:
1, 数组一旦初始化长度不能发生改变
2, 存储同一种数据类型的多个值
3, 有索引(下标\角标)
最小的索引是:0
最大的索引是:数组名.length-1

数组的定义格式

数组定义格式:
//int [] arr 读法是:定义了一个int类型的数组,数组名是arr (推荐使用)
//int arr [] 读法是:定义了一个int类型的变量 变量名是arr数组

数组的动态初始化
什么是动态初始化?

​ 数组动态初始化就是只给定数组的长度,由系统给出默认初始化值

动态初始化格式:
数据类型[] 数组名 = new 数据类型[数组长度];
int[] arr = new int[3];
动态初始化格式详解:
  • 等号左边:

    • int:数组的数据类型

    • []:代表这是一个数组

    • arr:代表数组的名称

  • 等号右边:

    • new:为数组开辟内存空间
    • int:数组的数据类型
    • []:代表这是一个数组
    • 5:代表数组的长度

动态初始化默认值(理解)

数据类型默认值
整数0
浮点数0.0
字符空字符
布尔类型false
引用类型null
/**
 * @author 你的大龙猫啊
 */
/*
数组:数组是一种容器,用来存储(同种数据类型)的多个值
数组弊端:长度不可以发生改变
 */
public class Demo16_ArrayFormat {
    public static void main(String[] args) {
        //数组定义格式
            //int [] arr  读法是:定义了一个int类型的数组,数组名是arr  (推荐使用)
            //int arr []  读法是:定义了一个int类型的变量 变量名是arr数组

        // Java中的数组必须先初始化,然后才能使用。
        // 所谓初始化:就是为数组中的数组分配内存空间,并为每个元素赋值
        // 数组初始化方式:动态初始化和静态初始化
           //动态初始化:初始化值指定数组长度,由系统为数组分配初始值
           //格式:数据类型 [] 变量名 = new 数据类型[数组长度]
           //范列: int [] arr = new int[3];  3代表数组长度也表示数组元素个数

        int [] arr = new int[3];//[I@17327b6  @分隔符      [:当前空间是一个数组类型
        System.out.println(arr);//            I:当前数组容器所存储的数据类型  17327b6 十六进制内存地址
        //输出数组中的元素
        System.out.println(arr[0]);  //0
        System.out.println(arr[1]);  //0
        System.out.println(arr[2]);  //0
        //给元素赋值
        arr[0] = 100;
        arr[2] = 200;
        //再次输出
        System.out.println(arr[0]);  //100
        System.out.println(arr[1]);  //0
        System.out.println(arr[2]);  //200

        //数组在动态初始化时,会为存储空间添加默认值
        //整数:默认值0   浮点数:默认值为0.0
        //布尔值:默认值为false   字符;默认值是空字符  引用数据类型:默认值是null

        //栈内存:存储局部变量   定义在方法中的变量 列如arr 使用完毕,立即消失
        //堆内存:存储new出来的东西都有一个地址值,使用完毕,会在垃圾回收机器空闲时被回收

        //数组初始值之静态初始化
        //数据类型 [] 变量名 = new 数据类型[] {数据1,数据2,数据3,......};
        //数据类型 [] 变量名 ={数据1,数据2,数据3,......};

        //数组常见问题: 1.索引越界   2.空指针异常
        }
}

思考:

​ 数组可以存储什么样的类型?

​ 基本数据类型 和引用数据类型都可以? ------都可以

3内存分配

内存概述

​ 内存是计算机中的重要原件,临时存储区域,作用是运行程序。

​ 我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的。

​ 必须放进内存中才能运行,运行完毕后会清空内存。

​ Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。

java中的内存分配
  • 目前我们只需要记住两个内存,分别是:栈内存和堆内存
区域名称作用
寄存器给CPU使用,和我们开发无关。
本地方法栈JVM在使用操作系统功能的时候使用,和我们开发无关。
方法区存储所有编译之后的class文件,要用的class文件
堆内存(有地址值,有默认值)存储对象或者数组,new来创建的,都存储在堆内存。
栈内存(先进后出)方法运行时使用的内存,比如main方法运行,进入方法栈中执行。
Java内存分配-一个数组内存图在这里插入图片描述
两个数组内存图在这里插入图片描述
多个数组指向相同内存图在这里插入图片描述

4.数组的静态初始化

什么是静态初始化:

在创建数组时,直接将元素确定

什么是静态初始化

​ 在创建数组时,直接将元素确定

静态初始化格式
public class Demo_StaticArray {
    /*
        数组静态初始化 : 初始化时指定每个数组元素的初始值,由系统决定数组长度
        完整格式:
                    数据类型[] 数组名 = new 数据类型[]{数据1,数据2,数据3...};
        简化格式:
                    数据类型[] 数组名 = {数据1,数据2,数据3...};
     */
    public static void main(String[] args) {
        // 数据类型[] 数组名 = new 数据类型[]{数据1,数据2,数据3...};
        int[] arr = new int[]{11,22,33};
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);

        // 数据类型[] 数组名 = {数据1,数据2,数据3...};
        int[] arr2 = {44,55,66};
        System.out.println(arr2);
        System.out.println(arr2[0]);
        System.out.println(arr2[1]);
        System.out.println(arr2[2]);
    }
}

5.数组操作的两个常见问题

索引越界异常
public class ArrayDemo {
    public static void main(String[] args) {
        int[] arr = new int[3];
        System.out.println(arr[3]);
    }
}

错误原因: 数组长度为3,索引范围是0~2,但是我们却访问了一个3的索引。

​ 程序运行后,将会抛出ArrayIndexOutOfBoundsException 数组越界异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。

解决方案:

​ 把索引改为正确范围内的即可!

空指针异常
public class ArrayDemo {
    public static void main(String[] args) {
        int[] arr = new int[3];
        //把null赋值给数组
        arr = null;
        System.out.println(arr[0]);
    }
}

**错误原因: **arr = null 这行代码,意味着变量arr将不会在保存数组的内存地址,也就不允许再操作数组了,因此 运行的时候会抛出 NullPointerException 空指针异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。

解决方案:

​ 给数组一个真正的堆内存空间引用即可!

6.数组遍历

/**
 * @author 你的大龙猫啊
 */
/*
需求:获取数组中的最大值和最小值
 */
public class Demo18_ArrayMax {
    public static void main(String[] args) {
        int [] arr = {62,45,59,98,73,60};
        int max = arr[0];
        int min = arr[0];
        //arr.fori  正向遍历    arr.forr  反向遍历
        for (int i = 0; i < arr.length; i++) {
            if(arr[i]>max){
                max =arr[i];
            }
            if(arr[i]<min){
               min=arr[i];
            }
        }
        for (int i = arr.length - 1; i >= 0; i--) {
            System.out.println(i);
        }
        System.out.println("数组最大值为:"+max+"\n数组最小值为:"+min);
    }
}

数组综合案例应用:
import java.util.Scanner;
/**
 * @author 你的大龙猫啊
 */
/*
需求:在编程竞赛中,有6个评委为参赛的选手打分,分数为0-100的整数分。
       选手的最后得分为:去掉一个最高分和一个最低分后的4个评委平均值(不考虑小数部分)
 */
public class Demo24_Judges {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[] arr = new int[6];
//个人建议:一个for循环完成一件事(基础的时候容易理解)
        for (int i = 0; i < arr.length; i++) {
            System.out.println("请输入第:" + (i + 1) + "个评委打分");
            int score = sc.nextInt();
            if (score >= 0 && score <= 100) {
                arr[i] = score;
            } else {
                System.out.println("您的评分有误,请检查是否输入值为0-100之间");
                i--;
            }
        }
        int max = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (max < arr[i]) {
                max = arr[i];
            }
        }
        int min = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (min > arr[i]) {
                min = arr[i];
            }
        }
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum += arr[i];
        }
        System.out.println("选手最后的分为:" + (sum - max - min) /(arr.length-2));
    }
}

下一篇:Java基础知识(JavaSE)总结05

上一篇:Java基础知识(JavaSE)总结03

提升拓展篇:Java基础总结04拓展

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值