第5天----变量,重载,内存,数组

昨天知识总结:

  • 1.流程控制语句
    • for
    • while
    • dowhile
    • 循环实例
    • break,continue
    • 标记
  • 2.函数
    • 函数的由来
    • 函数的构成
    • 函数的优化

全局变量和局部变量

  • 全局变量和局部变量
  • 全局变量:一般我们把直接定义在类中的变量称为全局变量
  • 局部变量:我们将定义在函数,for,if等内部的变量及形参称为局部变量
  • 注意:在一个类的内部我们能直接看到的只有全局变量的定义和函数的定义
  • 生命周期:从定义当前的变量开始,到变量被销毁的过程
  • 作用域:在生命周期内变量可以起作用的范围
  • 全局变量的作用域:整个类,除了static修饰的方法。
  • 局部变量的作用域:从定义当前的变量开始到他所在的函数,for,if等结束.
  • 当变量的生命周期结束的时候,、意味着变量被释放了
  • 区别:
    • 1.作用的范围不同
    • 2.默认值:全局变量如果没有赋值,系统会给默认值----0或null
    • 局部变量必须先赋值后使用
public class demo2 {
	int a;//全局变量
	public static void main(String[] args) {
		int b;//局部变量
		
		
		
		for(int i=0;i<10;i++) {//局部变量
			int c;//局部变量
			
		}
	}
		public void test(int x) {//局部变量
			int y;//局部变量
		}

}

重载

  • 重载:对于同一个类中的函数,函数名字相同,关系不相同,我们将他的关系成为重载
  • 为什么可以同名?在程序的内部真正识别函数时,识别的是函数名+所有参数的类型
  • 重载的函数本质上是不同的函数
  • 总结注意点:
    • 1.函数名必须相同
    • 2.参数必须不同(类型,个数,位置),但是与参数的名字无关
    • 3.重载与返回值无关
  • 作用:简化代码,方便我们进行操作
	//第一个
	//求两个数的和
	public static int sum(int a,int b) {
		int sum = a+b;
		return sum;
	}
	//第二个:与第一个 是重载,参数的个数不同
	public static int sum(int a,int b,int c) {
		int sum = a+b+c;
		return sum;
		}
		
	//第三个:与第一个不是重载,重载与参数的名字无关
//	public static int sum(int c,int d) {
//		int sum = a+b;
//		return sum;
//}
	//第四个:与第一个是重载   参数的类型不同
	public static int sum(float a,int b) {
		return 3;
		}
	
	//第五个:与第四个是重载,参数的位置不同
	public static int sum(int a,float b) {
		return 3;
	}
	
	//第六个:与第四个不是重载,是相同的函数,叫做错误
//	public static int sum(float a,int b) {
//		return 3;
//}

java中的内存分类–栈区和堆区

  • java内存分成五大块:堆区,栈区,方法区,本地方法区,寄存器
  • 栈区:存放数据的特点是先进后出,存放的数据是局部变量和函数的加载,使用完立即释放,
  • 堆区:存放的是实体(数组和对象),可以同时存储多个数据,实体内部的变量如果不赋值,会被赋值成0
  • 了解:堆中的数据会在某个时刻被释放----通过垃圾回收机制
  • 垃圾回收机制通过一个线程控制,这个县城等级比较低,不会立即被释放

数组

  • 数组:用来存储数据的
  • 解释:是一种引用数据类型,可以同时存储多个相同类型的数据
  • 简单数据类型和引用数据类型的对比
    • 1.都是存的数
    • 2.简单数据类型是直接存储的普通的值,引用数据类型存储的是地址
  • java将数组第一个中第一个元素的地址,当做数组地址
  • 特点:
    • 1.数组的内存空间是连续的,
    • 2.数组内的元素如果没有赋值会有默认值,对于简单数据类型的元素会赋值0或false
  • 缺点:数组这块空间一旦被开辟出来就不能被改变
  • new:每new一次会在堆中开辟一块儿新空间,两个数组之间没有任何关系,互不影响
  • 构成:new+元素的类型+[元素的个数]
  • new的功能:
    • 1.在堆内开辟一片空间
    • 2.将当前数组的地址返回,java将数组第一个中第一个元素的地址,当做数组地址
  • int[3]:中的int,我们存的是什么类型的值,这里就写什么类型。
  • =前面的int[]是一个整体,代表int型数组这种类型
  • arr中存储的是数组的地址,arr就是数据存储类型
  • 注意点:
    • ArrayIndexOutOfBoundsException: 数组下标越界异常,下标超出了正常的范围
