Java语言基础笔记3

Java内存划分

Java 程序在运行时,需要在内存中分配空间。为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式

JVM内存分配

寄存器:与CPU相关
本地方法栈:JVM在使用操作系统功能的时候使用
方法区:存储.class的相关信息,包含方法的信息
:方法运行时使用的内存,存储方法中的局部变量
:存储对象或数组(new出来的东西)

程序执行流程图解

(以数组为例)
在这里插入图片描述

数组

概述

  • 引用数据类型的一种:变量存放的地址而不是具体的数值(类似指针)
  • 存储同一种数据类型多个元素的容器(相同数据类型的元素集合)
  • 既可以存储基本数据类型,也可以存储引用数据类型

定义格式

  •   格式1:数据类型[ ] 数组名; (推荐使用的格式)
      格式2:数据类型 数组名[ ];
    

注意:这两种定义做完了,数组中是没有元素值的

初始化

  • Java中的数组必须先初始化,然后才能使用
  • 所谓初始化:就是为数组中的数组元素分配内存空间,并为每个数组元素赋值

动态初始化

初始化时只指定数组长度,由系统为数组分配初始值。
格式:数据类型[ ] 数组名 = new 数据类型[数组长度];

举例:

  •   int[] arr = new int[3];
    
      /*
       * 解释:
       * 左边:
       * 		int:说明数组中的元素的数据类型是int类型
       * 		[]:说明这是一个数组
       * 		arr:是数组的名称
       * 右边:
       * 		new:为数组分配内存空间
       * 		int:说明数组中的元素的数据类型是int类型
       * 		[]:说明这是一个数组
       * /
    

静态初始化

初始化时指定每个数组元素的初始值,由系统决定数组长度。

格式:数据类型[ ] 数组名 = new 数据类型[ ] {元素1,元素2,…};
举例:

  •   基本格式:int[] arr = new int[]{1,2,3};
      简化写法:int[] arr = {1,2,3};
      解释:
      定义了一个int类型的数组;
      这个数组中可以存放3个int类型的值,并且值分别是1,2,3;
    

数组基本操作

获取数组元素

案例:

public class ArrayDemo {
	public static void main(String[] args) {
		//数据类型[] 数组名 = new 数据类型[数组长度];
		int[] arr = new int[3];
		//输出数组名
		System.out.println("arr:"+arr); //[I@104c575 为数组地址值
		//输出数组元素值
		System.out.println("arr[0]:"+arr[0]);//0
		System.out.println("arr[1]:"+arr[1]);//0
		System.out.println("arr[2]:"+arr[2]);//0
		//数组元素值默认赋值为0
		//对数组元素赋值
		arr[0] = 100;
	}
}

注意:

  1. 输出数组名仅仅是数组的首地址
  2. 要获得数组的元素要使用数组下标(index)
  3. 数组下标:从0开始到数组长度-1
  4. 默认的赋值
    byte short int long:0
    float double:0.0
    char:’\u0000’
    boolean:false
    引用类型:null

数组遍历

案例

  •   for(int x=0; x<arr.length; x++) 
      	System.out.println(arr[x]);
    

注意:

  1. Java使用的通用语法是:
  •   object.method(parameters) //点(.)用于对某对象调用语法
    
  1. length方法可以返回数组的长度(数组元素的个数)

数组反转

public static void main(String[] args)
 {     
 	//初始化一个数组
 	int[] arr = { 1, 2, 3, 4, 5 };     
 	/*	循环中定义变量min=0最小索引       
 		max=arr.length‐1最大索引       
 		min++,max‐      
	*/     
 	for(int min = 0, max = arr.length ‐ 1; min < max; min++, max‐‐) 
 	{       
 		//利用第三方变量完成数组中的元素交换       
 		int temp = arr[min];       
 		arr[min] = arr[max];       
 		arr[max] = temp;     
	}     
	// 反转后,遍历输出数组     
	for (int i = 0; i < arr.length; i++)     
		System.out.println(arr[i]);     
} 

