[java/初学者]方法、构造方法的重载及this关键字

建议新人收藏使用!

 前言

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相互调用;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

渡过晚枫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值