Java基础Day04

1 IDEA开发工具

需要的IDEA工具的找我吧,发不了。

1.1 IDEA安装

​ 注意:建议指定自定义安装路径。

​ 详细步骤参考笔记中的《IDEA安装详解.pdf》文档。

1.2 IDEA工具

需要的IDEA工具的私我下。

1.3 创建IDEA工程

创建工程(Project) --> 模块 (Module) -->建包(文件夹) --> 创建java文件,编写代码

需求:使用idea工具创建工程,运行HelloWorld案例。

步骤:

​ 1、创建空工程javaBase。Create New Project —> Empty Project

​ 2、创建新模块day04。File —> New —> Module

​ 3、在模块的src下创建包com.itheima.demo1。 New —> Package

​ 4、在包中新建一个类HelloWorld。 New —> Java Class

​ 5、编写代码并执行程序。

图解:

1 创建工程
在这里插入图片描述
2 创建模块
在这里插入图片描述
3 创建包和类
在这里插入图片描述
注意:

1. 模块下有src文件夹,所有java代码必须写在src文件夹下。
2. 通常在src下创建包,包中再创建类,通过不同的包管理所有类。
1.4 idea中的项目结构

Project:

​ Project在IDEA中表示一个完整的工程。一个工程下面可以包含多个模块,即一个Project包含多个Module。

Module:

​ Module即模块,依赖于工程而存在。模块下有src目录,java代码必须写在src。开发时一般会在src下先创建包,再创建类编写代码。

总结:

​ 一个Project工程下可以有多个Module模块,模块的src下可以有多个Package包,一个包下可以有多个java类文件。
在这里插入图片描述

1.5 IDEA基本设置
  • 字体设置 File->Settings->Editor->Font。
    在这里插入图片描述
    背景设置 File->Settings->Appearance & Behavior->Appearance->Theme (Darcula为经典黑色)
    在这里插入图片描述
    修改注释颜色 File–>Setting–>Editor–>Color Scheme -->Language Defaults–>Comments
    在这里插入图片描述
    系统设置 File -> Settings -> Appearance & Behavior -> System Settings
    在这里插入图片描述
    在这里插入图片描述
    更多设置请参考《idea使用教程.pdf》文档
1.6 IDEA常用快捷键
快捷键功能
Ctrl + /添加或取消单行注释
Ctrl + Shift + /选中代码注释,多行注释,再按取消注释
Ctrl + Alt + L格式化代码
Ctrl + Y删除光标所在行
Ctrl + D复制光标所在行的内容,插入光标位置下面
Alt + Shift + 上下箭头移动当前代码行
Ctrl + Alt + Space自动代码补全提示
psvm快速生成main方法
sout快速生成打印语句
fori快速生成for循环语句
1.7 IDEA模块操作

模块导入

File --> Porject Structure --> Modules --> 加号 --> Import Module

选择【模块名称】或者对应的【 模块名.iml 】文件即可完成导入。
在这里插入图片描述
方式2:File --> Porject Structure --> Modules --> 选择模块 --> 减号 --> Yes
在这里插入图片描述
注意:模块删除只是删除在IDEA中的工程目录,不会删除磁盘下的模块文件夹。

创建idea工程:
	创建工程-->创建模块-->在src中建包--->在包中建类

idea中的项目组成:
	一个工程是idea中管理的代码的单位,工程中可以创建多个模块,模块中可以创建多个包,包中可以创建多个类

idea的快捷键
    单行注释:  Ctrl + /
    多行注释:  Ctrl + Shift + /
    格式化代码:  Ctrl +  Alt + L
    快速生成main方法: psvm + 回车
    快速生成输出语句 : sout + 回车

工程中有模块文件夹, 
有out目录,存放class文件的地方
.idea 文件夹 : 存放工程的管理和配置文件.
    
模块中:
模块名.iml :模块的配置文件, 导入模块时可以选择该文件导入模块

2 数组

得到50位同学的成绩

