如何定义一个函数
1、函数是一个独立的功能,首先明确该功能的运算结果是什么,即明确函数的返回值类型。
2、明确定义该功能的过程中是否需要未知的内容参与运算,即明确函数的参数列表(参数的类型和参数的个数)。
函数的重载
定义:函数名相同,参数列表不同。
参数列表不同,即参数类型不同、参数个数不同。重载和返回值类型没有关系。
什么时候用重载
当定义的功能相同,但参与运算的未知内容不同。
那么,这时就定义一个函数名称以表示该功能,方便阅读,而通过参数列表的不同来区分多个同名函数。
构造函数
特点:
1、函数名与类名相同
2、不用定义返回值类型
3、不可以写return语句
覆盖:
1,子类覆盖父类,必须保证子类权限大于等于父类权限,才可以覆盖,否则编译失败。
2,静态只能覆盖静态。
构造代码块
作用:给对象进行初始化。
对象一建立就运行,而且优先于构造函数执行。
和构造函数的区别:
构造代码块是给所有对象进行统一初始化,
而构造函数是给对应的对象初始化。
构造代码快中定义的是不同对象共性的初始化内容。
格式:
{
System.out.println("hello");
}
静态代码块
格式:
static
{
执行语句
}
特点:随着类的加载而执行,只执行一次。
作用:用于给类初始化
对象初始化过程
Person p = new Person("zhangsan",20);
该句话都做了什么事情?
1,因为new用到了Person.class.所以会先找到Person.class文件并加载到内存中。
2,执行该类中的static代码块,如果有的话,给Person.class类进行初始化。
3,在堆内存中开辟空间,分配内存地址。
4,在堆内存中建立对象的特有属性。并进行默认初始化。
5,对属性进行显示初始化。
6,对对象进行构造代码块初始化。
7,对对象进行对应的构造函数初始化。
8,将内存地址付给栈内存中的p变量。