一、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