博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 面向对象之构造函数和 this 关键字
阅读量:6825 次
发布时间:2019-06-26

本文共 2464 字,大约阅读时间需要 8 分钟。

  1. 构造函数
  2. this 关键字

    1. 构造函数

class Person{    private String name;    private int age;    // 定义一个 Person 类的构造函数    Person() // 构造函数, 而且是空参数的.    {        System.out.println("person run");    }    // 如果有的孩子一出生就有名字    Person(String n)    {        name = n;    }    // 如果有的孩子一出生既有名字,又有年龄    Person(String n, int a)    {        name = n;        age = a;    }    public void speak()    {        System.out.println(name+":"+age);    }}class Demo{    public static void main(String[] args)    {        Person p = new Person(); // 构造函数: 构建创造对象时,调用的函数.给对象进行初始化        Person p1 = new Person("旺财");        Person p2 = new Person("小强",20);        p2.speak();    }}

特点:

  1. 函数名与类名相同
  2. 不用定义返回值类型
  3. 没有具体的返回值

作用: 可以给对象进行初始化.

备注:

  1. 创建对象都必须要通过构造函数初始化
  2. 一个类中如果没有定义过构造函数, 那么该类中会有一个默认的空参数构造函数.
    如果在类中定义了指定的构造函数, 那么类中的默认构造函数就没有了.

一般函数和构造函数的区别

  1. 构造函数: 对象创建时,就会调用与之对应的构造函数,对对象进行初始化
    一般函数: 对象创建后,需要该函数功能时才调用
  2. 构造函数: 对象创建时,会调用且只调用一次
    一般函数: 对象创建后,可以被调用多次
  3. 构造函数首字母大写,一般函数首字母小写

什么时候定义构造函数

在描述事物时,该事物一存在就具备的一些内容,这些内容都定义在构造函数中.

构造函数的内存图解

1222878-20170826142352621-1260419151.png

构造函数细节

  1. 构造函数与一般方法 set 不冲突, 构造函数只在对象初始化的时候调用, 一般方法 set,需要时调用.
  2. 如果定义过构造函数, 默认的空构造函数就不存在了.
  3. 构造函数有 return 语句.

2. this 关键字

特点:

this 代表对象, 就是所在函数所属对象的引用.简单说: 哪个对象调用了 this 所在的函数, this 就代表哪个对象.

this 的应用

  1. 当成员变量和局部变量重名时,可以用关键字 this 来区分
class Person{    private String name;    private int age;    Person(String name)    {        this.name = name;    }    public void speak()    {        System.out.println(this.name+":"+this.age); // 注意 this 关键字    }}class Demo{    public static void main(String[] args)    {        Person p = new Person("旺财");        p.speak();        Person p1 = new Person("小强");    }}

1222878-20170826142444449-1960867989.png

1222878-20170826144858808-387113741.png

  1. 构造函数与构造函数之间的访问
class Person{    private String name;    private int age;    Person(String name)    {        this.name = name;    }    Person(String name,int age)    {        // this.name = name;        this(name); // 调用 Person(String name) 构造函数, 只能定义在构造函数的第一行        this.age = age;    }    public void speak()    {        System.out.println(this.name+":"+this.age); // 注意 this 关键字    }}

1222878-20170826142525589-793716630.png

  1. 本类方法中调用本类对象
// 需求: 判断是否是同龄人class Person{    private String name;    private int age;    Person(String name)    {        this.name = name;    }    Person(String name)    {        // this.name = name;        this(name);        this.age = age;    }    // 判断是否是同龄人    public boolean compare(Person p)    {        return this.age == p.age;    }}class Demo{    Person p1 = new Person("aa",30);    Person p2 = new Person("xx",14);    p1.compare(p2);}

参考资料:

转载于:https://www.cnblogs.com/linkworld/p/7435267.html

你可能感兴趣的文章
图解排序算法之快速排序-双端探测法
查看>>
mysql
查看>>
11月15日云栖精选夜读:分布式服务框架Dubbo疯狂更新!阿里开源要搞大事情?...
查看>>
Druid数据库连接池就这么简单
查看>>
Python最假的库:Faker
查看>>
IDE 插件新版本发布,开发效率 “biu” 起来了
查看>>
阿里云安全肖力:安全基础建设是企业数字化转型的基石
查看>>
Redis 基础、高级特性与性能调优
查看>>
BZT52C15S资料
查看>>
Laravel Telescope入门教程(上)
查看>>
Linux配置ip 及网络问题排查
查看>>
AndroidStudio用Cmake方式编译NDK代码(cmake配置.a库)
查看>>
OSChina 周四乱弹 ——黑丝短裙java程序员同事
查看>>
设置iptables之后不能正常访问ftp解决方法
查看>>
移动端rem布局
查看>>
jsp与iframe跨域访问的一个方法
查看>>
ViewPager + Fragment 取消预加载
查看>>
BigDecimal 02 - 注意事项
查看>>
用js玩桌球游戏
查看>>
maven下运行jetty报错
查看>>