java学习的第五章(java对象的行为)

对象的行为

这里写图片描述

  • 方法调用栈
  • 调用方法
  • 方法的签名
  • 形式参数和实际参数
  • 按值调用
  • 方法重载
  • 构造器

方法调用栈

当一个方法被调用时,将导致控制流程跳转到被调用的方法。然后,控制流程执行方法中的语句。当然,被执行的方法可能会调用其它方法,导致控制流程跳转到其它方法。所有的方法调用都维护在一个称为调用栈的结构中。当前正在执行的方法位于调用栈的顶部。当前方法执行完成后,就从调用栈的顶部移除,控制流程返回栈中的前一个方法。当一个新方法被调用后,这个新的方法就放在调用栈的顶部。方法调用栈的特点是先进后出。

调用方法

调用方法后有3种情况:
1.返回一个值
2.不返回值
3.给出异常

方法的签名

方法的签名,即方法的组成,方法由以下部分组成:
1.访问修饰符(public、private、protected、default)表示访问权限
public 都可以访问
private私有,只能自己使用
protected受保护的,在本包中均可用
必要部分
2.可选修饰符(static、final、abstract、native以及synchronized)
可写可不写。
3.返回值
返回值若无返回,可用void表示
返回值有返回,根据实际情况,定义类型
4.方法名
方法名遵循标识符定义原则,如下:
硬性要求:
(1)由字母、数字、$、_组成
(2)数字不能开头
(3)不能使用JAVA关键字
潜规则:
(1)见名知意
(2)小驼峰命名规则(第一个单词首字母小写)
5.参数列表
参数列表可以多个,也可以0个,也可定为可变的。
参数由数据类型+参数名(数据类型可为基本数据类型和引用数据类型)
此处的参数只是形式上的参数,只是说明传入参数的类型。

例如:

public class Student{//Student类
 public String studentName;
 public String studentId;
 public double score;

public String getStudentName(Student student1){//获得studentName
return student1.studentName
    }
}

此处得到学生名字就是一个方法,它的访问修饰符是public,可选修饰符无,返回类型String,方法名getStudentName,参数列表Student类型的student1.

形参和实参

形参:形式参数
实参:实际参数
形参是方法在定义时,设置的参数列表,初始化为0或空
实参是方法调用时,具体传入的值。
方法调用时,实参和形参数据类型一致或者可以相互转换。实参传递给形参,并没清除而是复制。基本数据类型,是复制值;引用数据类型是复制地址。
 实际参数如果是基本类型,和String在被调用的方法内部针对形参坐任何改变,实际参数所对应的变量不会改变。如果为其他引用数据类型,在被调用的方法内部针对形参做了改变,实际参数也有可能会跟着改变(String例外)

按值调用

在java中无传值传址之分,基本数据类型是复制它的值,而引用数据类型它的值是地址。

方法重载

当一个类有两到多个同名但是有不同参数列表的方法时,就是方法重载。

特点:方法名一样。参数的个数可能不一样。参数的数据类型和顺序不一样。
方法和参数都一样,返回类型不一样, 不是重载。

public eatLunch(KnifeAnF knifeAndFork){//使用刀叉吃饭
System.out.println("使用"+knifeAndFork.name()+"吃饭");
}
public eatLunch(chopsticks chopsticks){//使用筷子吃饭
System.out.println("使用"+chopsticks.name()+"吃饭");
}
public eatLunch(){//没有餐具用手抓
System.out.println("用手吃饭");
}

构造器

构造器是一个特殊的方法,它在类创建一个实例时被调用执行。
构造器的作用是产生类的实例,使其成为一个有效的对象。
语法特点; 没有返回值,也不能返回void。 构造器的名称必须要与类名称相同。
每一个类都会隐式存在一个无参构造器
构造器可以不写,编译器会给我们生成公共的无参的构造器
构造器如果被我们程序员一旦显示的编写了,那么编译器将不会再给我们产生任何构造器
Blooean 属性的名字不能为is什么的名字,由于布尔型默认的访问器会加is。
访问器:get方法
修改器:修改器
构造器产生对象的步骤:
1、 如果其他程序使用new构造器()调用构造方法,那么构造器就回去内存中申请内存空间(对象那么大),产生对象
2、 去申请的内存空间中,为属性分配对应的存储空间
3、 对属性进行初始化
4、 执行在构造器中编写的代码

public class Person{
private String personName;
private boolean gender;
private int age;

public Person()//无参构造器,在未定义构造器时会默认加。一旦定义就不会加
private String personName;
private boolean gender;
private int age;
System.out.println(personName+"创建成功");
}
/*
   通过set、get方法得到属性
*/
    public String getPersonName() {
        return personName;
    }
    public void setPersonName(String personName) {
        this.personName = personName;
    }
    public boolean isGender() {
        return gender;
    }
    public void setGender(boolean gender) {
        this.gender = gender;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }


}


public class MainEnter{
public static void main(String[] args) {
Person person1=new person();//实例对象
/*1.在栈中产生一个person1变量,4个字节的空间
  2.在堆中产生一个person对象那么大的空间
  3.为person中的属性初始化(基本数据类型为0,引用数据类型为NULL)
  4.执行构造器中的代码
*/
}
}

有参构造:
1. 产生对象,还可以初始化成员变量的重载
2. 构造器也可以参与到方法
3. 在定义有参构造之前,需先定义无参构造
this()定义其他的无参构造器

猜你喜欢

转载自blog.csdn.net/qq_38527427/article/details/82255049