`
guiven
  • 浏览: 28904 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

构造器和方法差异

阅读更多
"this"的用法

构造器和方法使用关键字this有很大的区别。方法引用this指向正在执行方法的类的实例。静态方法不能使用this关键字,因为静态方法不属于类的实例,所以this也就没有什么东西去指向。构造器的this指向同一个类中,不同参数列表的另外一个构造器,我们看看下面的代码:

public class Platypus {

String name;

Platypus(String input) {

name = input;

}

Platypus() {

this("John/Mary Doe");

}

public static void main(String args[]) {

Platypus p1 = new Platypus("digger");

Platypus p2 = new Platypus();

}

}


在上面的代码中,有2个不同参数列表的构造器。第一个构造器,给类的成员name赋值,第二个构造器,调用第一个构造器,给成员变量name一个初始值 "John/Mary Doe".

在构造器中,如果要使用关键字this,那么,必须放在第一行,如果不这样,将导致一个编译错误。

 

"super"的用法

构造器和方法,都用关键字super指向超类,但是用的方法不一样。方法用这个关键字去执行被重载的超类中的方法。看下面的例子:

class Mammal {

void getBirthInfo() {

System.out.println("born alive.");

}

}

class Platypus extends Mammal {

void getBirthInfo() {

System.out.println("hatch from eggs");

System.out.print("a mammal normally is ");

super.getBirthInfo();

}

}


在上面的例子中,使用super.getBirthInfo()去调用超类Mammal中被重载的方法。

构造器使用super去调用超类中的构造器。而且这行代码必须放在第一行,否则编译将出错。看下面的例子:

public class SuperClassDemo {

SuperClassDemo() {}

}

class Child extends SuperClassDemo {

Child() {

super();

}

}


在上面这个没有什么实际意义的例子中,构造器 Child()包含了 super,它的作用就是将超类中的构造器SuperClassDemo实例化,并加到 Child类中。

编译器自动加入代码

编译器自动加入代码到构造器,对于这个,java程序员新手可能比较混淆。当我们写一个没有构造器的类,编译的时候,编译器会自动加上一个不带参数的构造器,例如:public class Example {}

编译后将如下代码:

public class Example {

Example() {}

}


在构造器的第一行,没有使用super,那么编译器也会自动加上,例如:

public class TestConstructors {

TestConstructors() {}

}


编译器会加上代码,如下:

public class TestConstructors {

TestConstructors() {

super;

}

}
分享到:
评论

相关推荐

    理解构造器--构造器和方法的区别

    在Java编程语言中,构造器和方法是两个核心概念,它们在类的定义和对象的创建中起着至关重要的作用。然而,它们之间存在着显著的差异,这些差异是理解面向对象编程的关键。 首先,构造器的主要功能是初始化一个新...

    构造器和方法的区别

    构造器和方法在修饰符、返回值和命名方面存在显著差异。首先,两者都可以使用访问修饰符`public`、`protected`、`private`或默认(即包级访问权限)。然而,构造器不能使用`abstract`、`final`、`native`、`static`...

    C#程序设计-3期(KC008) KC008110100021-C# 构造器和C++ 构造器是否相同?.docx

    让我们深入探讨一下C#和C++构造器之间的差异。 首先,C#的构造器与C++的构造器在语法上基本一致,都是用来在创建对象时执行初始化操作。它们允许程序员在对象实例化时设置初始状态。例如,你可以在构造器中设置成员...

    Gui构造器Jigloo的基本使用

    总结来说,Jigloo是一个强大的GUI构造器,对于使用Java进行桌面应用程序开发的开发者而言,它是一个不可或缺的辅助工具。它可以显著加快界面设计的进度,同时保持代码的整洁和可维护性。无论是对于初学者还是有经验...

    垂直柱形图构造器 - MetaTrader 5程序库.zip

    在MT5环境中,使用者可以通过MQL5语言编写自定义指标(Expert Advisors,简称EA)和脚本,结合"垂直柱形图构造器"的功能,实现更复杂的市场分析。例如,你可以创建一个指标,自动计算并显示某个时间段内的平均价格...

    c# 值类型实例构造器

    这是值类型与引用类型的一个重要差异,因为对于引用类型,即使没有定义任何构造器,编译器也会提供一个默认的无参数构造器,用于初始化对象引用为`null`。 当涉及到值类型的构造器时,有几个需要注意的规则: 1. *...

    一类数据结构的模糊规则构造方法.pdf

    根据提供的文件内容,我们可以生成一系列关于数据结构和模糊规则构造方法的知识点: 1. 模糊逻辑控制器:在模糊控制系统中,控制器作为系统核心,其核心则为模糊规则。这些规则通常决定了系统如何响应不同的输入。 ...

    类和对象(2)

    在对象构造方面,Java允许方法和构造器的重载。方法重载是指在同一个类中有多个同名方法,但它们具有不同的参数列表。构造器重载使得一个类可以有多个构造器,这些构造器可以接受不同数量或类型的参数。需要注意的是...

    基于混淆矩阵和Fisher准则构造层次化分类器.pdf

    通过对上述知识点的探讨,本文不仅为构建层次化分类器提供了新的视角和方法,而且对于理解分类器的性能评估和改进提供了重要的参考。同时,该研究也推动了机器学习领域内模式识别技术的发展,特别是在自动化和优化...

    行业分类-设备装置-X线装置、方法、构造物的制造方法、程序及记录有程序的记录媒体.zip

    总之,X线装置、方法、构造物的制造以及相关的程序和记录媒体构成了一个复杂的系统,它不仅依赖于先进的物理学原理,还涉及到精密的工程设计、软件开发和信息化管理。理解和掌握这些知识点对于在医疗设备行业工作的...

    Java培训教材Java编程技术复习纲要第三章类的方法共4

    【标题】"Java培训教材Java编程技术复习纲要第三章类的方法共4"涉及的核心知识点主要集中在Java编程语言中的类和方法。在Java中,类是面向对象编程的基础,它代表了现实世界中的一个实体或者概念,而方法则是类中的...

    javascript asp教程第三课 new String() 构造器

    在JavaScript与ASP(Active Server Pages)结合使用的环境中,理解和掌握`new String()`构造器是非常重要的。这一构造器允许开发者将非JavaScript类型的数据转换为JavaScript字符串类型,这对于处理来自用户的输入或...

    excitedscala_3

    反之亦然,Java代码也能调用Scala定义的类和方法。这种互操作性意味着开发者可以轻松地将现有的Java项目迁移到Scala,或者在同一个项目中同时使用Java和Scala代码。 - **事实2**:Scala编译后的字节码性能与Java相当...

    语义差异修复_Java_C++_下载.zip

    理解编译器和链接器的差异有助于解决兼容性问题。 8. **静态与动态绑定**:Java的虚方法是动态绑定的,C++支持静态和动态绑定。修复涉及方法调用的问题时,要考虑绑定机制。 9. **平台兼容性**:Java的“一次编写...

    汽车构造图解说明PDF

    现代汽车发动机主要分为汽油发动机和柴油发动机两大类,它们在结构上有一定的差异。 - **汽油发动机**:一般采用点火系统点燃混合气,常见的有直列四缸、V型六缸等类型。 - **柴油发动机**:则依靠压缩空气产生的...

    lucene5.X与lucene3.60的版本差异

    这使得构造建议器和分析器更加灵活,同时提高了测试的针对性。 2. Lucene-4535:`OpenUtil.filterIterator`被标记为内部API,意味着开发者不应直接依赖此API,而是应该使用推荐的公开接口。 3. Lucene-4924:`...

    javathis和super用法 this和 super 关键字的区别

    在Java方法或构造器中,`this`可以用来引用当前对象的属性和方法。它为访问当前对象的方法和属性提供了一个简洁的方式,并且在解决变量名冲突时特别有用。 ##### 2.2 `this`关键字的应用场景 - **访问当前类的成员*...

Global site tag (gtag.js) - Google Analytics