Java中构造方法、实例方法、类方法的区别

1. 构造方法

构造方法负责对象的初始化工作,为实例变量赋予合适的初始值。必须满足以下的语法规则:

  • 方法名与类名相同;
  • 不要返回类型(例如return、void等);
  • 不能被static、final、native、abstract和synchronized修饰,不能被子类继承。

例如以下例子:

[java] view plain copy

  1. <span style="font-family:‘Microsoft YaHei‘; font-size:10px">public class Sample{
  2. private in x;
  3. public Sample(){              //不带参数的构造方法
  4. this(1);
  5. }
  6. public Sample(int x){         //带参数的构造方法
  7. this.x=x;
  8. }
  9. public int Sample(int x){     //不是构造方法,return
  10. return x++;
  11. }
  12. }</span>

1.1. 默认构造方法

默认构造方法时没有参数的构造方法,分为

a.隐含的默认构造方法:public ClassName(){}

b.程序显示定义默认构造方法:public Employee(){this("无名氏");}

可以调用ClassName类的默认构造方法来创建对象,没有默认构造方法则不合法,例如:

[java] view plain copy

  1. <span style="font-family:‘Microsoft YaHei‘; font-size:10px">ClassName c=new ClassName();   //此语句合法</span>

1.2. 重载构造方法

通过new创建一个对象后,在不同的条件下,对象可能会有不同的初始化行为,可以通过重载构造方法来表达对象的初始化行为。具体参考this关键字的用法。

1.3. 子类调用父类的构造方法

父类的构造方法不能被子类调用,可以通过super语句调用父类的构造方法。例如:

[java] view plain copy

  1. <span style="font-family:‘Microsoft YaHei‘; font-size:10px">public class MyExpection extends Exceptio{
  2. public MyException(){
  3. //调用Exception父类的Exception(String msg)方法
  4. super("Something is error!");
  5. }
  6. public MyException(String msg){
  7. //调用EXception父类的Exception(String msg)方法
  8. super(msg);
  9. }
  10. }</span>

用super调用父类的构造方法必须遵守以下规则:

1. 子类的构造方法中不能直接通过父类的方法名调用父类的构造方法,使用super语句;

2. 加入在子类的构造方法中有super语句,它必须作为构造方法的第一条语句(同this语句);

1.4. 构造方法的作用域

  • 当前类的其他构造方法通过this语句调用;
  • 当前类的子类的构造方法通过super语句调用;
  • 在程序中通过new语句调用。

1.5. 构造方法的private访问级别

构造方法为private级别时,意味着只能在当前类中访问它:当前类的其他构造方法中可以通过this语句调用,此外还可以在当前类的成员方法中使用new调用。

以下场合中,可以把类的所有构造方法声明为private:

  • 这个类中仅仅包含一些供其他程序调用的静态方法,没有任何实例方法。
  • 禁止这个类被继承。声明为private后,如果定义了它的子类,子类的方法中无法调用父类的任何构造方法。
  • 类需要把构造自身实例的细节封装起来,不允许其他程序通过new语句创建这个类的实例。提供静态方法。

2. 类方法

用static关键字修饰,可以直接通过类名调用,不需要创建类的对象来调用该方法。

3. 实例方法

可以通过类的实例调用对象的方法,也称为成员方法。

1. 构造方法

构造方法负责对象的初始化工作,为实例变量赋予合适的初始值。必须满足以下的语法规则:

  • 方法名与类名相同;
  • 不要返回类型(例如return、void等);
  • 不能被static、final、native、abstract和synchronized修饰,不能被子类继承。

例如以下例子:

[java] view plain copy

  1. <span style="font-family:‘Microsoft YaHei‘; font-size:10px">public class Sample{
  2. private in x;
  3. public Sample(){              //不带参数的构造方法
  4. this(1);
  5. }
  6. public Sample(int x){         //带参数的构造方法
  7. this.x=x;
  8. }
  9. public int Sample(int x){     //不是构造方法,return
  10. return x++;
  11. }
  12. }</span>

1.1. 默认构造方法

默认构造方法时没有参数的构造方法,分为

a.隐含的默认构造方法:public ClassName(){}

b.程序显示定义默认构造方法:public Employee(){this("无名氏");}

可以调用ClassName类的默认构造方法来创建对象,没有默认构造方法则不合法,例如:

[java] view plain copy

  1. <span style="font-family:‘Microsoft YaHei‘; font-size:10px">ClassName c=new ClassName();   //此语句合法</span>

1.2. 重载构造方法

通过new创建一个对象后,在不同的条件下,对象可能会有不同的初始化行为,可以通过重载构造方法来表达对象的初始化行为。具体参考this关键字的用法。

1.3. 子类调用父类的构造方法

父类的构造方法不能被子类调用,可以通过super语句调用父类的构造方法。例如:

[java] view plain copy

  1. <span style="font-family:‘Microsoft YaHei‘; font-size:10px">public class MyExpection extends Exceptio{
  2. public MyException(){
  3. //调用Exception父类的Exception(String msg)方法
  4. super("Something is error!");
  5. }
  6. public MyException(String msg){
  7. //调用EXception父类的Exception(String msg)方法
  8. super(msg);
  9. }
  10. }</span>

用super调用父类的构造方法必须遵守以下规则:

1. 子类的构造方法中不能直接通过父类的方法名调用父类的构造方法,使用super语句;

2. 加入在子类的构造方法中有super语句,它必须作为构造方法的第一条语句(同this语句);

1.4. 构造方法的作用域

  • 当前类的其他构造方法通过this语句调用;
  • 当前类的子类的构造方法通过super语句调用;
  • 在程序中通过new语句调用。

1.5. 构造方法的private访问级别

