数组的定义及应用 java中的内存分配

1.数组(一维数组)
2.数组的定义格式
3.数组的初始化
4.Java中的内存分配的区域
5.创建一个数组
6.数组的基本引用
	遍历数组
	数组的最值问题
	数组的元素查找
	数组的排序
需求:输入一个整数,输出它是几位数?   //s=n/10;
	特例:
		录入0~9----就是一位 当条件不成立的时候,至少得执行一次,故而使用do while 循环
		
需求:输入一个大于1的整数,判断是否为质数(合数:能被除过1和他本身之外的其他自然数整除的自然数)

注意:
1)如果输入的数据太大,为了提高程序得执行效率,使用Math.sqrt()开方再循环确定
for(int i=;i<=Math.sqrt(num);i++){
	if(num%i==0){
	System.out.println("不是质数");
	}
}
2)对于输入数据的需求,必须考虑边界数据
3)如果在某种条件下想直接结束方法就可以使用return来完成这个功能


alt+enter:在idea中 ------鼠标放到;后面,按键则在前面自动补全 
Math.abs()   //求绝对值方法
Math.sqrt()  //开平方根方法
		

数组

需求:
	公司有80个员工,给80个员工发工资,使用Java程序进行去操作(需要80个变量,不易操作,数组就出现了)
	
JavaSE中容器:
	数组
	StringBuffer:字符串缓冲区
	集合
	
	
数组(其实质也是一个变量)
	格式:
		数据类型[] 变量名称;(推荐使用)
		数据类型  变量名称[];
	初始化:
		第一种:动态初始化
		第二种:静态初始化
		
		动态初始化:给定数组的长度,元素由系统默认初始化
			格式:
				数据类型[] 数组名称=new 数据类型[长度];(推荐)
				数据类型 数组名称[]=new 数据类型[长度];
		例子:  int[] arr=new int[3]
		[I@1540e19d:
			[:数组	I:int类型		@地址符号标记



		静态初始化:
			格式
				数据类型[] 数组名称=new 数据类型[] { 元素1,元素2,元素3}
				数据类型 数组名称 []=new 数据类型[]{元素1,元素2,元素3}
				
				简写格式:
					数据类型[]数组名={元素1,元素2,元素3}
					
					
数组的应用之遍历
	printArry(数组名);
	for(int i=1;i<=arr.length;i++){  //length是Java中数组内置的属性,获取数组的长度
		System.out.println(arr[i]);
	}
数组的最大下标值(索引值):arr.length-1

如何确定数组的元素:
	数组名称 [索引值](索引值从0开始)

注意:一旦数组创建,内存地址确定,不再发生改变,除非重新new数组

	
Java中的内存分配
1)栈内存  :存储一些局部变量(在方法中定义或者方法声明上的变量)
2)堆内存 :new 出来的东西都存储在里面
3)方法区:class区域(字节码文件)
		static区域
		字符串常量区域
4)本地方法区:和系统相关
5)寄存器:和cpu有关

		
		
栈内存:(先进后出)(压子弹)
	进栈的方式:压栈
	出栈的方式:弹栈
队列:(先进先出)

不同的栈内存指向同一个堆内存(将某个对象的地址赋值给另一个数组)

数组是引用数据类型,不是基本数据类型
引用类型变量是通过垃圾回收器(GC)空闲的时候去回收的,不需要程序员手动关闭资源,(在Java中,需要手动操作的都是底层非Java语言实现的)

数组中常见的两个异常:
	引用类型----出现空指针异常
		   数组为空(null)----再进行访问其中的元素就会出现空指针异常---属于运行时出现的错误    
            解决方案:对对象进行判断,如果不为空,再进行访问
	数组----角标越界异常
	访问的角标超出了数组的长度----属于运行时出现的错误
	
	
程序调试(debugm模式运行)
	先打断点 (断点位置:有效代码的第一行)
数组的基本元素查找法:
	查询一个数组中的某个元素第一次在数组中出现的索引值(不考虑重复)
	//Java中:查询数组元素,找不到的话返回负数
数组遍历
	遍历方法代码:
		public static void arrT(int []arr){

        System.out.print("[");
        for(int i=0;i<=arr.length;i++){
            if(i==arr.length){
                System.out.print("]");
            } else{
                System.out.print(arr[i]+",");
            }
        }
    }
数组元素冒泡排序
	排序方法代码:
		public static void sort(int []arr){
        for(int i=0;i<arr.length-1;i++){
                for(int j=0;j<arr.length-1-i;j++){      //双层循环嵌套使用,每次循环一遍将最大值排到最后面,
                    if(arr[j]>arr[j+1]){            //最后面,每次循环结束,下回比较的数就少一个
                        int temp =arr[j];             //利用中间变量的方法进行数据的交换,即完成向
                        arr[j]=arr[j+1];            //右排序的动作,双层循环执行完就将数据整个完成了排序
                        arr[j+1]=temp;
                }
            }
        }
    }
数组元素之逆序
	逆序方法代码:
		 public static void reverse(int[]arr){
        
            for(int j=0;j<=arr.length/2;j++){
                int temp =arr[j];
                arr[j]=arr[arr.length-1-j];
                arr[arr.length-1-j]=temp;

            }
        
    }
数组元素索引
代码如下 public static int index(int[]arr,int key){
        int index=-1;
        for(int i=0;i<arr.length;i++){
            if(key==arr[i]){
                index=i;
                break;
            }

        }
        return index;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值