JavaSE复习巩固

第三天:数组,方法

1.什么是数组?

数组:内存中开辟的一块连续的空间,是用来临时存储同种数据的,要想永久性存储数据,可以存储在数据库里面,也可以通过流存储到文件中。

为什么会出现(需要)数组?

因为我们需要一次存储多个数据,而之前学的变量一次只能存储一个数据。

数组与变量的区别

1.变量是内存中一块小的空间,而数组是内存中一块连续的空间

2.变量一次只能存储一个数据,而数据一次可以存储多个数据

3.变量在内存中分布是无序的,凌乱的,随机的,而数组分布是连续的,有序的。

4.变量没有默认值,而数组是有默认值的。

定义数组的两种方式(动态声明,静态声明)

1.动态定义

数组类型[] 数组名=new 数据类型[数组长度];

例子: int[] arr=new int[10];//在内存中开辟一块长度为10的连续空间。

如何给数组赋值?需要借助索引(下标,角标)

在计算机中下标一般都是从0开始的

赋值方式:数组名[下标]=值; 例子:arr[0]=1;

取值方式也是通过下标(索引):arr[0] 输出arr[0]即可得到值

注意:超出数组取值范围,就会报数组角标越界异常

数组的遍历:for(int i=0;i<arr.length;i++){

System.out.println("数组:"+arr[i])

}

数组的长度:arr.length 数组名.属性名

数组的默认值:byte short int long: 0 float double: 0.0

char : 空字符 String : null boolean : false

数组的第二种声明方式:静态声明

数据类型[] 数组名={值1,值2,.....值n};

例子:int[] arr={10,20,30,40};

特点:一步到位,赋值,长度全都有,有多少个值,数组的长度就是多少。

思考?数组只能存储同种数据类型吗?本意是对的,编译的时候会把数据统一转为同种数据类型。

基本练习题:

 1.数组的复制

   //数组的复制
        int[] arr={1,2,34,5};
        int[] arr1=new int[arr.length];
        //遍历循环
        for (int i = 0; i <arr.length ; i++) {
            //把arr数组里面的元素复制复制给arr1
            arr1[i]=arr[i];
        }

2.数组的合并

 //数组的合并
        int[] brr={1,2,3,5};
        int[] brr1={4,5,9};
        int[] crr=new int[brr.length+brr1.length];
        for (int i = 0; i <brr.length; i++) {
            crr[i]=brr[i];
        }
        //因为前面brr数组里面元素的值已经复制给了crr,现在将brr1的值赋值给crr,在brr数组长度上+i即可
        for (int i = 0; i <brr1.length ; i++) {
            crr[brr.length+i]=brr1[i];
        }
        //遍历crr
        for (int i = 0; i <crr.length ; i++) {
            System.out.print(crr[i]+"  ");
        }

3.求出数组元素的最大值和最小值以及总和(sum),和反向遍历数组

   //数组的求和和最大值,最小值
        int[] arr={1,2,3,4,5};
        int sum=0;
        int min=arr[0];//默认数组的第一个元素为最小值
        int max=arr[0];//默认数组的第一个元素为最大值
        for (int i = 0; i <arr.length ; i++) {
            if (arr[i]>max){
                max=arr[i];
            }
            if (arr[i]<min){
                min=arr[i];
            }

            sum+=arr[i];//先遍历数组中的元素,在进行累加
        }
        System.out.println("数组的长度:"+arr.length);
        System.out.println("sum="+sum);
        System.out.println("最大值:"+max);
        System.out.println("最小值:"+min);
        //反过来遍历数组
        for (int i = arr.length-1; i >=0 ; i--) {
            System.out.println("数组"+arr[i]);
        }

4.从键盘输入一个数字在数字找它的小标并且打印出来。

 //从键盘输入一个数字在数字找它的小标并且打印出来。
        System.out.println("请输入要查找的数据:");
        int[] arr={11,22,333,222,111};
        Scanner sc = new Scanner(System.in);
        int number = sc.nextInt();
          int index=-1;//索引为负数表示数组找那个没有这个数据
        for (int i = 0; i <arr.length ; i++) {
            //判断数组中是否有这个数
            if(number==arr[i]){
                index=i;//输出number的小标
                System.out.println(number+"的下标是"+index);
                break;//找到了跳出这个循环
            }
        }
        if (index==-1){
            System.out.println("没有找到这个数据");
        }

2.方法

2. 1 方法是什么,作用?

方法(method)是将具有独立功能的代码块组织成为一个整体,使其具有特殊功能的代码集。

方法就是将某些具有独立的功能的代码,把它包(封装)起来

如何定义方法?----可以照着主方法声明

方法定义好之后,使用(调用)方法

如何去定义一个方法?

方法的语法结构:

public 返回值类型 方法名(参数1,参数2.....){

         方法体;

}

