Java基础知识2

文章详细介绍了数组的基本概念,包括长度、元素、索引和遍历,以及动态和静态初始化。还通过示例展示了如何找到数组中的最大值和最小值,以及如何翻转数组。此外,讨论了方法的定义、重载和递归,以及类、对象、静态成员和局部变量的概念。
摘要由CSDN通过智能技术生成

数组  (数组长度不可改变)

长度: 指的就是这个容器的容量, 表示这个数组中能存储多少个数据

元素: 指的就是数组中存储的数据

索引,下标: 某一个元素在数组中的一个位置索引,从0开始。

遍历数组: 依次获取到数组中的每一个元素

格式: 数据类型[  ]   数组名;              数据类型   数组名[  ];

动态初始化

初始化时只指定数组长度,由系统(jdk)为数组分配初始值。

int[ ] arr =new int[5];   

//int:数组中数据类型    []:代表数组     arr:变量名   new:代表在内存开辟存储空间   5:数组的长度,数组长度一旦确定了,不能修改

arr[ 1] = 5;给arr数组中的第二个元素赋值

静态初始化:给出元素的初始值,系统决定你的长度

int[] number = new int[]{1, 2, 3, 5, 8};

int[] number = {1,2,3,5,8};

异常

indexOutOffBoundsException:索引越界

索引的取值范围超出了数组长度、

nullPointException:空指针异常

数组本身这个遍历在内存中就没有给开辟出地址,数组是引用数据类型,默认值的null

遍历

遍历数组就是一次获取数组中的每一个元素;可以通过索引获取指定位置的元素,索引从0开始到长度-1结束

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

for (int index =0 ; index<arr.length ; index++){

        System.out.println(arr[index]);

}

例题1:

最大值、最小值

public static void main(String[] args) {
    int[] arr ={2,333,652,65426,551,662};
    /**
     * 数组中的第一个元素默认最大值
     * 开始遍历
     * 索引初始值是1
     * 判断条件:遍历什么时候结束,数组的长度-1
     * 步长+1
     * 循环体:判断当前最大值与数组中的元素比较
     * 当前最大值:max
     * 数组中的元素:arr[index]
     * 如果max<arr[index] ; max=arr[index]
     * 否则什么也不干
     */
    int max =arr[0];
    for(int index =1;index<arr.length;index++){
        System.out.println();
        if(max<arr[index]){
            max=arr[index];
        }
    }
    System.out.println(max);
int min = arr[0];
for(int index =1;index<arr.length;index++){
    System.out.println();
    if(min>arr[index]){
        min=arr[index];
    }
}System.out.println(min);

}

例题2:
/**
     * 数组的翻转
     * 给的:int[] arr={4,7,6,2}
     * 期望:int[] arr={2,6,7,4}
     */
    /*创造一个数组用来互换数字,总结规律将其封装为方法
    * int tmp=0;
    * tmp=arr[3];
    * arr[3]=arr[0];
    * arr[0]=tmp;
    *
    * tmp=arr[2];
    * arr[2]=arr[1];
    * arr[1]=tmp;
    * */
public static void main(String[] args) {
    int [] arr={4,7,6,2};
    int [] reverce=reverce(arr);
    printArray(reverce);
    for(int index_left=0,index_right=arr.length-1;index_left<index_right;index_left++,index_right--){
        int tmp=0;
        tmp =arr[index_right];                 //将最后一位放到数组tmp中
        arr[index_right]=arr[index_left];      //将最后一位重新赋值
        arr[index_left]=tmp;                   //将tmp中的数赋值到第一位

    }                                         //此时数组结构已经发生变化
    for(int index=0;index<arr.length;index++){    //将结构变化后的数组遍历
        System.out.println(arr[index]);
    }
}
/**
     * 为避免麻烦可以将重复使用的部分封装
     */
    //接例2
public static int[] reverce(int[] arr){
    for(int index_left=0,index_right=arr.length-1;index_left<index_right;index_left++,index_right--){
        int tmp=0;
        tmp =arr[index_right];
        arr[index_right]=arr[index_left];
        arr[index_left]=tmp;}
    return arr;
}
public static void printArray(int[] arr){
        for (int index = 0; index < arr.length; index++) {
            System.out.println(arr[index]);
        }
    }
//调用方法从而得到结果
public static void main(String[] args) {
    int [] arr={6,5,2,4,25,2,85,2,64};
    int [] reverce=reverce(arr);    //可直接写为printArray(reverce(arr));
    printArray(reverce);}

二维数组

int[] [] arr={{1,2,3},{4,5,6},{7,8,9}};

