Java学习之路-day05

今日学习总结:
1、【使用方法的注意事项】:
1、方法应该【定义在类中】,但不能方法中在定义方法,不能嵌套;
2、定义方法的前后顺序无所谓;
3、定义方法之后不会执行,如果希望执行,一定要进行调用:单独调用、打印调用和赋值调用;
4、如果方法有返回值,那么必须写上 return 返回值,不能没有;
5、return后面的返回值数据,必须和方法的返回值类型对应起来;
6、对于一个void没有返回值的方法,不能写return后面的返回值,只能写return自己或者省略不写;
7、一个方法当中可以有多一个return语句,但是必须保证同时只有一个会被执行到,【同时两个return不能连写】;

public class DemoMethodNotice{
	public static int method1(){
		return 10;//因为有返回值,return后面必须有返回值

	}
	public static void method2(){
		return;//因为是void 无返回值的,return后面不可有返回值;只能写return自己或不写;
	}
}
public static int getMax(int a ,int b){
	int max;
	if(a > b){
	max = a;	
	}else{
	max = b;
	}
	return max;
======================================
	if(a > b){
	return a;
	return b;//【两个return不可连写,这是一个错误写法】
	}else(a < b){
	return b;
	}
}

2、方法的重载overload【方法的重写override->后期学习的继承extends父类和implement实现接口】
定义:多个方法的名称一样,但是参数列表不一样;
好处:只需要记住唯一一个方法名称,就可以实现类似的多个功能;

public class MethodOverload{
	public static void main(String[]args){
	System.out.println(getSum(a,b));
	}
	//求两个数的和
	public static int getSum(int a,int b){//两个参数方法的执行
		return 返回值;
	}
	//求两个数以上的和
	public static int getSum(int a,int b,....int n){//三个参数方法的执行
		return 返回值;
	}
}

【方法重载的注意事项】【重点】
【1】参数列表不一样:参数类型、参数顺序或者参数个数都可以不一样;

	【a】public static void method(int a,String s,int[] array,ArrayList<>list....){

	//参数类型可以根据需求定义
	//参数的顺序不同也是一个方法的重载过程
	-->public static int method(int a ,String s){}
	-->public static int method(String s ,int a){}//属于两个不同的方法重载
	//参数列表的个数可以任意

}
	【b】【参数个数不同】->【重点】
	【c】【参数类型不同】->【重点】
	【d】【参数多类型顺序不同】->【重点】

【2】方法重载的参数列表和【参数的名称无关】

	【a】public static void method(int a,int b){}
	【b】public static void method(int x,int y){}//虽然参数的名称不同,但是没有产生方法的重载,
							//方法的重载与参数的名称没有关系

【3】方法重载与【方法的返回值无关】

	【a】public static int sum(int a ,int b){}
	【b】public static double sum(int a,int b){}//方法名称相同,参数列表相同,没有构成方法的重载
		sum(10,20);//不知道执行int还是double
		//进行单独调用时,不知道返回哪个方法的值
		//【方法重载:方法名相同,参数列表不同,才是重载】
		//方法重载与返回值类型无关,IDEA中会报错

方法重载的练习:定义一个方法,判断两个数是否相等

