引用数据类型和方法的介绍

Java 中数据类型分为两大类:基本数据类型、引用数据类型。

        基础数据类型在之前的 Java 基础已经讲过了,引用数据类型又分为两种:一种是 Java 为我们提供好的类,例如 String、Scanner、Random 等,在每一个类中又定义了一些属性、方法,我们直接拿来使用即可,除 此之外我们还可以自定义类,以便来解决 Java 为我们提供好的类不能满足需求的问题。

类的定义

修饰符 class 类名{
    //属性(成员变量、类变量)
    数据类型 属性名1;
    数据类型 属性名2;
    数据类型 属性名3;
    ....

    //方法(行为、功能)
    修饰符 返回值类型 方法名1(参数列表){
        //方法体
    }
    修饰符 返回值类型 方法名2(参数列表){
        //方法体
    }
    ...
}

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

1、定义的位置不同成员变量:

        成员变量:定义在类中的方法之外,它是用来描述类或者该类类型的 对象的,因此成员变量是属于类或者对象。

        局部变量:定义在类中的方法之中或者代码块之中的变量,我们称之为局部变量。

2、存储位置不同

        成员变量:存储在堆内存中的对象中,因为成员变量是属于对象的。

        局部变量:存储在栈内存中的方法对应的方法栈中的。

3、生命周期不同

        成员变量:成员变量是属于对象,它是随着对象的创建而出现在堆内存中,同样的随着对象的销毁而销毁。

        局部变量:随着方法的调用执行出现在方法对应方法栈中,同样的随着方法执行结束(弹栈)之后而被释放。

4、初始化不同

        成员变量:它是随着对象的创建而出现在堆内存中,如果我们没有为成员变量显式的指定一个初始值,那么成员变量就会有一个默认的初始值,整型的初始值为 0,浮点型的初始值为 0.0,字符型的初始值为空字符,布尔类型的初始值为 false,引用数据类型的初始值为 null。

        局部变量:必须手动的去声明一个初始值,否则这个变量就不能够使用。

方法的定义

修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,...){
    //方法体
    //如果返回值类型为 void,则不需要 return 语句,如果返回值为类型非 void,则需要return
    //方法体执行完之后的结果,返回的结果必须与方法声明时的返回值类型一致
}

修饰符:方法的修饰符有很多,有进行权限限制的(public、default、protected、private),还有静态修饰符 static,方法使用了静态修饰符 static,则表示该方法属于类的,在实际调用执行的时候可以直接使用类名去调用。

返回值类型:用来限定方法调用执行的时候最终返回的结果的类型,如果方法没有一个具体的结果 返回,则把方法的返回值类型声明为 void。

方法名:给自定义的方法起一个名字,方便在方法定义完成之后进行调用,在起方法名的时候尽量 起得有意义,这样一来通过方法名我们就可以知道该方法大概的用途,并且方法名在起名的时候与 变量名类型都是小写开头并遵循驼峰命名法。

参数类型:用来限制方法在调用执行的时候实际传入的参数的数据类型。

参数名:参数名是任意的,它实际上是一个变量,不管参数名是什么,它都表示方法在调用执行的 过程中实际传入的参数。

return 关键字:用来结束方法并返回方法执行结束的结果,如果方法没有具体的返回值,则可以 把 return 语句省略。

        方面名后面的圆括号中内容,整个称之为形参列表,它可以是 0 个、1 个、甚至多个参数,至于参数具体有几个就看方法定义声明时的实际需求。

方法调用过程

/**
* 求两个 int 类型的整数的和
*
* @param x 表示参与求和运算中的一个整数
* @param y 表示参与求和运算中的另一个整数
* @return
*/
public static int plus(int x,int y) {
    return x + y;
}

// 在 main 方法中调用 plus 方法:
public static void main(String[] args) {
    int sum = plus(123, 456);
    System.out.println(sum);
}

方法定义类别

1、有返回值有参数;