例题:

public static void main(String[] args) {
    //二维数组
    int[][] arr={{1,2,3},{4,5,6},{7,8,9}};
    //遍历二维数组
    for (int index_w=0;index_w<arr.length;index_w++){
        for (int index_l=0;index_l<arr.length;index_l++){
            System.out.print(arr[index_w][index_l]);
        }
        System.out.println();
    }
}

方法的定义

[访问权限修饰符] [其他的修饰符]   返回值类型 方法名 ([参数类型 参数名,...])  { // 方法体 } 注意:[]里的内容,不是必须的       (如果没有返回值类型就写void

修饰符 目前记住 public static

返回值类型 用于限定返回值的数据类型

方法名 一个名字,为了方便我们调用方法

参数类型 用于接收调用方法时传入的数据的类型

参数名 用于接收调用方法时传入的数据的变量

方法体 完成功能的代码 return 结束方法,把返回值带给调用者

方法的重载

与返回值类型无关,只看方法名和参数列表 在调用时,

虚拟机通过参数列表的不同来区分同名方法

方法重载:在同一个类中,出现了方法名相同的情况。 

方法重载的特点: 方法名相同,参数列表不同。方法重载与返回值无关。

方法的递归:方法自己调用自己,并要有方法的出口。

创建类

class Student_3{

    private String name;

    private int age;

    //给name设置值

    public void setName(String a){

        name = a;

    } //获取name的值

    public String getName(){

        return name;

    }public void setAge(int a){

        age = a;

   }

public static void main(String[] args) {

        Student_3 s = new Student_3();

        s.setName("老六");

类:属性,行为

创建对象:类 s =new  类();

局部变量与成员变量的区别

1.在类中的位置不同:局部变量在方法内部;成员变量在类的内部,方法外部。

2.在内存中的位置不同:局部在栈,成员变量在堆里。

3.初始值:

局部变量:没有默认的初始值,需要赋值才能使用

成员变量:有默认的初始值

如果局部变量和成员变量的名字一样,在方法的调用过程中,采用就近原则

private关键字

//被private 修饰的成员变量,只能在本类中使用;

private String name;

//由于成员变量被private修饰,只能在本类中使用

//所以需要提供公共的getXxx()和setXxx();

静态成员:(static关键字)

静态变量与成员变量区别:

1.     静态成员是属于类的, 在访问的时候, 需要用类来访问           方法区的静态区

        非静态成员是属于对象的, 在访问的时候, 需要用对象来访问       

2.- 静态方法中, 不能直接访问非静态成员: 静态只能访问静态

   - 在非静态的方法中, 可以直接访问静态的成员   非静态,什么都可访问

3.生命周期不同:

静态变量:随着类的加载而加载,随着类的消失而消失;

成员变量:随着对象创建而创建,随着对象的消失而消失;

4.调用方式不同:

静态变量:可以通过类名调用,也可以通过对象调用;

成员变量:只可以通过对象调用。

5.共享:

静态变量:被所有对象共享

成员变量:每个对象有自己的。

特点:

优先于对象存在;随着类的加载而加载;被类的所有对象共享;可以通过类名调用(如果用对象调用静态变量或者方法,那静态变量将会改变,因为它被所有对象共享【公共饮水机被老6破坏后老7也只能用破坏的饮水机】)

注意:

静态的只能调用静态的(变量或者方法)   ;静态方法中不能有this,因为静态变量或者是方法,优先于对象而存在,随着类的加载而加载在共享区域。

非静态的方法,既可以使用静态的又可以使用非静态的。

常量要放到静态区!

匿名对象:没有名字的对象

匿名对象使用场景

         A:调用方法 仅仅只调用一次的时候使用

               注意:调用多次不合适

               这样仅仅调用一次的时候使用 有什么好处

                使用完毕之后就变成垃圾了,等待垃圾回收器回收

         B:可以作为实际参数传递

StudentDemo_1   studentDemo_1 = new StudentDemo_1();(没匿名)

studentDemo_1.method(new Student_1());(匿名)

构造方法:(创建对象的时候调用)

权限修饰符 没有返回值,连void也没有,并且方法名和类名相同。

系统默认有无参数构造方法,但是我们构造了有参数的构造方法后,系统将不再提供无参数(自己要加上)。这两个构造方法是重载

public class Student {  

    public Student() {

        System.out.println("这是构造方法");

    }}

public class StudentDemo {

    public static void main(String[] args) {

        //如何调用构造方法呢?

        //通过new关键字调用

        //格式:类名 对象名 = new 构造方法(...);

        Student s = new Student();

    }

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值