2.1 数组的作用和特点

​ 作用:数组可用于存储同一类型的多个数据,是一个java的数据容器。

​ 特点:数组长度固定,所存数据类型一致。

2.2 数组的定义格式
//【格式1】(掌握)array
数据类型[]  数组名

//示例
int[] arr
boolean[] arr
double[]  arr
//【格式2】(了解)
数据类型  数组名[]

//示例
double arr[]

什么是数组初始化?**
java中变量使用前必须完成初始化,数组也一样,需要完成初始化才能使用。

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

​ 数组的初始化分为:

​ 动态初始化

​ 静态初始化

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

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

动态初始化的格式
数据类型[]  数组名 = new 数据类型[数组长度];
double[]  arr = new double[50]; 
//数组动态初始化
//定义长度为3的int数组
int[] arr = new int[3];

//定义长度为5的double数组
double[] arr = new double[5];

//定义长度为5的char数组
char[]  arr = new char[5];

//定义长度为4的字符串数组
String[] arr = new String[4];
格式说明

int[] arr = new int[5];

  • 等号左边:
    • int:数组的数据类型
    • []:代表这是一个数组
    • arr:代表数组的名称
  • 等号右边:
    • new:为数组开辟内存空间
    • int:数组的数据类型
    • []:代表这是一个数组
    • 5:代表数组的长度
2.4 数组元素访问

数组变量存储的是什么?

​ 数组在堆内存中的地址值

什么是索引?

​ 数组索引:数组元素的编号,从0开始,最大值为数组长度-1。

​ 可以通过索引操作数组元素。

数组元素访问的格式?

数组名[索引]
public class ArrayDemo {
    public static void main(String[] args) {
        //定义并初始化长度为3的int数组
        int[] arr = new int[3];

        //输出数组名,得到一个地址值
        System.out.println(arr);  //[I@880ec60

        //输出数组中的元素
        System.out.println(arr[0]); //默认值0
        System.out.println(arr[1]); //默认值0
        System.out.println(arr[2]); //默认值0
    }
}

2.5 JVM的内存分配(了解)
在这里插入图片描述
各个内存区的作用

区域名称作用
栈内存(Stack)方法运行时使用的内存,存放方法中的变量和参数。
堆内存(Heap)存储对象或数组,new出来的数据,都存储在堆内存。
方法区存储已加载的class文件信息。
寄存器给CPU使用,和我们开发无关。
本地方法栈JVM在使用操作系统功能的时候使用,和我们开发无关。

目前我们只需要关注栈内存和堆内存。

​ 栈内存:栈中存放局部变量,方法执行完毕,内存释放。

​ 堆内存:堆中存放的是new出来的数据( 数组,对象等 )。数据使用完毕后,等待垃圾回收器回收。

​ new出来的数据, 都有一个对应的地址

2.6 数组的内存图

数组元素的默认初始化值

整数类型  0
浮点类型  0.0
字符类型  空字符 ' '
布尔类型  false
引用类型  null   

一个数组的内存图
在这里插入图片描述
多个数组的内存图在这里插入图片描述

多个数组指向相同的内存地址

其中任意一个数组改变了堆中元素的值,其他的数组都会受到影响
在这里插入图片描述

2.7 数组的静态初始化

动态初始化格式

特点: 给定数组长度, 系统给出数组默认值

数据类型[] 数组名 = new 数据类型[数组长度];

数组名[索引] = 初始化值;

什么是静态初始化

​ 在创建数组时,直接确定元素的值。

静态初始化的格式
数据类型[]  数组名  =  new  数据类型[]{元素1, 元素2, 元素3...}

//示例

静态初始化简化格式(掌握)

数据类型[]  数组名  =  {元素1, 元素2, 元素3...}//示例

创建一个double类型数组,存放:1.1, 2.2, 3.3 
double[] arr = new double[]{1.1 ,2.2 , 3.3}; 
double[] arr = {1.1 ,2.2 , 3.3};
    