/**
* 求两个 int 类型的整数的和
*
* @param x 表示参与求和运算中的一个整数
* @param y 表示参与求和运算中的另一个整数
* @return
*/
public static int plus(int x,int y) {
    return x + y;
}

2、有返回值没有参数;

/**
* 随机出一个 [0,100) 之间的整数
* @return
*/
public static int randomInteger() {
    Random random = new Random();
    int n = random.nextInt(100); //[0,100)
    return n;
}

3、没有返回值有参数;

/**
* 打印一个由 n 行 * 组成的直角三角形
* @param n
*/
public static void show(int n) {
    for(int i = 0;i <= n;i++) {
        for(int j = 0;j < i;j++) {
            System.out.print("*");
        }
        System.out.println();
    }
}

4、没有返回值没有参数;

/**
* 打印一个由 5 行 * 组成的直角三角形
*
* @param n
*/
public static void show() {
    for(int i = 0;i <= 5;i++) {
        for(int j = 0;j < i;j++) {
            System.out.print("*");
        }
        System.out.println();
    }
}

        上面有两个名为 show 方法,在一个类中是允许出现同名的方法,但是同名的方法的参数列 表必须不同,这样的方称之为重载。

方法重载

        在一个类中存在多个名称相同的方法,但是这些方法的参数列表不同,则这多个方法构成重载,换句话说同一个类中方法名相同参数列表不同的多个方法(参数列表不同值得的是数据类型不同、参数个数不同,跟参数的名称无关)。

比如下面这两个就是同一个方法:

public static int plus(int a,int b) {
    return a + b;
}

public static int plus(int x,int y) {
    return x + y;
}

        Java 中一个类型相同的方法只跟方法名以及参数列表有关,跟方法的返回值类型是无关的。

比如下面这两个方法就是同一个方法,而在 Java 中一个类中是不允许出现相同的方法,因此编译出错;

public static double plus(int a,int b) {
    return a + b;
}

public static int plus(int x,int y) {
    return x + y;
}

可变长度参数列表

public static int plus(int x,int y) {
    return x + y;
}

        这样plus 方法是求两个数的和,但是现在要求不确定的多个数的和,就可以使用可变长度参数列表。参数传递

        Java 中,可以使用 "参数类型..." 方式表示多个指定类型的参数,在实际调用执行方法的时候,这多 个指定类型的参数会被封装成指定类型的数组去使用。

/**
* 求多个 int 类型的整数的和
*
* @param args
* @return
*/
public static int plus(int... args) {
    int sum = 0;
    for(int i = 0;i < args.length;i++) {
        sum += args[i];
    }
    return sum;
}

参数传递

        定义方法的时候,会有参数列表,参数列表中的参数都称之为形式参数,简称形参。当方法定义完成之后,我们在实际调用使用的时候,需要把实际的参数传递给定义的时候参数列表中对应的形参,此时方法在调用执行的时候,形参的值就为实际传递进来对应的实际参数值,整个传递过程我们称之为参数传递。

(1)当调用方法的时候,传入具体的参数值的数据类型为基本类型以及 String 类型,形式参数的改变对实际参数并不会参数任何影响。

(2)当调用方法的时候,传入具体的参数值的数据类型为引用类型(String 类型除外),即对象,形式参数的改变会对对象的内部发生影响,即对象在堆内存中所占的内存内部的内容产生了影响,但是对于对象本身而言还是原来的对象,即在堆内存中还是那块内存。

示例1:

public static void main(String[] args) {
    int x = 10;
    int y = 5;
    change(x, y);
    System.out.println("变量 x 的值为:" + x);
    System.out.println("变量 y 的值为:" + y);
}
public static void change(int x,int y) {
    x = 100;
    y = 50;
}

输出结果:

变量 x 的值为:10
变量 y 的值为:5

示例2:

public static void main(String[] args) {
    int[] array = {1,24,46,78,79};
    change(array);
    System.out.println(Arrays.toString(array));
}
public static void change(int[] array) {
    for(int i = 0;i < array.length;i++) {
    array[i] = 99;
}
}

输出结果:

[99, 99, 99, 99, 99]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值