Java中的内存分配
- 栈内存:方法运行时进入的内存,局部变量都存放于这块内存中
- 堆内存:new出来的内容都会进入堆内存,并且会存在地址值
- 方法区:字节码文件(.class文件)加载时进入的内存
- 本地方法栈:调用操作系统相关资源
- 寄存器:交给CPU去使用
数组
数组静态初始化和动态初始化对比
- 动态初始化:手动指定数组长度,由系统给出默认初始化值
- 静态初始化:手动指定数组元素,系统会根据元素个数计算出数组长度
- 应用场景:
1.动态初始化:只明确元素个数,不明确具体值,推荐使用动态初始化
2.静态初始化:已经明确了具体操作数据,推荐直接静态初始化
代码
数组
package cn.cdw.demo;
public class Demo11 {
public static void main(String[] args) {
int[] arr1=new int[6];
int[] arr2={1, 4, 2, 3, 8};
System.out.println("输出的是数字的内存地址为:" + arr1);
System.out.println("数组未赋值,所以输出默认值为:"+arr1[0]);
arr1[0]=10;
System.out.println("赋值后数组索引0的数值为:"+arr1[0]);
System.out.println("静态初始化数组索引0的数值为:"+arr2[0]);
}
}
数组常见异常(ArrayIndexOutOfBoundsException,NullPointerException)
- ArrayIndexOutOfBoundsException:索引越界异常,访问数组中不存在的索引对应的元素造成的索引越界问题
- NullPointerException:空指针异常,访问的数组已经不再指向堆内存的数据,造成的空指针异常
package cn.cdw.demo;
public class Demo12 {
public static void main(String[] args) {
int[] arr1 = new int[6];
arr1 = null;
System.out.println(arr1[0]);
}
}
找出数组中的最大值
package cn.cdw.demo;
public class Demo13 {
public static void main(String[] args) {
int[] arr = {23, 25, 12, 55, 22, 11};
int max = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
System.out.println("该数组的最大值为:"+max);
}
}
键盘录入5的数据到数组中,然后求和
package cn.cdw.demo;
import java.util.Arrays;
import java.util.Scanner;
public class Demo14 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入五个数据,");
Long[] arr = new Long[5];
int sum = 0;
for (int i = 0; i < 5; i++) {
System.out.print("请输入第" + (i+1) + "个数据:");
Long num=scanner.nextLong();
arr[i]=num;
}
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
System.out.println("你输入的数组为:"+Arrays.toString(arr));
System.out.println("数组总和为:" + sum);
}
}
键盘录入一个数据去找数组中的数据,如果数组中有该数据则返回对于的索引,如果数组中没有该数据则返回-1
package cn.cdw.demo;
import java.util.Scanner;
public class Demo15 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int[] arr = {10, 20, 30, 40, 50, 60};
int index=-1;
System.out.print("请输入一个数字:");
int num=scanner.nextInt();
for (int i = 0; i < arr.length; i++) {
if (num == arr[i]) {
index=i;
break;
}
}
System.out.println(index);
}
}
评委打分:键盘录入6个数据并存储到数组,然后去掉一个最高分和一个最低分,最后求出平均分
package cn.cdw.demo;
import java.util.Arrays;
import java.util.Scanner;
public class Demo16 {
public static void main(String[] args) {
int max=0;
int min=0;
int sum=0;
int avg=0;
Scanner scanner = new Scanner(System.in);
int[] arr = new int[6];
for (int i = 0; i < 6; i++) {
System.out.print("请第" + (i + 1) + "个评分:");
int num=scanner.nextInt();
if (num < 0 || num > 100) {
System.out.print("分数输入有误,请重新输入,");
i--;
continue;
}
arr[i]=num;
}
max = arr[0];
for (int i = 0; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
min = arr[0];
for (int i = 0; i < arr.length; i++) {
if (arr[i] < min) {
min = arr[i];
}
}
for (int i = 0; i < arr.length; i++) {
sum = sum + arr[i];
}
avg = (sum - max - min) / 4;
System.out.println("录入的数组数据为:" + Arrays.toString(arr));
System.out.println("最后得分为:" + avg);
}
}
方法(method)
- 方法(method)就是一段具有独立功能的代码块,不调用就不执行(提高代码的复用性)
行参和实参
- 形参:全称形式参数,指方法定义中的参数
- 实参:全称实际参数,方法调用中的参数
方法重载
- 在同一个类中,定义了多个同名的方法,但每个方法具有不同的参数类型或参数个数,这些同名的方法就构成了重载关系
- 就是同一类中,方法名相同,参数不同的方法
- 参数不同:个数不同,类型不同,顺序不同
- 注意:判断方法之间是否是重载关系,只看方法名和参数,跟返回值无关!
代码
定义一个方法接收键盘录入的一个参数,判断它是奇数还是偶数
package cn.cdw.demo;
import java.util.Scanner;
public class Demo17 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入一个数字:");
int num=scanner.nextInt();
method(num);
}
public static void method(int i) {
if (i % 2 == 0) {
System.out.println(i+"是偶数");
}else {
System.out.println(i+"是奇数");
}
}
}
定义一个方法输出n到m之间的所有偶数
package cn.cdw.demo;
import java.util.Scanner;
public class Demo18 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入开始的数字:");
int n= scanner.nextInt();
System.out.print("请输入结束的数字:");
int m=scanner.nextInt();
method(n,m);
}
public static void method(int n, int m) {
for (int i = n; i <= m; i++) {
if (i % 2 == 0) {
System.out.println(i);
}
}
}
}
编写一个方法,对数组进行遍历。格式为:[1,31,12,45,3]
package cn.cdw.demo;
public class Demo19 {
public static void main(String[] args) {
int[] arr = {12, 2, 1, 44, 16};
arrToString(arr);
System.out.println("============================");
}
public static void arrToString(int[] arr) {
System.out.print("[");
for (int i = 0; i < arr.length; i++) {
if (i == arr.length - 1) {
System.out.println(arr[i]+"]");
}else {
System.out.print(arr[i] + ",");
}
}
}
}
编写一个方法找出数组中的最大值
package cn.cdw.demo;
public class Demo20 {
public static void main(String[] args) {
int[] arr = {12, 2, 43, 56, 3, 22};
int max = getMax(arr);
System.out.println("该数组中最大值为:" + max);
}
public static int getMax(int[] arr) {
int max=0;
for (int i = 0; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}
}
return max;
}
}
定义一个方法,获取数组中的最大值和最小值
package cn.cdw.demo;
public class Demo21 {
public static void main(String[] args) {
int[] arr = {12, 43, 11, 54, 10};
String str = getMaxAndMin(arr);
System.out.println(str);
}
public static String getMaxAndMin(int[] arr) {
int max = arr[0];
int min = arr[0];
for (int i = 1; i < arr.length; i++) {
if (arr[i] > max) {
max = arr[i];
}else {
min = arr[i];
}
}
return "最大值为:" + max + ",最小值为:" + min;
}
}
数据交换:a=10,b=20。让a=20,b=10
package cn.cdw.demo;
public class Demo22 {
public static void main(String[] args) {
int a=10;
int b=20;
method1(a, b);
method2(a, b);
}
public static void method1(int a, int b) {
int temp=0;
temp = a;
a = b;
b = temp;
System.out.println("a=" + a + " b=" + b);
}
public static void method2(int a, int b) {
a = a^b;
b = a^b;
a = a^b;
System.out.println("a=" + a + " b=" + b);
}
}
数组反转
package cn.cdw.demo;
import java.util.Arrays;
public class Demo23 {
public static void main(String[] args) {
int[] arr = {1, 2, 3, 4, 5};
int index=0;
int end=arr.length-1;
for (; index < end; index++, end--) {
int temp=0;
temp = arr[index];
arr[index] = arr[end];
arr[end] = temp;
}
System.out.println("反转后的数组结果为:" + Arrays.toString(arr));
}
}
二维数组
- 二维数组也是一种容器,不同于一维数组,该容器存储的都是一维数组容器
代码
二维数组
package cn.cdw.demo;
public class Demo24 {
public static void main(String[] args) {
int[][] arr = {{12, 13}, {22, 23}};
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
System.out.print("二维数组的第"+(i+1)+"个一维数组的数据的第"+j+"个索引的数据为:"+arr[i][j]);
System.out.println();
}
}
}
}
计算一年四个季度的总收入
package cn.cdw.demo;
public class Demo25 {
public static void main(String[] args) {
int[][] arr={{100,84,90},{76,79,80},{84,60,80},{90,79,88}};
int sum=0;
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
sum += arr[i][j];
}
}
System.out.println("四个季度的总收入为:" + sum);
}
}