创建一个字符类型数组,存放: '中'  '国'
char[] arr = {'中' , '国'};
    
创建一个布尔类型数组,存放:true true false 
boolean[] arr = {true, true, false};
【练习】下面创建数组错误的是( C  )
	A、 int[] arr = new int[5];
	B、 int arr[] = new int[5];
	C、 int[] arr = new int[3]{1,2,3}; 
		//int[] arr = new int[]{1,2,3};
		//int[] arr = {1,2,3};

【练习】下面为数组初始化正确的写法是( A  )
	A: double c[]=new double[]{1,2}	 
	B: double c[]=new double1,2// double c[]=new double[]{1,2}
	C: double c[]=new double[](1,2)	 //double c[]=new double[]{1,2}	
	D: double c[]=new double{1,2}	//double c[]=new double[]{1,2}
	E: double c[]=new double[2]{1,2} //double c[]=new double[]{1,2}

【总结】数组的动态初始化和静态初始化的区别:

动态初始化:
	只给出数组长度,系统给出默认值
	int[] arr = new int[10];
	
静态初始化:
	只给出元素的值. 系统给出长度
	int[] arr = new int[]{1,2,3};
	int[] arr = {1,2,3};

使用场景:
	键盘录入50位同学的成绩: 使用动态初始化,创建长度为50的数组, 再为每一个元素赋值.
    当数组元素的值是确定的时候,使用静态初始化
2.8 数组操作的常见问题

1、数组索引越界异常:ArrayIndexOutOfBoundsException

​ 产生原因:访问到了数组中不存在的索引。

​ 如何避免:在索引范围内访问数组元素。

/*
 * 数组索引越界异常的产生:使用了不存在的索引
 */
public class TestArray5 {
	public static void main(String[] args) {
		int[] arr = {10,20,30}; //索引0 1 2
		//下面代码会运行报错,因为arr索引范围为0~2,-1和3都不在范围内
		System.out.println( arr[-1] ); 
		System.out.println( arr[3] ); 
	}
}

在这里插入图片描述
2、空指针异常:NullPointerException

​ 产生原因:数组地址为null,此时操作数组元素就会报空指针异常。

​ 注意:一旦出现空指针异常,要在代码中进行修改或进行非空判断,避免空指针异常产生。
在这里插入图片描述

/*
 * 空指针异常的产生:操作了地址为null的数组
 */
public class TestArray5 {
	public static void main(String[] args) {
		int[] arr = {10,20,30};
		//将数组地址置为null
		arr = null;
		//以下代码会报空指针异常
		System.out.println( arr[0] ); 
	}
}
2.9 数组的遍历
获取数组长度

​ 数组名.length

遍历数组
//for循环进行数组遍历
public class ArrayDemo2 {
    public static void main(String[] args) {
        //定义数组
        int[] arr = {11, 22, 33, 44, 55};

        //使用for循环遍历并打印
        for(int i=0; i <arr.length; i++) {
            System.out.println(arr[x]);
        }
    }
}
2.10 求数组最值

需求:求数组最大值

分析:打擂台思想

步骤:

​ 1、定义临时变量max,存储数组最大值,并假设第一个元素为最大值。

​ 2、遍历数组,从第二个元素开始,逐个与max比较。

​ 3、如果该元素比max变量还大,将该元素赋值给max变量。

​ 4、循环结束后,max中存储的就是数组的最大值。

实现代码:

/*
 * 需求:求出数组的最大值、最小值
 */