构造方法为private级别时,意味着只能在当前类中访问它:当前类的其他构造方法中可以通过this语句调用,此外还可以在当前类的成员方法中使用new调用。

以下场合中,可以把类的所有构造方法声明为private:

  • 这个类中仅仅包含一些供其他程序调用的静态方法,没有任何实例方法。
  • 禁止这个类被继承。声明为private后,如果定义了它的子类,子类的方法中无法调用父类的任何构造方法。
  • 类需要把构造自身实例的细节封装起来,不允许其他程序通过new语句创建这个类的实例。提供静态方法。

2. 类方法

用static关键字修饰,可以直接通过类名调用,不需要创建类的对象来调用该方法。

3. 实例方法

可以通过类的实例调用对象的方法,也称为成员方法。

时间: 2024-11-05 15:49:36

Java中构造方法、实例方法、类方法的区别的相关文章

Java中this与super的区别【6】

本文原创作者:pipi-changing 本文原创出处:http://www.cnblogs.com/pipi-changing/ 本文版权归作者和博客园共有,未经作者同意必须保留此段声明, 且在文章页面明显位置给出原文连接 ,否则保留追究法律责任的权利. Java中this与super的区别  this&super 什么是this,this是自身的一个对象,代表对象本身,可以理解为:指向对象本身的一个指针. Java关键字this只能用于方法的方法体内.当一个对象创建后, Java虚拟机(JV

java中构造方法和方法全面解析

java中构造方法和方法全面解析 我相信大多说人都对构造方法.方法不陌生,而且很了解,但我也相信有很多像我这样的没有一个很好很清晰很全面的认识,今天就把它整理如下,希望能给大家带来点方便与帮助,也希望大家多多讨论.          构造方法和方法的区别: 构造方法要与类名相同,无返回类型,在类初始化的时候调用.      方法最好与类名不同,对象调用,静态方法可用类名.方法(). 构造器和方法在下面三个方面区别:修饰符,返回值,命名. 1.和方法一样,构造器可以有任何访问的修饰: public

【翻译】JAVA中抽象类和接口的区别

不知道有没有人翻译过了,这篇是挺简单的,权当复习一遍内容吧. 很多常见的面试问题如"抽象类和接口有什么区别","你在什么时候用抽象类什么时候用接口".所以在这篇文章里面,我们会讨论一下这个话题. 在开始讨论它们的区别之前,我们先看看它们的介绍. Abstract class 抽象类 抽象类被用来抽象出子类的共同特征.它是不能被实例化的,它只能被子类继承作为超类使用.抽象类被用作它的子类下的层次结构创建模板(Abstract classes are used to c

java中String与StringBuilder的区别

本篇文章介绍了,java中String与StringBuilder的区别. 相信大家对 String 和 StringBuffer 的区别也已经很了解了,但是估计还是会有很多同志对这两个类的工作原理有些不清楚的地方,今天我在这里重新把这个概念给大家复习一下,顺便牵出 J2SE 5.0 里面带来的一个新的字符操作的类—— StringBuilder (先别忙着扔我砖头,我还算清醒,我这里说的不是 C #, Java 也有 StringBuilder 类).那么这个 StringBuilder 和

java中extends与implements的区别

学了java很久了,久不用之后给同学解决一个java问题的时候,就卡在这个标题上了. 下面是java中extends与implements的区别: 1. 在类的声明中,通过关键字extends来创建一个类的子类.一个类通过关键字implements声明自己使用一个或者多个接口. extends 是继承某个类, 继承之后可以使用父类的方法, 也可以重写父类的方法; implements 是实现多个接口, 接口的方法一般为空的, 必须重写才能使用 2.extends是继承父类,只要那个类不是声明为f

java中抽象类与接口的区别

转自: http://blog.csdn.net/tp7309/article/details/10452445 二者的区别快忘得差不多了,从别处看到这文章感觉写的不错,正好复习复习,也给大家分享一下. 抽象类 abstract class 包含抽象方法的类,叫抽象类.而抽象的概念就是抽象出共同属性:成员变量和方法.所以抽象类可以有private等多种权限的成员变量和非abstract的成员方法.当然抽象方法是一定要有的. 抽象类是用于单一继承的,不能实例化.而继承类一定要实现抽象方法,因为抽象

Java中Vector和ArrayList的区别

首先看这两类都实现List接口,而List接口一共有三个实现类,分别是ArrayList.Vector和LinkedList.List用于存放多个元素,能够维护元素的次序,并且允许元素的重复. 3个具体实现类的相关区别如下: ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素进行快速随机访问.数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要讲已经有数组的数据复制到新的存储空间中.当从ArrayList的中间位置插入或者删除元素时,需要对数组

java学习笔记——Java中HashMap和TreeMap的区别深入理解

本文转载自Java中HashMap和TreeMap的区别深入理解 首先介绍一下什么是Map.在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value.这就是我们平时说的键值对. HashMap通过hashcode对其内容进行快速查找,而 TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的). HashMap 非线程安全 

Java中Comparable和Comparator接口区别分析

Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comparable和Comparator接口的区别,两者都有比较的功能,那么究竟有什么区别呢,感兴趣的Java开发者继续看下去吧.Comparable 简介Comparable 是排序接口.若一个类实现了Comparab 本文要来详细分析一下Java中Comparable和Comparator接口的区别,

Java中&&和&以及||和|的区别

在java的逻辑运算符中,有这么四类:&&(短路与),&(与),|(或),||(短路或). &&和&都是表示与,区别是&&只要满足第一个条件,后面条件就不再判断.而&要对所有的条件都进行判断. "&"操作 代码如下: public class OperateDemo01{ /** 验证(&)"与" 操作 说明:"与" 操作 要求所有条件都判断一遍 */ pub