建议新人收藏使用!
前言
System.out.print("嗨嗨,这里是枫子哥");
今年将讲述的方法和构造方法在某种意义上,其实可以类比为C语言种的各类函数,我刚学的时候就是这么摸索的,而重载就可以认为是函数的反复调用。
那么话不多说,马上开启本期的内容。
1.方法
方法的定义,与类一样,方法也分为方法声明和方法体两个组成部分。
其一般格式为下:
[修饰符] 返回值类型 方法名(参数列表)
{
方法体;
}
(1)方法声明:
第一行的部分就是方法声明,包括上述的四个部分。
其中方法的修饰符较多,功能也繁多,有对访问权限进行限定的,
也有静态修饰符static以及最终修饰符final等。
方法的返回值类型可以是任意的java数据类型,有返回值的方法通过return语句返回值。
当一个方法不需要返回值的时候,返回类型必须为void。
方法名必须是合法的java标识符,并遵循java命名规则。方法的参数使用逗号隔开的一些变量声明,方法参数可以是任意的java数据类型:
void orintStar(int n) //声明方法printStar,没有返回值,有一个int型的参数
double getArea() //声明方法getArea,返回值是double类型,无参
(2)方法体:
方法体中的语句是用来实现方法功能的,方法头声明了方法的调用格式、方法体实现了方法功能后,就可以程序中多次调用方法用于实现代码的复用了。
以下代码中就定义了一个公有静态方法printStar(int m,int n),实现了m行n列的星号输出,
而在主方法中3此调用该方法,重复打印了三次图形。
public class demo2
{
public static void main(String[]args)
{
printStart(3,5);
printStart(2,8);
printStart(4,4);
}
public static void printStart(int m,int n)
{
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
System.out.print('*');
System.out.println();
}
}
}
2.方法的重载
java程序允许在一个程序中定义多个名称相同,但参数类型或参数的个数有差异的方法,这便被称为方法的重载,即重复载入。
通过所传入的不同参数,我们可以确定调用了哪一个重载方法。
public class demo2
{
public static void main(String[]args)
{
printStart(3);
printStart(2,8);
printStart(4,4,'$');
}
public static void printStart(int m)
{
for(int i=1;i<=m;i++)
{
for(int j=1;j<=m;j++)
System.out.print('*');
System.out.println();
}
}
public static void printStart(int m,int n)
{
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
System.out.print('*');
System.out.println();
}
}
public static void printStart(int m,int n,char ch)
{
for(int i=1;i<=m;i++)
{
for(int j=1;j<=n;j++)
System.out.print(ch);
System.out.println();
}
}
}
但需要注意的是,方法的重载与返回值无关,它只需要两个条件:
(1)方法名相同
(2)参数个数或者参数类型不同
3.构造方法
在实例化一个对象后,如果要为其中的属性赋值,课通过以下两种构造方法来实现:
(1):直接访问对象的属性
(2):调用setXxx方法
构造方法是一个与类同名,且没有返回值也不能加void声明的方法。
虽然不能用return返回一个值,但是可以单独使用return语句来作为方法的结束。
构造方法通常完成对类成员的初始化操作,如以下Person类的构造:
class Person
{
//成员变量
private String name;
private int age;
//构造方法
Person(String n,int a)
{
name=n;
age=a;
}
}
作为类的一个特殊成员,构造方法会在实例化对象时被调用,用在new后。
如上述的Person类在添加了构造方法后,就可以在实例化对象时使用
Person P=new Person("张三",14);
使得对象p的属性得以初始化了。
关于构造方法,需要注意以下问题:
如果在类中没有定义任何构造方法,则编译系统会自动为类添加一个无参的默认构造方法,默认构造方法无参,方法体为空;
而如果在类中定义了构造方法,那么默认构造方法就不会被添加了。
如上述的Person类添加了构造方法后,下面的语句将会出错,原因是无参构造方法不存在。
Person p1=new Person();
所以我们可以得出一个点:
在java程序中,如果为类定义了有参的构造方法,最好同时也添加一个无参的构造方法。
4.构造方法的重载
与普通方法一样,构造方法同样可以重载。
所谓的构造方法重载,就是指在一个类中定义多个参数不同的构造方法。
在创建对象时,通过调用不同的构造方法以不同的方法实现对象的初始化.
class Person1
{
//成员变量--私有化
private String name="Tom";
private int age;
//构造方法重载
public Person1()
{
name="无名氏";
age=21;
}
public Person1(String n,int a)
{
name=n;
age=a;
}
public void introduce()
{
System.out.println("大家好,我叫"+name+",今年"+age+"岁了。");
}
}
public class Ex3_3
{
public static void main(String[]args)
{
Person1 p1=new Person1();
Person1 p2=new Person1("Jerry",18);
p1.introduce();
p2.introduce();
}
}
在程序中,为Person类定义了无参构造方法和有两个参数的构造方法,分别将成员变量初始化为固定值和传入的参数值:
name="无名氏";
age=21;
在主方法中创建对象时,分别调用两个构造方法实现对象的初始化。
关于构造方法,需要注意一个问题:
如果使用private修饰符将构造方法私有化,则在类外部不可以使用new的方式实例化对象。
因此,为了方便实例化对象,构造方法通常会使用private来修饰。
5.this关键字
关键字this表示当前对象。
当从类的成员方法中引用本类的其他成员时,
在默认情况下,引用的都是当前对象的成员(谁调用了此方法,谁就是当前的对象"this"),即相当于"this.成员"。
在java中,如果这个成员的名字不予别的变量或方法同名,this完全可以省略;
但如果有同名,则必须写成带有this的形式.
this关键字在程序中有以下3种常见的用法:
(1)this成员变量
(2)this成员方法
(3)this( )
class Person
{
//成员变量--私有化
private String name="Tom";
private int age;
//构造方法1
public Person()
{
this("无名氏",1);
}
//构造方法2
public Person(String name,int age)
{
this.name=name;//成员变量与局部变量同名,被隐蔽,通过"this.成员变量"调用
this.age=age;
}
public void introduce()
{
System.out.println("大家好,我叫"+name+"今年"+age+"岁了!");
this.ff();
}
public void ff()
{
System.out.println("ff()方法被调用");
}
}
public class demo8
{
public static void main(String[]args)
{
Person p1=new Person();
p1.introduce();
}
}
在上述程序中,第二个构造方法Person(String name,int age)的形参(局部变量)与类的成员变量同名,在方法内部成员变量被隐蔽。此时 ,方法中使用name代表局部变量name,而this.name则代表成员变量name,所以,为成员变量赋值的语句必须写成this.name=name;的形式。
程序中成员方法前的this是可以省略的,如上面程序introduce()方法种对方法ff()的调用语句this.ff完全可以写成ff(),效果是一样的。
this()表示本类的构造方法。构造方法是在实例化对象时被java虚拟机自动调用的,在程序中不能像调用其他方法一样通过名字去调用,但可以在一个构造方法中使用this()的形式来调用。
如上述程序在无参构造方法Person()种用this("无名氏",1)调用了本类的有参构造方法完成属性初始化。关于本类构造方法的调用,需要注意一下两点:
(1):使用this()调用构造方法的语句必须是构造方法种的第一个语句,且只能出现一次。;
(2):不能再一个类的两个构造方法种使用this相互调用;