分别使用了4种方法表达进行实现;
public class DemoOverloadSame(){
	public static void main(String[]args){
		byte a = 10;
		byte b = 12;
		System.out.println(isSame(a,b));
	}
	//判断两个byte类型数据
	【1】public static boolean isSame(byte a,byte b){
		return  a == b;
	}
	//判断两个short类型数据
	【2】public static boolean isSame(short a,short b){
		boolean same;
		same = a == b?true:false;
		return same;
	}
	//判断两个int类型数据
	【3】public static boolean isSame(int a,int b){
		boolean same = a == b;
		return  same;
	//判断两个long类型数据
	【4】public static boolean isSame(long a,long b){
		boolean same;
		if(a == b){
			same = true;		【return true;】
		}else{
			same = false;		【return false;】//多个return语句,不连写,同时只执行一个;
		}
		return same;
	}
}

【小贴士】
1、IDEA快速修改的快捷键,Shift + F6将代码中使用的字符进行统一修改
2、为什么println()方法可以打印输出各种数据类型?
因为在调用打印输出方法时,其实就是在调用println()的各种重载方法,在Java底层机制中println()已经定义了很多相关数据类型的重载方法;
3.数组【非常重点】要反复练习使用
3.1数组:就是一个容器,用于存放多个数据值的集合;
【a】数组是一种引用数据类型;
【ps】基本数据类型:
【整数型】byte short int long
【浮点型】float double
【字符型】char
【布尔型】boolean】
除了上述的4类8种,其他的都是引用数据类型;
【b】数组当中的数据类型必须统一;
【c】数组的长度在运行期间不可改变;
3.2定义数组的格式–》数组的初始化
在内存当中创建一个数组,并在其中赋一些默认值,这个过程就是数组的初始化;
【两种常见的数组初始化方式】
【1】动态初始化:【指定长度】在创建数组的时候,直接指定数组当中的数据元素个数;

格式:数据类型【代表数组】 数组名称 = new 数据类型[数组长度];

int[] array = new int[3];//定义一个长度为3的int类型的数组
double[] dArray = new double[10];//定义一个长度为10的double类型的数组
String[] str = new String[5];//定义一个长度为5的String类型的数组

【a】左边数据类型:数组当中保存的数据,全部统一是什么类型;
【b】[]:代表一个数组;
【c】数组名称:定义一个数组名称
【d】new :创建一个数组
【e】右边的数据类型:要和左边的数据类型一致;
【f】[数组长度]:定义数组可以保存多少个数据,【int类型的数据】
【注意】:不论是基本数据类型还是引用数据类型,都可以作为数组的数据类型
【2】静态初始化:【指定内容】在创建数组的时候,不直接指定数组的数据个数,而是直接将【具体的数据内容指定】;

【基本格式】:数据类型[] 数组名称 = new 数据类型[]{元素1,元素2,.....};

String[] str = new String[]{"a","b","c"};

int[] arrayInt = new int[]{5,15,25};

【省略格式】:数据类型[] 数组名称 = {元素1,元素2,......};

String[] str = {"a","b","c"};

【注意】:静态初始化虽然没有直接告诉数组的长度,但是我们可以根据花括号中的元素具体内容,
也可以推算出来长度;
【数组长度】length 因为数组索引是从0开始的,所以数组的最大索引值为length-1
例:int[] arrayA = new int[]{元素1,元素2…}; 如何知道该数组的长度?
数组名称.length -》arrayA.length
3.3【数组的注意事项】:
【1】静态初始化没有直接指定长度,但是仍然可以自动推算出来长度;
【2】静态初始化的【标准格式】是可以拆分成两个步骤的;
【a】int[] arrayA;
【b】arrayA = new int[]{5,6,7};
【3】动态初始化也可以拆分成两个步骤;
【a】int[] arrayA;
【b】arrayA = int[3];

【4】【静态初始化一旦使用省略格式,就不能拆分成为两个步骤了】—>特别注意
【a】int[] arrayA;
【b】arrayA = {2,3,4};//这是一种错误写法,编译器会报错
【数组的使用】
1、如果不确定数组当中的具体内容,【用动态初始化】;否则已经确定了具体内容的,【用静态初始化】;
3.4数组元素的获取
格式:数组名称[索引值index]
其中索引值就是一个int类型的数字,代表数组当中的元素编号;
【注意】数组的索引值从0开始,即array[0]为第一个元素;最大索引值为length-1,即array[length-1]
例:int[] array = {3,3,4};
System.out.println(array);//数组的内存地址
->打印出来的是array数组的内存地址哈希值;-》[I@451242af
[中括号代表数组
I代表int类型
@后面代表16进制数
【扩展】:数组要使用首先要进行创建,在内存中进行创建(电脑当中的内存条中)
3.5动态数组的初始化

int[] array = new int[3];
System.out.println(array);//内存地址值
System.out.println(array[0]);//0
System.out.println(array[1]);//0
System.out.println(array[2]);//0
//静态初始化默认值为0

在使用【动态初始化数组】的时候,其中的元素将【自动】拥有一个【默认值】:
【整数类型】默认值为0
【浮点类型】默认值为0.0
【字符类型】默认值为’\u0000’
【布尔类型】默认值为false
【引用类型】默认值为null
【注意事项】:【数组的静态初始化】其实也是有默认值过程的,只不过系统自动马上将默认值替换成为了大括号当中的具体数值;【先为默认值,在赋值为具体值】
4 Java内存的划分【重点】
系统一共分为5块区域,分别为:
4.1【栈stack】:存放的都是方法中的局部变量
【特别注意】
【1】、如果方法想要运行,一定要进栈;方法加载到栈内存当中,并且为方法开辟一块内存空间,这个过程叫做方法的进栈;
【2】、什么是局部变量?
【a】方法的参数或者是方法的内部变量;
【b】局部变量的作用域:一旦超出作用域(出了花括号),将立刻从内存中消失;
4.2【堆heap】:凡是new出来的东西,都在堆中;堆内存里面的东西都有一个【16进制的地址值】;在调用方法时,会再内存地址赋值给变量使用;
【1】堆内存里面的数据,都有默认值,规则是:
【整数类型】默认值为0
【浮点类型】默认值为0.0
【字符类型】默认值为’\u0000’
【布尔类型】默认值为false
【引用类型】默认值为null
4.3【方法区Method Area】:存储.class相关的信息,包含方法的信息;【方法的运行一定要进栈】
4.4【本地方法栈Native Method Stack】: 与操作系统相关;
4.5【寄存器】pc Register:与cpu相关;
5.数组的内存分析;
两个引用指向同一数组的内存
int[] arrayA = new int[3];
int[] arrayB = arrayA;//【将arrayA的地址值赋值给arrayB】其实在访问同一个数组
【数组当中的常见异常】
【数组越界异常】Exception:ArrayIndexOutOfBoundsException 数组索引越界异常
如果访问数组元素的时候,索引编号并不存在,那么将会发生数组索引越界异常

例:int[] array = {15,15,20};
System.out.println(array[0]);
System.out.println(array[1]);
System.out.println(array[2]);
System.out.println(array[3]);//错误写法,因为数组长度为3,只能取值到012,array[3]这个数组元素不存在,所以会报错

【空指针异常】NullpointException
int[] array;
array = new int[3];//忘记写第二步骤,会发生什么异常?
【注意】
【1】【数组一定要被创建才能被使用】
【2】【所有引用类型的变量,都可以赋值一个null值,但是代表其中什么都没有】
int[] array = null;
System,out.println(array[0]);
【3】【数组必须进行new初始化才能使用其中的元素,如果只是赋值一个null,没有进行new创建,那么将会发生空指针异常 NullpointException】
原因:忘了new
解决:补上new
【从明天开始每天练习5道编程题目,目的熟悉代码,培养逻辑思维】因为只有良性的逻辑思维,每天都灵活用脑,才能更好编写代码;
【每天题目和编程会更新,请各位指导和监督】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值