目录
数组在计算机中的执行原理
Java内存分配介绍
数组的执行原理
多变量指向同一数组
数组案例
求最大值
数组反转
随机排名
Debug工具的使用
程序都是在内存中执行的,Java程序编译之后会产生一个class文件,然后将这个class文件提取到内存中正在运行的虚拟机里面去执行的。
Java为了便于虚拟机执行这个Java程序,它将虚拟机中的内存区域进行了划分:
目前重要的是关注前三块。
其中,方法区是放置我们编译之后的class文件的,也就是字节码文件。
栈是方法运行时所进入的内存, 由于变量是在方法里的,所以变量也是在这块内存中。
也就是说,一个类中的main方法要执行的时候,它是把main方法提到栈里面来进行执行的。
堆里面放的都是new出来的东西,它会在堆内存中开辟空间并产生地址。
例如数组就是放在堆内存中的。大致了解前三块区域,以后会逐个进行祥解,接下来我们了解一下数组的执行原理。
int a = 20;
int[] arr = new int[3];
当多个数组变量指向同一个数组对象时,它们存储的数组对象的地址都是一样的;因而导致多个变量修改的都是同一个数组对象中的数据。
如果某个数组变量中存储的是null值,代表这个数组变量没有指向数组对象,不能用这个数组变量去访问数据或者访问数组长度。
1、多个数组变量,指向同一个数组对象的原因是什么?需要注意什么?
2、如果某个数组变量中存储的null,代表什么意思?需要注意什么?·
颜值 15 9000 10000 20000 9500 -5 找出最高颜值。
实现步骤:
public class MaxMizing
{
public static void main(String[] args)
{
//接入颜值数据
int[] faceScores = {15,9000,10000,20000,9500,-5};
//定义记录颜值最大值的变量,初始化为数组的第一个数据
int Max = faceScores[0];
//遍历数据找出最大值
for(int i = 1; i < faceScores.length; i++)
{
if(faceScores[i] > Max)
{
Max = faceScores[i];
}
}
System.out.println("最高颜值是:" + Max);
}
}
需求:
某个数组有5个数据:10,20,30,40,50,请将这个数组中的数据进行反转。
反转前: [ 10,20,30,40,50 ]
反转后: [ 50,40,30,20,10 ]
数组的反转操作,实际上就是依次前后交换数据即可实现。
public class ReverseArray
{
public static void main(String[] args)
{
//准备需求中的数组
int[] arr = {10,20,30,40,50};
//循环依次交换数组第一个和最后一个的数据
int i,j;
for(i = 0,j = arr.length - 1; i < j;i++,j--)
{
//交换数据(可以有多种方法)
arr[i] = arr[i] ^ arr[j];
arr[j] = arr[i] ^ arr[j];
arr[i] = arr[i] ^ arr[j];
}
//输出反转之后的数组
for(int a = 0; a < arr.length; a++)
{
System.out.print(arr[a] + " ");
}
}
}
需求:
某公司开发部5名开发人员,要进行项目进展汇报演讲,现在采取随机排名后进行汇报。请先依录入5名员工的工号,然后展示出一组随机的排名顺序。
import java.util.Random;
import java.util.Scanner;
public class RandomRanking
{
public static void main(String[] args)
{
//先定义一个动态初始化的数组
int[] codes = new int[5];
//提示用户录入5名员工的工号
Scanner sc = new Scanner(System.in);
int i;
for(i = 0; i < codes.length;i++)
{
System.out.println("请您输入当前第" + (i + 1) + "个员工的工号:");
int code = sc.nextInt();
codes[i] = code;
}
//将数组打乱
Random r = new Random();
for(i = 0; i < codes.length;i++)
{
int index = r.nextInt(codes.length); // 0-4
int temp = codes[index];
codes[index] = codes[i];
codes[i] = temp;
}
//输出打乱后的员工工号
for (i = 0; i < codes.length;i++)
{
System.out.print(codes[i] + " ");
}
}
}
基本使用步骤
END
学习自:黑马程序员——JavaSE课程