- 浏览: 36435 次
文章分类
- 全部博客 (35)
- java (36)
- Toast to C (1)
- Java二进制指令代码解析 (1)
- CHAR (1)
- varchar以及varchar2的区别 (1)
- Java学习笔记(二)----JBoss发展现状 (1)
- Enum的策略模式 (1)
- j2EE开发群 欢迎加入该群一起学习 群号:172429747 (1)
- clipRect 介绍 (1)
- 认识Java程序之对象间消息传递 (1)
- Android的Location功能代码 (1)
- Android的Activity之间的通信 (1)
- 关于提高自己JAVA水平的十大技术讨论(转) (1)
- 推荐三本书 (1)
- C#打印DataGrid中的数据 (1)
- 注意新技术的风险是否会超过获得成功的几率 (1)
- MapXtreme2004代码 简单专题图的显示 (1)
- 在网页中插入RM视频文件的历程 (1)
- 《使用 Microsoft .NET 的企业解决方案模式》读书笔记2 (1)
- xml格式字符串与java对象互转 (1)
- 手机wifi传文件的一简单代码 (1)
- HOWTO: Disable HTTP Methods in Apache (1)
- SQL 笔试题(摘) (1)
- java的ProcessBuilder阻塞问题 (1)
- 现在在郑州做java开发想去深圳 (1)
- Could not find a JavaScript runtime (1)
- 构造方法,重载,多个,无参,参数,this,super (1)
- Servlet多线程 (1)
- 如何使SOLR系统自动AUTO COMMIT (1)
- Linux下Mysql表名区分大小写 (1)
- 好玩的游戏合集~~ (1)
- HashMap源码分析 (1)
- 以一个枢纽值二分一个数组 (1)
最新评论
-
liuyes:
写的有点乱呀
HashMap源码分析 -
chenglinjava:
来北京吧!!!
现在在郑州做java开发想去深圳
构造方法名([参数列表]){
? [this([参数列表]);] |[super([参数列表]);
? 语句序列
}
<p style="text-indent: 21.25pt;">其中,this是调用其他的构造方法,super是调用父类的构造方法。它们都必须放在其他语句的前面。
??●???? 构造方法的名字必须和类的名字完全相同。
??●???? 除了访问权修饰符之外,不能有其他任何修饰符,也就不能有返回值。
??●???? 尽管没有返回值,但并不能用“void”修饰。
??●???? 构造方法不能用static和final来修饰。一般也不用private修饰,这会导致无法在外部创建对象。
??●???? 构造方法不能由对象显式地调用。一般通过new关键字来调用,或者用this、super来调用。
??●???? 构造方法的参数列表可以为空,也可以有参数。根据参数的有无,可以将构造方法分为无参数的构造方法和带参数的构造方法。
??●???? 用户定义的类可以拥有多个构造方法,但要求参数列表不同。
??●???? 如果用户定义的类未提供任何构造方法时,系统会自动为其提供一个无参数的构造方法。
<h3>3.6.1? 无参数构造方法的定义和使用</h3>
<p style="text-indent: 21.25pt;">定义一个无参数的构造方法,从语法上来讲很简单,请看下面的示例。
<p style="text-indent: 21.25pt;">//-----------文件名constructNoPara.java,程序编号3.31-----------------
public class constructNoPara{
? private int? x = 0;
? //定义一个无参数的构造方法,它必须和类同名
? public constructNoPara(){
??? System.out.println("这是无参数的构造方法");
??? x = 100;???????? //为成员变量赋值
? }
? //获取成员变量x的值
? public int getX(){
??? return x;
? }
? public static void main(String args[]){
??? constructNoPara oa = new constructNoPara();?? //隐式调用无参数的构造方法
??? System.out.println("x = " + oa.getX() );?????? //输出成员变量x的值
? }
}
<p style="text-indent: 21.25pt;">注意到成员变量x,它在定义的时候已经赋了初值。在构造方法中,先是输出一条信息,然后再次为x赋值。由于构造方法的执行在定义成员变量之后,它会覆盖掉原来x的初值,所以x的值为100。程序的输出结果如下:
这是无参数的构造方法
x = 100
public class constructNoPara{
? private int? x = 0;
? //试图定义一个无参数的构造方法
? public void constructNoPara(){ //这里加了一个void
??? System.out.println("这是无参数的构造方法");
??? x = 100;???????????????????????? //为成员变量赋值
? }
? //获取成员变量x的值
? public int getX(){
??? return x;
? }
? public static void main(String args[]){
??? constructNoPara oa = new constructNoPara();?? //隐式调用无参数的构造方法
??? System.out.println("x = " + oa.getX() );?????? //输出成员变量x的值
? }
}
<p style="text-indent: 21.25pt;">这个程序仍然可以通过编译,但运行结果可能会出人意料。它的输出结果如下:
x = 0
<p style="text-indent: 21.25pt;">语句“constructNoPara oa = new constructNoPara();”并不是调用程序员自己定义的“构造方法”,而是调用了系统提供的默认的无参数的构造方法,这个方法其实什么事情也没做,自然也就不会更改x的值。
%说明:C++程序员不会犯此类错误。因为在C++中,如果在构造方法前面加上void,编译器将报错。
%注意:构造方法前的访问权限修饰符同样有4种,但通常不会是private类型。因为用它来修饰的话,无法在外部使用该构造方法。
<h3>3.6.2? 带参数构造方法的定义和使用</h3>
<p style="text-indent: 21.25pt;">Java规定,如果程序员一个构造方法都不定义,那么系统会自动为其加上一个不带参数的构造方法。如果程序员至少定义了一个构造方法,那么系统不会再提供不带参数的构造方法。
<p style="text-indent: 21.25pt;">【例3.21】带参数的构造方法示例。
public class constructWithPara{
? private int? x = 0;
? //定义一个带参数的构造方法
? public? constructWithPara(int ix){
??? System.out.println("这是带参数的构造方法");
??? x = ix;???????? //为成员变量赋值
? }
? //获取成员变量x的值
? public int getX(){
??? return x;
? }
? public static void main(String args[]){
??? constructWithPara oa = new constructWithPara(100);?? //隐式调用带参数的<br>??? ??????????????????????????????????????????????????? ??? 构造方法
??? System.out.println("x = " + oa.getX() );
? }
}
<p style="text-indent: 21.25pt;">这个程序的流程和程序3.31完全一样,只是其中的构造方法多了一个参数而已。程序运行的结果如下:
这是带参数的构造方法
x = 100
<span style="color: #0000ff;">constructWithPara oa = new constructWithPara();</span>
<p style="text-indent: 0cm;"><span style="color: #0000ff;">试图使用x的默认值。但这样是无法通过编译的,因为系统不会再为constructWithPara类提供无参数的构造方法。当此类被其他类继承时,这一问题显得越发严重,它甚至会导致根本无法写出一个子类。</span>
<p style="text-indent: 21.25pt;">//-----------文件名constructWithPara.java,程序编号3.33-----------------
public class constructWithPara{
? private int? x = 0;
? //定义一个带参数的构造方法
? public? constructWithPara(int ix){
??? System.out.println("这是带参数的构造方法");
??? x = ix;???????? //为成员变量赋值
? }
? //定义一个不带参数的构造方法
? public constructWithPara(){
? }
? //获取成员变量x的值
? public int getX(){
??? return x;
? }
? public static void main(String args[]){
??? constructWithPara oa = new constructWithPara(100);?? //隐式调用带参数的<br>???????????????????????????????????????????????????????????????????? 构造方法
??? System.out.println("x = " + oa.getX() );
? }
}
<h3>3.6.3? this关键字和构造方法的调用</h3>
this([参数列表])
<p style="text-indent: 21.25pt;">系统将根据参数列表来决定调用哪一个构造方法。使用this时还需注意下面几点:
??●???? 用this调用构造方法时,该语句只能用在构造方法中。
??●???? this语句必须是构造方法中的第一条语句。
??●???? 和new不同,this虽然可以调用构造方法,但它只是执行构造方法中的语句,并不会创建对象。
<p style="text-indent: 21.25pt;">这里仍然使用程序3.33,并在无参数的构造方法中加上this语句来为x赋初值。
<p style="line-height: 11pt;">public class constructWithPara{
<p style="line-height: 11pt;">? //定义一个带参数的构造方法
<p style="line-height: 11pt;">??? System.out.println("这是带参数的构造方法");
<p style="line-height: 11pt;">? }
<p style="line-height: 13pt;">? public constructWithPara(){
<p style="line-height: 13pt;">??? System.out.println("这是无参数的构造方法");
<p style="line-height: 13pt;">? //获取成员变量x的值
<p style="line-height: 13pt;">??? return x;
<p style="line-height: 13pt;">? public static void main(String args[]){
<p style="line-height: 13pt;">??? System.out.println("x = " + oa.getX() );
<p style="line-height: 13pt;">}
这是带参数的构造方法
这是无参数的构造方法
x = 100
<p style="text-indent: 21.25pt;">在constructWithPara()方法中,特别注意不要写成下面这个样子:
public constructWithPara(){
? System.out.println("这是无参数的构造方法");
? this(100);???? //调用带参数的构造方法为x赋值
}
<p style="text-indent: 21.25pt;">读者可能会觉得程序3.34用this调用另外一个构造方法为x赋值过于麻烦,不如直接为x赋值更简单。当然,这只是一个示例程序,这么做的原因在于:很多情况下,多个构造方法可能会做相同的事情,只是参数有点区别,这就可以将这段相同的代码单独抽取出来成为一个构造方法,然后使用this来调用它。
发表评论
-
以一个枢纽值二分一个数组
2012-02-08 15:17 866划分算法由两个指针开始,分别指向数组的两头。在左边的指 ... -
HashMap源码分析
2012-02-08 13:33 1114[size=medium;]HashMap源码分析 ... -
好玩的游戏合集~~
2012-02-07 16:19 1049因为刚接触windows phone不久,自己平时收藏 ... -
Linux下Mysql表名区分大小写
2012-02-04 13:58 11431、Linux下mysql安装完后是默认:区分表名的 ... -
如何使SOLR系统自动AUTO COMMIT
2012-02-03 16:49 904转自:http://blog.csdn.net/thu ... -
Servlet多线程
2012-02-03 13:24 921? <div class="Se ... -
Could not find a JavaScript runtime
2012-02-02 13:19 775My Rails3.1 app worked fine ... -
现在在郑州做java开发想去深圳
2012-01-31 14:43 918 &nb ... -
java的ProcessBuilder阻塞问题
2011-12-28 18:08 1344<span style="color: ... -
SQL 笔试题(摘)
2011-12-28 11:29 1002(1)表名:购物信息 购物人 商品名称 ... -
HOWTO: Disable HTTP Methods in Apache
2011-12-21 14:59 918<h3 class="entry-h ... -
手机wifi传文件的一简单代码
2011-12-20 13:39 1313手机与笔记本传文件的方法有很多种,如果不方便使用蓝牙 ... -
xml格式字符串与java对象互转
2011-12-20 11:34 1434import java.lang.reflect. ... -
《使用 Microsoft .NET 的企业解决方案模式》读书笔记2
2011-12-19 10:39 710第2章 组织模式 面向对象编程的基本元素是类。但是,如 ... -
在网页中插入RM视频文件的历程
2011-12-19 08:59 980俺最早想到的是直接利用Frontpage2003,看看 ... -
MapXtreme2004代码 简单专题图的显示
2011-12-15 14:24 712MapControl1.Map.Clear();< ... -
注意新技术的风险是否会超过获得成功的几率
2011-12-14 18:28 361</span></span> ... -
C#打印DataGrid中的数据
2011-12-14 16:59 1339<span style="" ... -
推荐三本书
2011-12-13 15:19 693推荐最近一直在看的三本书,很好,真的很好,别的也没什么 ... -
关于提高自己JAVA水平的十大技术讨论(转)
2011-12-13 14:29 1023本文来自<font col ...
相关推荐
和普通方法一样,构造方法也可以进行重载,即在同一类中可以定义多个构造方法,它们的参数列表不同(参数个数、类型或顺序不同)。这样可以根据不同的初始化需求选择合适的构造方法。例如: ```java public class ...
- **避免重复代码**:如果多个对象需要相同的初始化操作,构造方法可以避免在多个地方编写重复的代码。 ### 2. 构造方法的类型 - **默认构造器**:当用户没有定义任何构造器时,Java会提供一个无参数的默认构造器...
构造方法重载** Java允许在一个类中定义多个构造方法,只要它们的参数列表不同,这就是构造方法的重载。重载提供了创建对象的灵活性,可以根据需要提供不同的初始化方式。 **5. 继承中的构造方法** 当一个类继承另...
这称为重载构造方法,即在同一个类中定义多个构造方法,它们的方法名相同,但参数列表不同。 在实际编程中,我们通常会看到以下几种情况: - **默认构造器**:如果程序员没有定义任何构造方法,Java编译器会自动...
- 如果子类没有定义任何构造方法,它将自动获得一个默认构造方法,该构造方法会调用父类的无参构造方法。 7. **this关键字在构造方法中的使用**: - `this`关键字在构造方法中可以用来引用当前对象,常用于调用本...
如上所示,一个类可以有多个构造方法,只要它们的参数列表不同(即参数的个数、类型或顺序不同),这就是构造方法的重载。通过这种方法,我们可以为创建对象提供多种方式。 5. 构造方法的调用 构造方法的调用发生...
2. 构造方法重载:Java允许同一个类内存在多个构造方法,只要它们的参数列表不同即可。参数列表不同可以是参数的个数不同,或者是参数的类型不同,这种现象称为构造方法的重载。重载使得同一个类可以使用不同的构造...
和普通方法一样,Java中的构造方法也可以重载,即在同一个类中定义多个具有不同参数列表的构造方法。这样可以为创建对象提供多种初始化方式。例如: ```java class Student { String name; int age; Student() ...
这称为构造函数的重载,即在同一个类中定义多个构造方法,每个方法具有不同的参数列表。这样可以根据需要提供不同的初始化方式。 在创建对象时,构造方法的调用是自动进行的。当我们使用`new`关键字创建一个新对象...
除了默认构造器和参数化构造器,Java还支持构造方法的重载,即在同一个类中定义多个构造方法,它们具有不同的参数列表。这样可以根据需要提供多种创建对象的方式。 关于构造方法的继承,Java中类的继承并不包括构造...
在 `Teacher` 类中,也有类似的构造方法重载,如: ```java public Teacher(String name, String age, String school) { this(age, school); this.name = name; } ``` 这个构造方法先调用了一个接受 `age` 和 `...
构造方法重载是一种面向对象编程中的重要概念,它允许我们在一个类中定义多个具有相同名称但参数列表不同的构造方法。这样,我们可以根据不同的初始条件来创建类的实例,使得代码更具灵活性和可读性。 构造方法重载...
它可能详细介绍了如何设计和使用构造方法,包括参数化的构造方法、重载构造方法、以及构造方法与this关键字和super关键字的配合使用。 总之,类和对象是面向对象编程的基础,它们帮助我们将复杂的问题抽象为独立的...
3. **方法调用**:当一个类中有重载的方法时,`this`可以帮助你明确调用当前对象的某个方法,而不是其他重载版本。 4. **返回对象引用**:在返回类型为当前类类型的非静态方法中,`this`可以作为返回值,表示返回...
- **构造方法重载**:构造方法也可以重载,只要确保每个构造方法的参数列表不同即可。在构造方法中可以通过`this()`调用其他构造方法,但`this()`必须是构造方法中的第一条语句。 #### 五、继承与super关键字 - **...
- **示例**:一个类可以有多个构造方法,例如无参构造方法、带一个参数的构造方法、带多个参数的构造方法等。这些构造方法之间构成了重载。 ### 方法的重载 方法重载是在同一个类中定义多个同名的方法,但这些方法...
6. **构造方法重载**:构造方法同样可以重载,通过不同的参数列表实现。使用`this()`可以在一个构造方法中调用另一个构造方法,且`this()`必须是第一条语句。 7. **继承(Inheritance)**:Java支持单一继承,即一...
6. 构造方法重载:类可以有多个构造方法,每个构造方法的参数列表不同。使用`this()`可以在一个构造方法中调用另一个构造方法。 7. 继承(Inheritance):Java支持单一继承,即一个类只能从一个父类继承。使用`...
6. **方法重载**:方法重载允许在同一个类中定义多个同名方法,但要求方法的参数列表(参数类型、数量或顺序)不同。返回类型不影响重载。 7. **构造方法的相互调用**:在构造方法内部,可以使用`this()`调用同一类...