Java的方法的重载
开发工具与关键技术:工具:myeclipse 技术:overload ,static
作者:吴东梅
撰写时间:2019-05-02
方法用来实现类的行为。在Java语言中,每条指令执行,都是在某个特定方法的上下文中完成的。方法定义在类中,它和类的成员属性(数据成员),一起构建一个完整的类。构成方法有四大要素:返回值类型、方法名称、参数、方法体。修饰符(public protected private)三选一、static、final、synchronize、native 也可以不写。
方法的使用:如下图所示:
变量和方法前不加任何访问的修饰符,属于默认访问控制模式。在这种模式下的方法和属性,在同一个包(package)内是可以访问的。
1、 方法的重载 overload
重载是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。
每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。
重载的规则:
* 被重载的方法必须形参列表不一样(参数个数或类型不一样);
* 被重载的方法可以改变返回类型;
* 被重载的方法可以改变访问修饰符;
* 被重载的方法可以声明新的或更广的检查异常;
* 方法能够在同一个类中或者在一个子类中被重载。
* 返回值类型不能作为重载函数的区分标准。
Java方法的重载,是通过方法的参数列表的不同来加以区分实现的。如下图一,虽然方法名相同,都是定义为say,但是对于图一里面的三个方法,由于它们的方法签名不同(方法签名包括函数名及参数列表),在本质上,对于编译器而言,它们是完全不同的方法,所以可被编译器无二义性的加以区分,如图二所示。
图一:
图二:
2、 构造方法
构造方法与普通方法的差别在于,它是专用于在构造对象时初始对象成员的,其名称和其所属类名相同。在Java程序里,构造方法所完成的主要工作,就是对新创建对象的数据成员赋初始值。修饰符可以是public(公共的) private(私有的) protected(受保护的),也可以不写。
注意:
1)如果类中没有手动添加构造器,编译器会默认添加一个无参构造器。
2)如果定义了构造器,系统默认的构造器就会被覆盖 /如果手动添加了构造器(无论什么形式),默认构造器都会消失。
3)构造器也叫构造方法或者构造函数,构造器与类名相同,没有返回值,连void都不能写;
4)名称与类名相同,没有返回值,不能写void;
5)构造器可以重载。
6)构造方法不能被static和final修饰。
7)构造方法不能被继承,子类使用父类的构造方法需要使用super关键字。
Java中构造方法的使用,如下图所示:
在类中声明的构造方法,会在实例化对象时自动调用且只被调用一次。
3、 构造方法的重载
在Java里,普通方法是可以重载的,而构造方法在本质上也是方法的一种特例而已,因此它也可以重载。构造方法的名称是固定的,它们必须和类名保持一致,那么构造方法的重载,自然要体现参数列表的不同。也就是说,多个重载的构造方法彼此之间,只要构造方法满足的参数个数,参数类型和参数顺序至少有一项是不同的,便可定义多个名称相同的构造方法。
如下图所示:
4、 构造方法的私有化
如果声明的构造方法为private类型,则此构造方法只能在本类内被调用。我们都知道,实例化对象需要调用构造方法,但如果将构造方法使用private藏起来,则外部肯定无法直接调用,那么实例化该类对象就只能有一种途径——在该类内部用new关键字创建该类的实例。通过这个方式,我们就可以确保一个类只能创建一个实例化对象。
如下图所示:
5、 static 方法
可以用static声明一个静态属性变量,其实,也可以用来声明方法,用它声明的方法有时也被称为“类方法”。使用static定义的方法可以由类名称直接调用。如下图所示:
静态方法的声明:
在使用static类型声明的方法时,需要注意的是:如果在类中声明了一个static类型的属性,则此属性既可以在非static类型的方法中使用,也可以在static类型的方法中使用。但若要用static类型的方法调用非static类型的属性,就会出现错误。
成员变量和静态变量的区别:
1、两个变量的生命周期不同。
成员变量随着对象的创建而存在,随着对象的被回收而释放。
静态变量随着类的加载而存在,随着类的消失而消失。(虚拟机停止,类才会消失)
2、调用方式不同。
成员变量只能被对象调用。
静态变量可以被对象调用,还可以被类名调用。
3、别名不同。
成员变量也称为实例变量。
静态变量也称为类变量。
4、数据的存储位置不同。
成员变量数据存储在堆内存的对象中,所以也叫对象的特有数据。
静态变量数据存储在方法区(共享数据区)的静态区,所以也叫对象的共享数据。