一、数组
-
用于存储一组相同数据类型的容器
-
数组动态初始化
-
int[] a=new int[3]
-
-
数组静态初始化
-
int[] a={1,2,3}
-
int[] a=new int[]{1,2,3}
-
-
数组的循环操作
-
通过for循环
-
通过增强for
-
package com.la; import java.util.Scanner; public class Average { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int sum=0; int[] a=new int[5]; for (int i =0 ; i < 5; i++) { if (a==null&&a.length<=0) break; System.out.println("请输入第"+i+"同学的成绩:"); int input = scanner.nextInt(); a[i]=input; sum+=a[i]; } System.out.println("平均分为:"+sum/5); test(a); } public static void test(int[] a){ if (a!=null&&a.length>0){ for (int i : a) { System.out.println(i); } } } }
-
-
求数组的最大值
-
package com.la; public class Max { public static void main(String[] args) { int[] b={10,60,33,22,78,55}; System.out.println(max1(b)); System.out.println(max2(b)); } public static int max1(int[] a){ int max=0; if(a!=null&&a.length>0){ max=a[0]; for (int i = 1; i < a.length-1; i++) { if (max<a[i]){ max=a[i]; } } } return max; } public static int max2(int[] a){ int max=0; if (a!=null&&a.length>0){ for (int i = 1; i < a.length-1; i++) { if (a[i]>a[max]) max=i; } } return a[max]; } }
-
-
数组前后交换
-
package com.la; public class Change { public static void main(String[] args) { int[] b={1,2,3,4,8,7}; change1(b); } public static void change1(int[] a){ int temp; for (int i = 0; i <= a.length/2; i++) { temp=a[i]; a[i]=a[a.length-1-i]; a[a.length-1-i]=temp; } for (int i : a) { System.out.println(i); } } }
-
二、jvm的划分
2.1 java虚拟机栈
- 线程私有,生命周期与线程一致,用于描述java方法执行的内存模型。
- 每个栈帧存储者局部变量表、操作数栈、动态链接、方法出口等信息。
2.2 本地方法栈
- 由于java无法直接操作指针去操作内存,所有java提供了Native关键字,可以调用c/c++写的本地本地方法库。
- 使得java虚拟机除了可以执行java方法服务(字节码),也可以使用到Native方法服务
2.3 java堆
- jvm所管理的内存中的最大一块,线程共享,主要存放对象实例和数组
- 内部会划分出多个线程私有的分配缓冲区(Thread Local Allocation Buffer),可以物理上不连续,但逻辑上连续
2.4 方法区
- 属于共享内存区域,存储已被虚拟机加载的类信息、常量、静态变量、即时编译后的代码等数据
2.5 程序计数器
- 内存空间小,线程私有
- 字节码的解释器工作就是通过改变计数器的值来执行下一条字节码指令
- 分支、循环、跳转、异常处理、线程恢复等都依赖它
2.6 运行时常量池
- 方法区的一部分,存放了编译期生成的各种字面量和符号引用
三、练习
3.1 打印1
package com.la;
public class Work1 {
public static void main(String[] args) {
System.out.println("本次活动特价商品有:");
String[] b={"Mike背包","Adidas运动衫","李宁运动鞋","Kappa外套","361腰包"};
print(b);
}
public static void print(String[] a){
for (int i = 0; i < a.length; i++) {
System.out.println(a[i]);
}
}
}
3.2 打印2
package com.la;
import java.util.Scanner;
public class Work2 {
public static void main(String[] args) {
System.out.println("请输入会员本月的消费记录");
Scanner scanner = new Scanner(System.in);
double[] a=new double[5];
double sum=0;
for (int i = 1; i < 6; i++) {
System.out.print("请输入第"+i+"购物金额:");
double v = scanner.nextDouble();
a[i-1]=v;
sum+=v;
}
System.out.println();
System.out.println("序号\t\t\t\t\t金额(元)");
for (int i = 1; i <=a.length ; i++) {
System.out.println(i+"\t\t\t\t\t"+a[i-1]);
}
System.out.println("总金额\t\t\t\t"+sum);
}
}