public static void main(String[] args) {
		//创建变量
		int a = 3;
		//实例:创建一个可以装3个int型的值得数组
		int[] arr = new int[3];
		//创建一个装着6个float型的值的数组
		float[] arr1 = new float[6];
		
		//赋值/取值--通过下标实现
		//写法构成:数组的名字+[下标]
		arr[0] = 3;//取arr中小标为0的元素并赋值成三
		arr[1] = 4;
		arr[2] = 6;
		System.out.println(arr[0]);
		
		//遍历:把数组当中中的值都打印了一遍
		//arr.lengh:获取的是数组的长度,数组元素的个数
		//注意:下标比元素个数少一
		for(int i = 0;i < arr.length;i++) {
			System.out.println("遍历"+arr[i]);
		}
		//其他的创建数字租的方式
		//第一种:在创建数组的同时完成初始化,{}中的数的个数就是元素的个数,前面的[]不能写数
		int[] arr3 = new int[]{3,4,5};
		//第二种:这样只是我们写的时候更加简单,但在内部会自动的new
		int[] arr4 = {4,5,6,8};
		//实例:求三个数的最大值
		getMax(3,4,6);
		int[] arr5 = {3,5,1,6};
		getMax(arr5);
		//getMax({4,4,6});不允许直接将{}的形式作为参数
		getMax(new int[] {4,5,6});
		}
		//实例:求第三个数的最大值,-通过函数
	public static int getMax(int a,int b,int c) {
		//第二种方式:三目运算符
		int max1 = a > b?a:b;
		int max2 = max1 > c?max1:c;
		return max2;
	}
	//实例:求三个数的最大值-通过函数	
	public static int getMax(int[] arr) {
		int temp = arr[0];
		float a = 0;
		for(int i = 0;i < arr.length;i++) {
			if(arr[i] > temp) {
				temp = arr[i];
			}
		}
		return temp;
	}

值传递和址传递

  • 值传递不会改变函数外面的值
  • 址传递可以改变函数外面的值
	public static void main(String[] args) {
		//交换两个数的值
		int[] arr1 = {3,4};
		//传的是普通的值
		exchange(arr1[0],arr1[1]);
		System.out.println("arr1[0]"+arr1[0]+"   arr1[1]"+arr1[1]);//3,4
		//传的是地址
		int[] arr2 = {3,4};
		exchange(arr2);
		System.out.println("arr2[0]"+arr2[0]+"   arr2[1]"+arr2[1]);//4,3
		//传的是地址
		int[] arr3 = {3,4};
		exchange1(arr3);
		System.out.println("arr3[0]"+arr3[0]+"    arr[1]"+arr3[1]);//3,4
	}
	//传的是普通的值-------值传递
	public static void exchange(int a,int b) {
		int temp = 0;
		temp = a;
		a = b;
		b = temp;
				
	}
	//传的是地址------址传递
	public static void exchange(int[] arr) {
		int temp = 0;
		temp = arr[1];
		arr[1] = arr[0];
		arr[0] = temp;
	}
	//传的是地址----址传递
	//注意:地址传递时,如果函数内部的引用重新进行了指向函数内部不能改变外部的值
	public static void exchange1(int[] arr) {
		int[] arr1 = new int[] {7,8};
		arr = arr1;
		int temp = 0;
		temp = arr[1];
		arr[1] = arr[0];
		arr[0] = temp;
		
	}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值