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. 构造函数首字母大写,一般函数首字母小写

什么时候定义构造函数

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

构造函数的内存图解

构造函数细节

  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("小强");
}
}



  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 关键字
}
}

  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);
}

参考资料:

Java 面向对象之构造函数和 this 关键字的更多相关文章

  1. java面向对象的构造函数

    当使用new来创建一个对象的时候,其实是调用了一个函数,这个函数的名称叫做构造函数 构造函数的特点: 1.构造函数的名称必须和类名完全一致,包括大小写. 2.构造函数不写返回值,不写返回值意味着连vo ...

  2. 4.JAVA基础复习——JAVA中的构造函数与this关键字

    构造函数:构建创造对象时调用的函数 特点: 1.函数名与类名相同. 2.不用定义返回值类型. 3.没有具体的返回值. public class Demo { private int age; priv ...

  3. Java面向对象之构造函数 入门实例

    一.基础概念 1.什么时候定义构造函数: 当对象创建时,需要对象必须具备的内容,通过构造函数完成. 2.一般函数和构造函数的区别: 定义上:构造函数只为对象的初始化,只执行一次.一般函数定义对象应该具 ...

  4. Java面向对象_多态性、instanceof关键字

    一.多态 分类:方法的重载与重写:对象的多态性 对象的多态性:向上转型:将子类实例转为父类实例   格式:父类 父类对象=子类实例;是自动转换 向下转型:将父类实例转为子类实例   格式:子类 子类对 ...

  5. Java 面向对象(三)static 关键字

    一.static 1.概述 static 的意思的静态的,也是一种修饰符. 关于 static 关键字的使用,它可以用来修饰的成员变量和成员方法,被修饰的成员是属于类的,而不是单单属于某个对象的. 用 ...

  6. java 面向对象(十一):关键字:package/import

    1.1 使用说明: * 1.为了更好的实现项目中类的管理,提供包的概念 * 2.使用package声明类或接口所属的包,声明在源文件的首行 * 3.包,属于标识符,遵循标识符的命名规则.规范(xxxy ...

  7. java 面向对象(十):关键字:this

    1.可以调用的结构:属性.方法:构造器2.this调用属性.方法:this理解为:当前对象 或 当前正在创建的对象 2.1 在类的方法中,我们可以使用"this.属性"或" ...

  8. 谈谈java中的构造函数

    from 本篇博文主要是为新手.对java语言感兴趣的人和那些没有系统学习过java基础知识的人进行一个总结,在文章中对构造函数进行了较为详细的说明和讨论,也包含了我个人对于java面向对象中构造函数 ...

  9. Java 面向对象异常处理,finally,覆盖时异常特点,package,import,包之间的访问(10)

    Java 面向对象异常处理, finally:final 关键字的用法参考http://www.cnblogs.com/itcqx/p/5541659.html 覆盖时异常特点,package,imp ...

随机推荐

  1. 怎样优化UITableView的性能

    在iOS App中,UITableView应该是使用率最高的.同一时候也是最为复杂的视图. 差点儿全部自带的应用中都能看到它的身影,可见它的重要性. 在使用UITableView时,会常常遇到性能上的 ...

  2. Atitit.vod 视频播放系统 影吧系统的架构图 架构体系 解决方案

    Atitit.vod 视频播放系统 影吧系统的架构图 架构体系 解决方案 1. 运行平台:跨平台 android ios pc mobile 1.1. -------------前端 界面------ ...

  3. atitit.php中的dwr 设计模式

    atitit.php中的dwr 设计模式 1. dwr的优点相对于ajax来说.. 1 2. DWR工作原理 1 3. php的dwr实现 1 4. 参考 3 1. dwr的优点相对于ajax来说.. ...

  4. MVC & Entity Framework(1)- 开发环境

    一直都有接触asp.net mvc,希望自己借此次机会把Blog搭起来的同时能够更深入地学习相关知识. ①新建 打开VS2012,新建ASP.Net MVC 4项目,接着选择“空”模板(因为不想用自带 ...

  5. 如何让linux加载当前目录的动态库

    debian从7.0开始支持multiarch,64位库的路径改到/usr/lib/x86_64-linux-gnu了,mint.ubuntu这些衍生版有没有跟着改我就不清楚了. deepin lin ...

  6. linux学习笔记7---命令cp

    cp命令用来复制文件或者目录,是Linux系统中最常用的命令之一. cp命令用来将一个或多个源文件或者目录复制到指定的目的文件或目录.它可以将单个源文件复制成一个指定文件名的具体的文件或一个已经存在的 ...

  7. java模拟http请求上传文件,基于Apache的httpclient

    1.依赖 模拟http端的请求需要依赖Apache的httpclient,需要第三方JSON支持,项目中添加 <dependency> <groupId>org.apache& ...

  8. .net mvc 下实现移动架构display mode

    最近要求做支持移动端网站 我们的设计已经把移动端UI给我了,但是我还没想好改用哪种方式支持移动端 1.常见的就是2级域名m.baidu.com,框架根据访问者设备,来选择是否跳转到移动站 2.同域名的 ...

  9. linux运维/自动化开发__目录

    服务器软件安装 nginx apache php mysql oracle tomcat memcached mongodb sqlserver 常用pc端工具安装使用 Xshell         ...

  10. 修改原型给数组对象添加forEach

    Array.prototype.forEach = function (callback, context) { for (var i = 0; i < this.length; i++) { ...