java基础知识之参数传递以及构造方法

对于java中的方法参数传递,无论是原生数据类型还是引用数据类型,统一是传值(pass by value)。
什么类型的引用就能指向什么类型的对象,比如People类型的引用就能指向People类型的对象,但不能指向Student类型的对象。
构造方法(Constructor):构造方法用于完成对象属性的初始化工作,构造方法的特点:
(1)构造方法的名字必须与类名一致(包括大小写)。
(2)构造方法没有返回值,void也没有。
(3)如果在定义一个类时候,没有声明构造方法,那么java编译器会自动为类添加一个没有参数且方法体为空的构造方法(默认的构造方法)
(4) 如果在定义一个类的时候,为类声明了构造方法,那么java编译器就不会再为类添加构造方法了。
(5)不能显示调用类的构造方法,构造方法通常是通过new关键字隐私调用。
new关键字在生成对象是完成的三件事:
(1)为对象开辟空间。
(2)调用类的构造方法。
(3)将生成的对象的地址返回。
默认构造方法:构造方法没有参数且方法体为空
使用new来生成对象时候,后面的小括号()表示构造方法的参数列表,如果构造方法不接受参数,那么小括号中的内容为空;如果构造方法接收参数,那么小括号中的实际参数就需要与构造方法中定义的形式参数保持一致(参数类型一致、参数数量一致、按照顺序逐一赋值 )。

public  class People{
 public People(int age,String name){
    System.out.println("hello!");
    System.out.println("我叫"+name+"我今年"+age+"岁!")
  }
 public static void main(String args[]){
    People p=new People(18,"张三")
 }
}

他的输出也是很简单的:
在这里插入图片描述这种调用就叫做隐式调用。
接下来我们再来看一段关于参数传递的代码

public class People {
    int age = 20;

    public int getAge(People people) {
        return people.age = 30;
    }
    public static void main(String[] args) {
        People people = new People();
        int a = people.age;
        System.out.println(a);
        people.getAge(people);
        int b = people.age;
        System.out.println(b);
    }
}

可能这段代码看起来比较绕,但是我们先来看一下答案,下面再来讲解:
在这里插入图片描述
首先我们先看main方法中,我们先new出来了一个空间在定义了一个整数型 a,将people的age赋值给了a,那么我们的a=20,我们接着往下面看people调用了方法getAge并传入一个参数people,那么我们的实际参数people将赋给getAge中的形式参数,那么我们继续运行该方法,该方法返回了people.age=30;此时此刻我们就需要画图来理解
在这里插入图片描述
首先我们的people引用指向的age=20,但是我们又有一个people引用将age=20更改为age=30,所以我们的b=30,a=20。
那么我们再在getAge方法中添加一段代码,我们的结果又会改变:

public class People {
    int age = 20;

    public int getAge(People people) {
        people=new People();
        return people.age = 30;
    }

    public static void main(String[] args) {
        People people = new People();
        int a = people.age;
        System.out.println(a);
        people.getAge(people);
        int b = people.age;
        System.out.println(b);
    }
}

这段代码的结果是:
在这里插入图片描述
我们仍然用一张图来表示
在这里插入图片描述
我们getAge中的方法的people引用重新开辟了一个空间将age=30储存在第二个空间中,而第一个空间中的age仍然等于20不变,所以我们的a与b的结果都是20.
有问题的,我们下方评论区见!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值