第7天
Posted akinodoo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第7天相关的知识,希望对你有一定的参考价值。
回 顾
方法的定义:
什么是方法?拥有特定功能的一个代码段,称为方法,其他语言中称为Function.
方法定义的格式:
public static 返回值类型 方法名(形参类型 参数名1,形参类型 参数名2,....){
方法体;
return [返回值];
}
定义方法的两个明确:
1.返回值类型
2.形参列表
public static : 方法的修饰符,目前的固定格式。以后会又变化。
返回值类型:Java中的数据类型(基本的四类八种,引用的:可以又多种多样:jdk提供的,也可以是我们自己定义的!),表示的是方法执行后需要返回值的类型!
如果方法不需要返回任何之,就用void.
方法名:可以理解为变量名(就是一段内存空间的标识!方法名就是一段代码的标识!)
和变量的命名规范是一致的(小驼峰命名法,从第二个单词开始首字母大写)
类名和接口名的命名规则是一致的(大驼峰命名法)
包名:
final变量名:
()里整体称为形参列表,每个形参定义包含两方面:形参类型,形参名!形参之间用逗号分隔,如果方法不需要任何参数,什么都不屑,()必须写!!!
形参类型:任何可用的数据类型:(基本的和引用的都可以)
形参名:就是变量名,这个变量就是在方法体中有效,相当于在方法体中定义的局部变量!!!方法被调用时,形参就被赋值了!按照顺序传值!!!
方法体:0到若干条可以执行的语句,在方法被调用时,这些语句一次执行!
return : 关键字,表示一个方法的结束,如果方法又明确的返回值类型的话,return后必须有一个值(可以和方法定义时的返回值数据类型一致!或者可以自动类型转换成返回值类型的值:变量;常量;表达式)
如果方法的定义中,返回值时void型,return后就不能加任何值!!!
即:return;---此时整条语句都可以省略!!!
方法定义的位置:
类定义中,和main方法时平级关系:
方法中不能再定义其它方法(即:方法不能嵌套定义!!!)
方法的调用:
1.方法调用时传值:
实参:方法调用时,给方法传递的值,就是实参;
形参:方法定义时,参数列表中出现的参数名
赋值方向:实参→形参!!!
方法名(实参);
实参的个数一定要和形参的个数对应!
类型:实参要么和形参类型一致,要么可以隐式类型转换!!!
实参的种类:变量,常量,表达式
2.如何处理方法的返回值:
1>有返回值的方法:
-不关心返回值:单独调用
-使用返回值:给其他变量赋值,直接参与表达式运算,当成参数传第给其他方法。
2>没有返回值的方法:
-只能单独调用
-不能给其他变量赋值,不能直接参与表达式运算,不能当成参数传第给其他方法。
方法的重载(overload):
两同一不同!!!
同类,同方法名,形参列表不同(个数不同或者类型的不同都成为形参列表不同)
方法的访问权限修饰符,以及返回值类型都不是判断方法重载的标志!
练习题:
1.定义方法,用于计算一个int数值的阶乘
//返回值类型:int
//形参列表:int value
/* 1.定义方法,用于计算一个int数值的阶乘 //返回值类型:int //形参列表:int value */ public class HomeworkDemo1{ public static void main(String[] abc){ // int res = getNum(5); System.out.println(res); // System.out.println(getNum(5)); } //返回值类型:int //形参列表:int value public static int getNum(int value){ //求阶乘思想: int res = 1; for(int i = 1;i<=value;i++){ res *= i; } return res; } }
2.定义方法,用于获取指定范围内的一个随机值(int)
//返回值类型:int
//形参列表:int start ,int end
/* 定义方法,用于获取指定范围内的一个随机值(int) //返回值类型:int //形参列表:int start,int end
*/ public class HomeworkDemo2{ public static void main(String[] args){ int start = 10; int end = 20; System.out.println("随机值是: " + getRandom(start,end)); } //返回值类型:int //形参列表:int start,int end public static int getRandom(int start,int end){ return (int)(Math.random() * (end - start + 1) + start); } }
/* 定义方法,用于获取指定范围内的一个随机值(int) //返回值类型:int //形参列表:int start,int end 练习: 改造: 从键盘录入起始和结束值: */ import java.util.Scanner; public class HomeworkDemo2{ public static void main(String[] args){ Scanner s = new Scanner(System.in); System.out.print("请输入起始值:"); int start = s.nextInt(); System.out.println("请输入最终值:"); int end = s.nextInt(); System.out.print("随机值是: " + getRandom(start,end)); } //返回值类型:int //形参列表:int start,int end public static int getRandom(int start,int end){ return (int)(Math.random() * (end - start + 1) + start); } }
第七天 数组
/* 数组:array 同一种数据类型的 〇到多个 数据的组合. 数组的数据类型:就是元素的数据类型 数组的长度(length):就是数组中数值的个数: 元素(element):数组的各个数值称为元素 索引(index):数组中各个元素的编号:从0开始,最大值是:数组的长度-1 数组类型是引用数据类型: 数组名保存的是一段内存空间的地址! 真正的元素保存在那段内存空间中!!! 为什么使用数组: 减少定义变量名 方便对一组数据进行操作 定义数组的格式:(即:初始化数组的方式:) 两种: > 定义时不指定初始值:只指定数组的长度,(动态初始化) 数据类型 变量名 = 初始值; 元素类型[] 数组名 = new 元素类型[数组长度]; 例如: 定义一个数组,可以存放5个int型数据. int[] arrInt = new int[5]; > 定义时就指定初始值:(静态初始化) 元素类型[] 数组名 = new 元素类型[]{元素1,元素2,...}; 例如: int[] arr = new int[]{1,2,3,5}; */ public class ArrayDemo1{ public static void main(String[] args){ //定义数组 //动态初始化:定义数组时只指定长度,不指定具体的元素值!! int[] arr1 = new int[5]; //arr1保存的是一段内存地址值! System.out.println(arr1);//[[email protected] //打印引用数据类型的结构: //[I : 表示的是数据类型:[ 表示的就是数组,I表示的是元素的类型! //@ : 固定的分隔符 //15db9742 : 一个十六进制的字符串:真实的内存地址值计算出来的!!! //定义byte类型数组 byte[] arr2 = new byte[2]; System.out.println(arr2); boolean[] arr4 = new boolean[3]; System.out.println(arr4); //初始化数组的第二种方式:定义数组时指定元素值!此时不能指定数组的长度! int[] arr3 = new int[]{1,2,3,4,5,6}; System.out.println(arr3); //静态初始化的简化写法: int[] arr5 = {1,2,3,45}; } }
练习:
考察一下,基本数据类型的数组的变量 ,直接打印时,其中的类型是什么字符?
/* 考察基本数据类型的数组变量,直接打印的结果: */ public class ArrayDemo2{ public static void main(String[] args){ byte[] a1 = new byte[2]; short[] a2 = new short[2]; char[] a3 = new char[]{‘a‘,‘b‘,‘c‘}; int[] a4 = new int[]{1,2,4}; boolean[] a5 = new boolean[3]; float[] a6 = new float[2]; double[] a7 = new double[2]; long[] a8 = new long[2]; // System.out.println(a1); System.out.println(a2); System.out.println(a3); //println这个方法对字符型的数组有特殊的处理方式:重载这个方法的结果是打印数组里的所有字符! System.out.println(a4); System.out.println(a5); System.out.println(a6); System.out.println(a7); System.out.println(a8); } }
//考察基本数据类型的数组变量,直接打印的结果:
public class PractiseDemo{ public static void main(String[] args){ System.out.print("int :"); int[] arr1 = new int[5]; System.out.println(arr1); System.out.print("byte :"); byte[] arr2 = new byte[5]; System.out.println(arr2); System.out.print("short :"); short[] arr3 = new short[5]; System.out.println(arr3); System.out.print("long :"); long[] arr4 = new long[5]; System.out.println(arr4); System.out.print("char :"); char[] arr5 = new char[5]; System.out.println(arr5); System.out.print("float :"); float[] arr6 = new float[5]; System.out.println(arr6); System.out.print("double :"); double[] arr7 = new double[5]; System.out.println(arr7); System.out.print("boolean :"); boolean[] arr8 = new boolean[5]; System.out.println(arr8); } }
打印结果:注意long型开始时J,boolean型区别于byte是Z,而char类型字符型的数组有特殊的处理方式:重载这个方法的结果是打印数组里的所有字符!
jvm
jvm实际上只是一种标准,任何组织都可以自己开发jvm虚拟机:
Tao JVM
jvm如何对内存进行区域的划分:
对内存的划分就是方便对数据的管理:
通常会划分5大区域:
栈区:stack
堆区:heap
方法区:method area
本地方法栈:native method stack
程序计数器:program counter
不同的jvm虚拟机对内存空间的划分是不一样的.
栈区:stack
方法中定义的局部变量(和形参)都是在栈区:
栈区中的变量没有初始值,使用之前必须手动赋值!!
堆区:heap
凡是new出来的对象都是在堆区!
Scanner s = new ...
int[] arr = new ...
堆区中的变量都有初始值!!!
方法区:method area
用来存放.class字节码文件和方法定义的!
.java -> .class -> 方法区!!
1 /* 2 验证: 3 1.数组的默认值: 4 2.数组元素的访问方式: 5 数组名[索引值] 6 练习:定义基本数据类型的数组,有2个元素.考察他们的默认值: 7 8 */ 9 public class ArrayDemo3{ 10 public static void main(String[] args){ 11 //定义一个数组 12 int[] arr = new int[3]; 13 //在堆空间中开辟3个空间,每个空间可以存放一个int型元素.初始值为0. 14 //然后把首元素的地址(也就是整个数组的地址)赋值给栈空间中的变量arr 15 16 //验证默认值: 17 System.out.println(arr[0]); 18 System.out.println(arr[1]); 19 System.out.println(arr[2]); 20 21 //如何对数组元素赋值: 22 arr[2] = 10; 23 System.out.println(arr[2]); 24 25 arr[2] = 20; 26 System.out.println(arr[2]); 27 28 } 29 }
1 /* 2 考察基本数据类型和引用数据类型的数组的默认值! 3 整数:0 4 浮点数:0.0 5 布尔型:false 6 引用数据类型:null 7 */ 8 public class ArrayDemo4{ 9 public static void main(String[] args){ 10 byte[] arr1 = new byte[2]; 11 System.out.println(arr1[0]); 12 System.out.println(arr1[1]); 13 System.out.println("------------------"); 14 char[] arr2 = new char[2]; 15 System.out.println(arr2[0]); 16 System.out.println(arr2[1]); 17 System.out.println("------------------"); 18 short[] arr3 = new short[2]; 19 System.out.println(arr3[0]); 20 System.out.println(arr3[1]); 21 System.out.println("------------------"); 22 int[] arr4 = new int[2]; 23 System.out.println(arr4[0]); 24 System.out.println(arr4[1]); 25 System.out.println("------------------"); 26 long[] arr5 = new long[2]; 27 System.out.println(arr5[0]); 28 System.out.println(arr5[1]); 29 System.out.println("------------------"); 30 boolean[] arr6 = new boolean[2]; 31 System.out.println(arr6[0]); 32 System.out.println(arr6[1]); 33 System.out.println("------------------"); 34 float[] arr7 = new float[2]; 35 System.out.println(arr7[0]); 36 System.out.println(arr7[1]); 37 System.out.println("------------------"); 38 double[] arr8 = new double[2]; 39 System.out.println(arr8[0]); 40 System.out.println(arr8[1]); 41 System.out.println("------------------"); 42 //定义字符串数组 43 String[] arr9 = new String[2]; 44 System.out.println(arr9[0]); 45 System.out.println(arr9[1]); 46 47 } 48 49 50 }
以上是关于第7天的主要内容,如果未能解决你的问题,请参考以下文章
第 7 行的 InflateException 二进制 XML 文件:膨胀类片段时出错