public class ArrayDemo3 {
	public static void main(String[] args) {
		//定义数组
		int[] arr = {45,12,98,73,60};
		
		//------------求数组最大值------------    
		//定义变量存放数组最大值,并假设第一个元素为最大值
		int max = arr[0];
		//从第二个元素开始,依次和max变量比较
		for(int i=1; i<arr.length; i++){
			//如果比max大的,就替换max的值
			if( arr[i]>max ){
				max = arr[i];
            
			}
		}
		//循环结束后max存放的就是最大的值
		System.out.println("最大值为:"+ max);

		//------------求数组最小值------------
        
		//假设第一个元素是最小的
		int min = arr[0];
		//从第二个元素开始,依次和min变量比较
		for(int i=1; i<arr.length; i++){
			//如果比min小的,就替换min的值
			if( arr[i]<min ){
				min = arr[i];
			}
		}
		//循环结束后,打印最小值
		System.out.println("最小值为:" + min);
	}
}
数组
	特点:	长度一致, 类型相同
	
初始化格式:
	动态初始化
		int[] arr = new int[5];
		赋值:
		arr[0] = 10;

	
	静态初始化
		标准写法:
		int[] arr = new int[]{1,2,3};
		
		简化写法
		int[] arr = {1,2,3};

索引:
	数组元素的编号,0 开始, 到数组长度-1为止
	
获取数组长度:
	数组名.length
	
数组遍历
int[] arr = {1,2,3};
for(int i = 0; i<arr.length; i++){
	//遍历的操作 arr[i]
    System.out.println( arr[i] );
}

//数组元素求和
int[] arr = {1,2,3};
int sum = 0;
for(int i=0; i<arr.length; i++){
    sum+=arr[i];
}
System.out.println( sum );

数组常见小问题:
    索引越界异常  ArrayIndexOutOfBoundsException
		访问了不存在的索引
	空指针异常 NullPointerException
		数组没有指向任何堆内存地址  int[] arr = null;

JVM内存分配
    栈内存 : 存储局部变量, (main)方法里定义的变量
    堆内存 : new出来的对象或数组
    方法区 
    寄存器
    本地方法栈  
    
数组的内存图
	int[] arr = new int[5];

new int[5]在堆中创建了一个长度为5的数组. 并将数组的地址返回给变量 arr ,arr存储在栈内存中.
方法执行完毕, 栈内存中的变量arr就会消失, 堆中创建出来的数组等待垃圾回收器的回收 (不可达)
    
多个数组指向相同的内存空间: int[] arr2 = arr;
其中任意一个数组改变元素的值, 另外的所有数组都会受到影响.	

加强练习:手机验证码

/*
	需求:定义数组,存储6位手机验证码
		 要求验证码为随机生成的0~9之间的整数,且不能重复。
*/
public class RandomNum {
    public static void main(String[] args) {
        //静态初始化数组
        int[] arr = {-1,-1,-1,-1,-1,-1};
        
        Random r = new Random();
        
        //定义一个记录数组索引的变量
        int index = 0;
        
        loop:while(true){
            //生成随机数
            int num = r.nextInt(10);
            
            //将num在数组中遍历,如果在数组中存在,则重新生成随机数
            for(int i=0 ;i<=index; i++){

                if( num==arr[i] ){
                    continue loop;
                }
            }
            
            //如果代码能走到这里,说明num在数组中不会重复
            arr[index++] = num;  //index的范围0~5
            //index++;
            
            if(index==6){
                break;
            }
        }
        System.out.println(Arrays.toString(arr));
    }
}
package com.itheima.test;

/*
    生成网站登录验证码:
        4位
        组成包括 数字0—9  英文大写小写, 随机生成
*/

import java.util.Random;

public class CharTest {

    public static void main(String[] args) {
        //随机数工具类
        Random r = new Random();

        for(int i=0; i<4; i++){

            int number = r.nextInt(3); //0 1 2

            switch (number){
                case 0:
                    //随机生成数字0—9
                    int num1 = r.nextInt(10);
                    System.out.print(num1);
                    break;
                case 1 :
                    //随机生成英文大写 65 -90
                    int num2 = r.nextInt(26)+65;
                    System.out.print((char)num2);
                    break;
                case 2:
                    //随机生成英文小写97 -122
                    int num3 = r.nextInt(26)+97;  //0~25 + 97
                    System.out.print((char)num3);
                    break;
            }
        }
    }
}
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值