例子:

    //调用方法并输出方法的结果
        System.out.println(FuntionDemo1.sum(1,2));

    }
    //定义方法
    public static int sum(int a,int b){
        return a+b;
    }
}

2.2方法的分类----共分为四类

1.无参无返:没有参数,也没有返回值

例如:public void A{

System.out.println("这是无参无返的方法");

}

自己不用给别人东西,别人也不用给自己东西

一般用于直接输出打印

自己定义方法:

格式:

public static 返回值类型 方法名(参数){

方法体-------这个方法封装的功能代码

}

没有返回值的标志: void

有返回值的标志: return

public static void 方法名(){

方法体

}

static:静态的

void:无返回值的

2.无参有返:没有参数,但是有返回值,调用者不用给方法东西,方法需要返回给调用东西, 自己不用给别人东西,别人需要给自己东西

例如:public int A{

System.out.println("这是无参有返的方法");

return 1;

}

3.有参无返(有参数,没有返回值):调用者给方法东西,而方法不需要给调用者东西

自己给别人东西,而别人不需要给自己东西

huanQian()

public void 方法名(int a){

方法体;

System.out.println("这是无参有返的方法"+a);

}

4.有参有返(有参数有返回值) :自己要给别人东西,别人也要给自己东西

public 参数类型 方法名(参数1,参数2...){

方法体

}

例子:

//变量如果是基本数据类型,必须先赋值,才能去使用,因为基本数据类型没有默认值

//定义方法

public static int sum(int a,int b){

return a+b;

}

2.3参数和返回值进行理解

写好一个方法之后,需要被调用。角色: 方法本身(别人)-----调用者(主方法)(自己)

参数与返回值就是这两个角色之间的数据传递

参数:调用者传给方法的数据

返回值:方法返回给调用者的数据

2.4方法重载的概念

什么是方法重载?

方法重载是在同一个类中方法名相同,参数列表不同(参数包含参数个数,参数类型,参数顺序)与返回值无关(跟返回值没有关系)。

面试题?方法重载与方法重写的区别?

 方法重载是在同一个类中方法名相同,参数列表不同(参数包含参数个数,参数类型,参数顺序)与返回值无关(跟返回值没有关系)。

 方法重写是在子父类中,子类继承父类的方法,当父类的方法不满足子类时候,我们就可以对父类的方法进行重写。

2.5方法在内存中是如何存储的

@1b6d3586------理解成是数组在内存中位置的表现形式(地址值)

int[] arr=new int[]{1,2,3};

arr这个对象名携带的是一个地址值(对象的引用)例如:xx001

这个地址值指向堆内存中的内存空间。

数组会存储到堆空间中,在堆空间开辟一块空间。如下图所示:

 

 

2.6理解形参与实参的区别

什么是形参?参数(形式参数)

形参:在自定义方法(方法)的声明上面(参数声明上面)

例子:

int a=10;//实参

System.out.println(A(a))

public int A(int a){//形参

     retrun a;

}

什么是实参?实际参数

在main方法中定义的一个实际变量

2.7 形参是基本数据类型和引用数据类型时,形参的改变是否对 实参有影响?

形参如果是基本数据类型,形参的改变会不会影响实参?不会

形参如果是引用数据类型,形参的改变会不会影响实参?会

为什么?

1.形参是基本数据类型,形参发生改变不会直接影响实参,基本数据类型保存在栈内存中,在栈中开辟一块内存空间可以称为栈帧,

栈帧1和栈帧2本质上是两个不同的空间,没有直接的联系,形参改变之后,方法(method)执行完后,method直接就弹栈了,

被jvm虚拟机中的垃圾回收机制(GC)释放了,跟main方法中的实参没有任何联系。

2.形参是引用数据类型,形参发生改变会直接影响实参,因为中间有地址值做牵引,两个参数指向的是同一个堆内存的地址。

8.使用方法需要注意的细节

细节:

1.方法可以调用其他方法吗?可以

2.方法可以调用自己本身吗?可以,但是会出现栈内存溢出,因为方法加载进栈中,会占用栈内存的空间,如果一直调用方法本身,最终栈内存空间会消耗完,没有多余的空间去加载了,所有会出现栈内存溢出。

3.方法里面可以写方法吗?不可以

无返回值的方法可以有return吗?可以,是用来结束方法的,结束(跳出)循环时break。

4.方法中的参数只能是同种数据类型吗?不是,可以是不同种类的数据类型的,只是传参数的时候对应好(匹配)参数类型即可。

今日学习感受:

       学习java其实比较容易的,有些之前不懂得,现在也有了新的领悟,真的,需要自己一步一个脚印扎扎实实的走好每一步,才能不负自己的付出。学习java不难,难的是坚持,希望自己能继续,日复一日的坚持下去。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值