今天是初学Java的第五天,我们来看看方法(函数)、方法重载、数组和Java中的内存分配
一、方法
概念:使用{}完成特定功能的代码块!
格式:
修饰符 返回值类型 方法名(参数类型1 参数名2,参数类型2 参数名2…){
代码…
return 结果;
}
格式的解释说明:
1)修饰符: public static 先按照这个格式写(固定)
2)返回值类型: 基本数据类型中的某个 ,最终接收数据的具体结果类型!
3)方法名:给当前代码块{} 起名字
要遵循Java中的标识符:小驼峰命名法
如果是单个单词,全部小写
多个单词,第一个单词小写,其他首字母大写
4)参数
实际参数:具体在参与运算的实际值
形式参数:在方法中传递的参数
参数类型:基本数据类型
参数名:变量名
5)return
将具体参运算的结果—>返回给调用者(谁调用,返回给谁)
6)定义方法的时候,心里有"两个明确"
a)明确返回值类型
b)明确参数个数以及参数类型
函数的调用:
A:明确返回值类型的函数调用
1)单独调用,没有意义,没有结果
2)输出调用,可以实现,但是不推荐,数据写死
3)赋值调用(推荐)
B:void类型的函数调用
没有具体返回值类型方法的调用,只能使用单独调用
二、方法重载
概述:在同一个类中,允许存在一个以上的同名方法,只要它们的参数个数或者参数类型不同即可。
特点::函数名相同,参数列表不同,与返回值无关!
参数列表不同分为:
1)参数个数不同
2)参数类型不同
三、数组
数组的概念:
数组是存储同一种数据类型多个元素的集合。也可以看成是一个容器。
数组既可以存储基本数据类型,也可以存储引用数据类型。
特点:
1)数组是存储多个变量(元素)的东西(容器)
2)这多个变量的数据类型要一致
一维数组的定义格式:
*格式1:*数据类型[] 数组名; 例:int[] arr ; 定义了一个int类型的数组 ,数组名称是arr
*格式2:*数据类型 数组名[]; 例:int arr[] ; 定义了一个int类型的arr数组
四、Java中的内存分配
Java 程序在运行时,需要在内存中的分配空间。为了提高运算效率,就对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。
栈 存储局部变量
堆 存储new出来的东西
方法区(面向对象部分讲)
本地方法区(和系统相关)
寄存器(给CPU使用)
1:局部变量
a:方法定义中或者方法声明上的所有变量
b:使用完毕,立即消失
2:new出来的东西,实体,对象。
new int[3];
a:每一个实体都有首地址值
b:每一个实体内的数据都有默认值
byte,short,int,long 0
float,double 0.0
char ‘\u0000’
boolean false
引用类型:null
c:使用完毕后,会被垃圾回收器空闲的时候回收
数组中常见的两个小问题:ArrayIndexOutOfBoundsException和NullPointerException
1)ArrayIndexOutOfBoundsException:数组角标越界
出现原因:访问不存在的数组中的角标,属于运行时期异常
解决方案:排查具体原因,具体哪一行角标越界
2)NullPointerException:空指针异常!
出现原因:当一个对象为的引用不存在了,然后还需要使用对象完成一些特定功能!
解决方案:
对当前这个对象进行非空判断
if(对象名称!=null){
//使用对象完成特定的功能
}
今天的学习就到这了,下面附上今日练习题~
--------------------------------------分割线1----------------------------------------------
Problem Part(问题篇):
函数的练习:
A:求两个数据之和
B:判断两个数据是否相等
C:获取两个数中较大的值
D:打印m行n列的星形
E:打印nn乘法表
数组的练习:
A:int[] arr = {11,22,33,44,55} ;将数组遍历(依次输出数组中的每一个元素)
B:自定义数组,获取获取最值(获取数组中的最大值最小值)
--------------------------------------分割线2----------------------------------------------
Answer Part(答案篇):
函数的练习:
A:
//求两个数据之和
import java.util.Scanner;
class FunctionDemo1{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个数");
int a = sc.nextInt();
System.out.println("请输入第二个数");
int b = sc.nextInt();
int sum = getSum(a,b);
System.out.println("两个数据之和为:"+sum);
}
public static int getSum(int a,int b){
return a + b;
}
}
B:
//判断两个数据是否相等
import java.util.Scanner;
class FunctionDemo2{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个数");
int a = sc.nextInt();
System.out.println("请输入第二个数");
int b = sc.nextInt();
boolean flag = isEqual(a,b);
System.out.println("两个数据是否相等:"+flag);
}
public static boolean isEqual(int a,int b){
return a == b;
}
}
C:
//获取两个数中较大的值
import java.util.Scanner;
class FunctionDemo3{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个数");
int a = sc.nextInt();
System.out.println("请输入第二个数");
int b = sc.nextInt();
int max = getMax(a,b);
System.out.println("两个数中较大的值为:"+max);
}
public static int getMax(int a,int b){
int max = (a>b)?a:b;
return max;
}
}
D:
//打印m行n列的星形
import java.util.Scanner;
class FunctionDemo4{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入行数:");
int m = sc.nextInt();
System.out.println("请输入列数:");
int n = sc.nextInt();
printStar(m,n);
}
public static void printStar(int m,int n){
for(int i = 0;i < m;i++){
for(int j = 0;j < n;j++){
System.out.print("*");
}
System.out.println();
}
}
}
E:
//打印nn乘法表
import java.util.Scanner;
class FunctionDemo5{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数据(1<=n<=9):");
int n = sc.nextInt();
if (n >=1 && n<=9){
printMultiplyTab(n);
}else{
System.out.println("非法数据");
}
}
public static void printMultiplyTab(int n){
for(int i = 1;i <= n;i++){
for(int j = 1;j <= i;j++){
System.out.print(j+"*"+i+"="+(i*j)+"\t");
}
System.out.println();
}
}
}
数组的练习:
A:
//int[] arr = {11,22,33,44,55} ;将数组遍历(依次输出数组中的每一个元素)
class ArrayDemo{
public static void main(String[] args){
int[] arr = {11,22,33,44,55} ;
//arr.length 数组arr的长度
for(int i = 0;i < arr.length;i++){
System.out.println("arr["+i+"]:"+arr[i]);
}
}
}
B:
//自定义数组,获取获取最值(获取数组中的最大值最小值)
class ArrayDemo2{
public static void main(String[] args){
/* */
int[] arr1 = new int[10];
arr1[1] = 15;
arr1[3] = 25;
arr1[4] = 101;
arr1[5] = -12;
arr1[7] = -98;
arr1[8] = 5;
int max1 = GetMax(arr1);
int min1 = GetMin(arr1);
int[] arr2 = {-5,22,13,450,-55};
int max2 = GetMax(arr2);
int min2 = GetMin(arr2);
System.out.println("arr1数组中的最大值为:"+max1);
System.out.println("arr2数组中的最大值为:"+max2);
System.out.println("arr1数组中的最小值为:"+min1);
System.out.println("arr2数组中的最小值为:"+min2);
}
//获取数组中的最大值
public static int GetMax(int[] arr){
int max = arr[0];
for(int i = 0;i< arr.length;i++){
if(arr[i] > max){
max = arr[i];
}
}
return max;
}
//获取数组中的最小值
public static int GetMin(int[] arr){
int min = arr[0];
for(int i = 0;i< arr.length;i++){
if(arr[i] < min){
min = arr[i];
}
}
return min;
}
}