java中面向对象的特征-封装(构造方法,方法签名,形参和实参)

面向对象的特征

一、封装

代码示例:

package com.oop;

//javaBean(定义类的规范方法)
public class Test1 {
    private int age=10;
    private String name="小猫";

    //访问器
    public int getAge() {
        return age;
    }

    //修改器
    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

1.1、方法

(1)要有访问修饰符 public private protected 不写

(2)普通方法要有返回值,如果没有返回值,需要在定义函数使用void

(3)需要方法名,在同一个类中方法名的签名不能重复(方法签名:方法名+参数列表)

(4)需要有参数列表,但是参数列表可以为空

(5)可以使用一些关键字修饰方法:static final 等,不同关键字修饰的方法意义不一样

1.2、构造方法(又叫构造器)

  1. 构造方法要与类名相同
  2. 构造方法不需要返回值,也不需要加void
  3. 类中默认存在无参的构造方法
  4. 一个类中可以有多个构造方法,构造方法也可以重载
  5. 显示的定义了构造方法,就会覆盖掉默认无参的构造方法,如果想要同时使用无参构造方法,需要显示的定义出来
  6. 构造方法(构造器)是用于初始化对象,是对象在创建时被调用
  7. 如果方法有放回值,即使方法名跟类名相同,该方法也不是构造方法
  • 作用:是用于初始化对象,是对象创建时被调用的

  • 方法签名:方法名+参数列表 (重要)

  • 注意:这种情况就是两种方法 对
    在这里插入图片描述

1.2.1、方法签名不同
  1. 参数数量不同
  2. 参数类型不同
  3. 参数和类型不同
  4. 如果都是一个类型和参数列表的顺序无关
  5. 当参数类型和数量相同时,和参数列表的顺序有关,如上图。
1.2.2、构造方法的特点

优点:优化方法名,使用户在使用方法时不需要过度的注意参数的类型

package com.oop;

//javaBean(定义类的规范方法)
public class Test1 {
    private int age=10;
    private String name="小猫";

    public void sleep(int a,String b){
        System.out.println("无参构造方法");
    }
    public void sleep(String a,int b){
        System.out.println("有参构造:"+name);
    }

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

    public static void main(String[] args) {
        Test1 t1=new Test1();
        
		//可以传输多种类型的数据,会自动的找到对应的方法
        System.out.println(t1.add(3,4));
        System.out.println( t1.add(3.4,5.8));
    }
}

1.3、方法参数(形参和实参)

1.3.1、形参和实参

形参:方法调用时产生,方法调用结束时及时销毁(临时变量)

实参:方法调用前就已经存在,方法调用完成之后同时存在(全局变量)

在这里插入图片描述

1.3.2、参数传递方式(值传递和引用传递)

java只有值传递:但是要注意传递对象时,对象里面的值的地址为真实地址

(1)值传递:在方法调用时,实参通过把它的内容副本传入到方法内部,此时形参接受的内容是实参的副本,因此在方法内实参的任何操作仅仅是对实参的副本操作,不影响原始值的内容。

(2)引用传递:“引用”也就是传递的是指向真实内容的地址值(其实也就是栈中的地址)------>相当于把地址复制了一份传递给了调用的方法。

​ 此时形参和实参指向的是同一块内存,值将会发生变化
在这里插入图片描述
**注意:**引用传递中对于传递的数据为对象时:
在这里插入图片描述
在这里插入图片描述

此时:值传递时把对象p复制了一个副本,而对象里边的name的堆中的地址就是真实的地址,所以调用方法时,改变p对象的name值时,name的值会发生变化,最终在main方法中访问对象p中的name最终发生了变化。

​ 当方法中的person=null时,person的地址连接断开,但是main方法中的p对象并没有断,所以main方法中的p对象还是有值,可以访问到。

 public static void change(Student s1,Student s2){
        Student temp=new Student();
        temp=s1;
        s1=s2;
        s2=temp;
    }

    public static void main(String[] args) {
        Student s1=new Student("张三",18);
        Student s2=new Student("李四",20);
        change(s1,s2);
        System.out.println(s1.toString());
        System.out.println(s2.toString());
    }
//输出
Student{name='张三', age=18}
Student{name='李四', age=20}

**结论:**最终只是交换了副本s1和副本s2的地址,对于实参s1和s2的真实地址没有发生变化,没有改变

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值