javaSE-构造方法Method、方法重载overload
一、java方法概述:
- 方法是一段普通的代码片段,并且这段代码可以完成某个特定的功能,而且可以被重复的调用/使用;
- java中的方法又叫做method,只要是可以独立出来的功能,我们都可以定义为单独的一个方法来完成,如果以后需要使用此功能时直接调用这个方法就行了;
- 不要把所有的代码都扔到main方法当中,这样会导致程序的“复用性”很差;
二、构造方法constructor:
- 表达式:public 构造方法名 (形式参数列表) { }
- 调用构造方法:使用new运算符来调用构造方法。语法格式:new 构造方法名(实际参数列表);
- 【构造方法/ 构造器】 1、“ 方法名” 与 “ 类名” 完全一致(包含大小写 )2、没有任何返回类型 3、没有void(写上void就是普通方法,不是构造方法);
- 缺省构造器:当一个类没有提供任何构造方法,系统会默认提供一个无参数构造方法,当显示定义构造方法后,系统则不再提供无参数构造方法,
- 建议手动的将无参数构造方法写上,因为不写无参数构造方法,这个默认的构造方法很有可能就不存在,无参数构造方法使用的频率较高;
三、方法重载overload:
- 方法重载定义以下条件需要同时满足:
- 条件1:在同一个类当中;
- 条件2:构造方法名相同
- 条件3:参数列表不同:参数的个数不同算不同;参数的类型不同算不同;参数的顺序不同算不同
- 方法重载:在同一个类中, 允许存在一个以上的同名方法, 只要它们的参数个数或者参数类型不同即可。
- 方法重载特点:与返回值类型无关, 只看方法名和参数列表在调用时, 虚拟机通过参数列表的不同来区分同名方法
- 构造方法是支持重载的;在一个类中构造方法可以有多个;并且所有的构造方法名字都是一样的
四、引用:
- 引用就是一个变量,该变量中存储的是java对象的内存地址
- Date time1 = new Date(2008);,实际上time1变量中存储的并不new出来的这个字符串,因为time1是一个引用,那time1中必然存储的是2008字符串对象的内存地址。
/**
*构造方法是支持重载机制的,具体调用哪个构造方法,那要看调用的时候传递的实际参数列表符合哪个构造方法了。
*构造方法虽然在返回值类型方面不写任何类型,但它执行结束之后实际上会返回该对象在堆内存当中的内存地址,
*这个时候可以定义变量接收对象的内存地址,这个变量就是“引用”;
*time1 就是一个:引用
*/
public class Date { int year; //年 int month; //月 int day; //日 //构造方法(无参数构造方法) public Date(){ System.out.println("Date类无参数构造方法执行"); } //构造方法(有参数构造方法) public Date(int year1){ System.out.println("带有参数year的构造方法"); } //构造方法(有参数构造方法) public Date(int year1 , int month1){ System.out.println("带有参数year,month的构造方法"); } //构造方法(有参数构造方法) public Date(int year1 , int month1 , int day1){ System.out.println("带有参数year,month,day的构造方法"); } }
public class DateTest { public static void main(String[] args) { System.out.println("main begin"); Date time1 = new Date(); System.out.println(time1); Date time2 = new Date(2008); System.out.println(time2); Date time3 = new Date(2008 , 8); System.out.println(time3); Date time4 = new Date(2008 , 8 , 8); System.out.println(time4); System.out.println("main over"); } } //输出结果: main begin Date类无参数构造方法执行 Date@234hd0ar 带有参数year的构造方法 Date@15df0hob 带有参数year,month的构造方法 Date@35hdbbg 带有参数year,month,day的构造方法 Date@6h0fs1ds main over
tiame1 就是:引用;
//我们需要在构造方法中手动的给属性赋值,这本来就是构造方法的主要的职责,要不然重载多次构造方法就没有意义了
public class Date { int year; //year属性 int month; //month 属性 int day; //day 属性 public Date(){ } public Date(int year1){ year = year1; //year、year1 都是局部变量和上面的year属性变量没有关系 ,遵循就近原则 } public Date(int year1 , int month1){ year = year1; month = month1; } public Date(int year1 , int month1 , int day1){ year = year1; month = month1; day = day1; } }
public class DateTest { public static void main(String[] args) { System.out.println("main begin"); Date time1 = new Date(); System.out.println(time1.year + "年" + time1.month + "月" + time1.day + "日"); Date time2 = new Date(2008); System.out.println(time2.year + "年" + time2.month + "月" + time2.day + "日"); Date time3 = new Date(2008 , 8); System.out.println(time3.year + "年" + time3.month + "月" + time3.day + "日"); Date time4 = new Date(2008 , 8 , 8); System.out.println(time4.year + "年" + time4.month + "月" + time4.day + "日"); System.out.println("main over"); } } //输出结果: // main begin // 0年0月0日 // 2008年0月0日 // 2008年8月0日 // 2008年8月8日 // main over