实参是你在调用方法的时候,给这个方法传递的参数值。对象.printInfo;
这里的”hello”就是一个实参,实现方法调用的时候,系统会把实参”hello”的值赋予形参info变量,即info就指向了”hello”,调用这个方法后,就会在屏幕上打印输出hello。

基本数据类型作为参数传递

基本数据类型作为参数传递时都是传递值的拷贝。
指的是方法调用中,传递的是值的拷贝,无论怎么改变这个拷贝,原值是不会改变的。

也即是说实参把它的值传递给形参,对形参的改变不会影响实参的值。

public class Test {
    public static void main(String[] args) {
        Test test1 = new Test();
        int i = 5;
        System.out.println("调用前的i=" + i);
        test1.testPassParameter(i);
        //传递后,testPassParameter方法中对形参i的改变不会影响这里的i
        System.out.println("调用后的i=" + i);
    }
    public void testPassParameter(int i) {
        i = 10;//这里只是对形参的改变
        System.out.println("tpp方法中的i=" + i);
    }
}

输出结果

调用前的i=5
tpp方法中的i=10
调用后的i=5

1、 调用带参方法时,必须保证实参的数量、类型、顺序与形参一一对应

对于同一个类,如果这个类里面有两个或者多个重名的方法,但是方法的参数个数、类型、顺序至少有一个不一样,这时候就会构成方法的重载。方法的重载有3个条件:1、函数位于同一个类下面;2、方法名必须一样;3、方法的参数列表不一样。

拓展:

基本数据类型的包装类型在传递参数时其实也是“按引用传递的”,只是因为包装类型变量都是不可变量,容易误解。

String是final类型,是个特殊的类,对它的一些操作符是重载的。比如:

String str = "hello";//等价于String str=new String("hello");

 String str = "hello";
        str = str + "world";//等价于str = new String(new StringBuffer(str).append("world"));

从以上分析,现在可以更易理解下面的代码:

public class Test {
    public static void fun(String str, char ch[]) {
        str = "world";
        ch[0] = 'd';
    }
    public static void main(String[] args) {
        String str = new String("hello");
        char[] ch = {'a', 'b', 'c'};
        fun(str, ch);
        System.out.println(str);
        System.out.println(ch);
    }
}

输出结果

hello  
dbc

方法调用时,名称相同的实参和形参并不一样,一个是main()中的str,指向存放”hello”的内存地址。一个是fun()中的str,str=”world”,相当于new
String(“world”)。String是final类型,将在堆中重新分配一个内存空间存放”world”。ch[0]=’d’,对象的内容发生改变。

图片 1

image

所以main()中str变量存放的对象内容依然是”hello”。ch从”abc”变为”dbc”。

图片 2

形参是定义方法的时候,该方法所携带的参数,比如有一个方法public void
printInfo(String
info){System.out.println;}此处info就是一个形参,它是String类型的。

参考:

  • String的参数传递

  • java基础中按值传递和引用传递详解

  • Java中的值传递与引用传递详解

0-99的随机数,可修改100调节,改成50就是0-49的随机数

为了便于理解,会将参数传递分为按值传递和按引用传递。按值传递是传递的值的拷贝,按引用传递传递的是引用的地址值,所以有“在java里参数传递都是按值传递”、“引用也是按值传递的”这些说法。

突然发现方法中以数组为形参时,在掉用方法的时候,实参只要输入数组名就可以了

对象作为参数传递

对象作为参数传递时,在方法内改变对象的值,有时原对象跟着改变,而有时又没有改变。就会让人对“传值”和“传引用”产生疑惑。

先看看两种情况的例子。

public class Test {
    public static void main(String[] args) {
        StringBuffer s1 = new StringBuffer("hello");
        StringBuffer s2 = new StringBuffer("hello");
        changeStringBuffer(s1, s2);
        System.out.println("s1=" + s1);
        System.out.println("s2=" + s2);
    }
    public static void changeStringBuffer(StringBuffer ss1, StringBuffer ss2) {
        ss1.append("world");
        ss2 = ss1;
    }
}

输出结果:

s1=helloworld  
s2=hello

分析如下:

//(1)s1,s2指向字符串的地址不同,假设为地址1,地址2
StringBuffer s1 = new StringBuffer("hello");
StringBuffer s2 = new StringBuffer("hello");

图片 3

image

//(2)调用changeStringBuffer方法
changeStringBuffer(s1, s2);
//调用后会将s1,s2的地址(地址1,地址2)传给ss1,ss2,即现在ss1也指向地址1,ss2也指向地址2

图片 4

image

//(3)ss1所指向字符串的值变为helloworld,调用者s1的值相应变化。
ss1.append("world");
//ss2将指向ss1指向的地址(地址1),但此时s2依旧指向地址2,s2的值在调用前后不变。
ss2 = ss1;

图片 5

image

所以,s1的输出为helloworld,s2的输出结果为hello。

(注意,这里为了区分,s1,s2和ss1,ss2用了不同的名称,但有时候形参与实参的名字相同,其实两者变量是完全不同的,一个是main方法中的变量,一个是changeStringBuffer()中的变量。)

可以看出,在java中对象作为参数传递时,传递的是引用的地址,是把对象在内存中的地址拷贝了一份传给了参数

无参有返回值方法:

图片 6

2、
返回值类型:方法返回值的类型,如果方法不返回任何值,则返回值类型指定为
void ;如果方法具有返回值,则需要指定返回值的类型,并且在方法体中使用
return 语句返回值

产生随机数;

如果同一个类中包含了两个或两个以上方法名相同、方法参数的个数、顺序或类型不同的方法,则称为方法的重载,也可称该方法被重载了

1、 访问修饰符:方法允许被访问的权限范围, 可以是
public、protected、private 甚至可以省略 ,其中 public
表示该方法可以被其他任何代码调用,其他几种修饰符的使用在后面章节中会详细讲解滴

无参无返回值方法

图片 7

Ø 无参带返回值方法

图片 8

判断方法重载的依据:

4、 与方法的修饰符或返回值没有关系

Ø 带参无返回值方法

根据方法是否带参、是否带返回值,可将方法分为四类:

带参带返回值方法:

无返回值,有参方法:

图片 9

发表评论

电子邮件地址不会被公开。 必填项已用*标注