求数组最值

案例:

public class ArrayTest2 {
	public static void main(String[] args) {
		//定义数组
		int[] arr = {12,98,45,73,60};
		
		//定义参照物
		int max = arr[0];
		
		//遍历数组,获取除了0以外的所有元素,进行比较
		for(int x=1; x<arr.length; x++) {
			if(arr[x] > max) {
				max = arr[x];
			}
		}
		System.out.println("数组中的最大值是:"+max);
	}
}

注意:

  1. 取数组其中的元素作为参照物

数组常见小问题

  1. ArrayIndexOutOfBoundsException: 数组索引越界异常
    原因:访问了不存在的索引(不在数组下标范围内)

  2. NullPointerException: 空指针异常
    原因:null是指不再指向堆内存的数据,而我们还在访问堆内存的数据

案例:

public class ArrayDemo {
	public static void main(String[] args) {
		//定义数组
		int[] arr = {1,2,3};
		
		//访问数组中的元素
		System.out.println(arr[3]); //1. 不存在这个元素
		
		//引用数据类型:类,接口,数组
		arr = null; // 2. 访问不指向堆内存的数据
		System.out.println(arr[1]);
	}
}

方法

方法就是完成特定功能的代码块

定义

  •   修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…)
       {
      	函数体;
      	return 返回值;
      }
    
  • 解释
    修饰符: 目前记住 public static
    返回值类型: 用于限定返回值的数据类型
    方法名: 一个名字,为了方便我们调用方法
    参数类型: 用于接收调用方法时传入的数据的类型
    参数名: 用于接收调用方法时传入的数据的变量
    方法体: 完成功能的代码
    return: 结束方法,把返回值带给调用者

注意事项
• 定义一个方法需要明确:
【1】需要实现的功能
【2】返回值类型 明确功能结果的数据类型
【3】参数列表 明确有几个参数,以及参数的类型
【4】方法与方法是平级关系,不能嵌套定义

方法调用

  • 单独调用
  • 赋值调用
  • 输出调用
public class MethodDemo2 {
	// 定义一个求和的方法
	public static int sum(int a, int b) {
		return a + b;
	}

	public static void main(String[] args) {
		// 单独调用
		// sum(10,20);

		// 输出调用
		// System.out.println(sum(10,20));

		// 赋值调用
		int s = sum(10, 20);
		// s+=100;
		System.out.println("s:"+s);
	}
}
  • 调用图解
    在这里插入图片描述

方法重载

在同一个类中,出现了方法名相同的情况。

  • 特点
    【1】方法名相同
    【2】参数列表不同:参数的个数不同;参数对应的数据类型不同。
    【3】方法重载与返回值无关
  • 注意事项:在调用方法的时候,JVM会根据方法名及参数列表的不同来区分方法
  • 案例
public class MethodTest {
	public static void main(String[] args) {
		System.out.println(compare(10, 20)); //int
		System.out.println(compare((byte)10, (byte)20)); //byte
		System.out.println(compare((short)10, (short)20)); //short
		System.out.println(compare(10L, 20L)); //long
	}
	//两个byte类型
	public static boolean compare(byte a,byte b){
		System.out.println("byte");
		return a == b;
	}
	//两个short类型
	public static boolean compare(short a,short b){
		System.out.println("short");
		return a == b;
	}
	//两个int类型
	public static boolean compare(int a,int b){
		System.out.println("int");
		return a == b;
	}
	//两个long类型
	public static boolean compare(long a,long b){
		System.out.println("long");
		return a == b;
	}
}

方法参数问题

  • 形参和实参
    形式参数:用于接收实际数据的变量
    实际参数:实际参与运算的变量

  • 基本数据类型作为参数:传值
    (图解)基本数据类型:实参–复制一份–传递给形参,实际对应的是副本,对原来的数据无法修改在这里插入图片描述

  • 引用数据类型作为参数:传址
    (图解)引用数据类型–传址–对应的实际是同一个东西,可以修改原来的数据
    在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值