1. 构造方法

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

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

例如以下例子:

  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类的默认构造方法来创建对象,没有默认构造方法则不合法,例如:

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

1.2. 重载构造方法

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

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

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

  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. 实例方法

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

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

  1. Java 中静态方法 实例方法 具体方法区别与联系

    在查阅JDK文档时,经常会看到某个类的方法汇总,一般会以如下的格式列出来: 这几个标签对应的方法类型分别是什么意思呢? 1.   Static Method,静态方法,可以在不创建类实例的情况下,访问 ...

  2. Java中this与super的区别【6】

    若有不正之处,请多多谅解并欢迎批评指正,不甚感激.请尊重作者劳动成果: 本文原创作者:pipi-changing本文原创出处:http://www.cnblogs.com/pipi-changing/ ...

  3. java中构造方法和方法super/this超类与子类中初始化顺序

    java中构造方法和方法全面解析 我相信大多说人都对构造方法.方法不陌生,而且很了解,但我也相信有很多像我这样的没有一个很好很清晰很全面的认识,今天就把它整理如下,希望能给大家带来点方便与帮助,也希望 ...

  4. 关于java中构造方法、实例初始化、静态初始化执行顺序

    在Java笔试中,构造方法.实例初始化.静态初始化执行顺序,是一个经常被考察的知识点. 像下面的这道题(刚刚刷题做到,虽然做对了,但是还是想整理一下) 运行下面的代码,输出的结果是... class ...

  5. java中wait和sleep的区别

    文章目录 Wait和sleep的区别 唤醒wait和sleep java中wait和sleep的区别 在本篇文章中,我们将会讨论一下java中wait()和sleep()方法的区别.并讨论一下怎么使用 ...

  6. Java中Set Map List 的区别

    java中set map list的区别: 都是集合接口 简要说明 set --其中的值不允许重复,无序的数据结构 list   --其中的值允许重复,因为其为有序的数据结构 map--成对的数据结构 ...

  7. Java中Comparable和Comparator接口区别分析

    Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comp ...

  8. 转:Java中abstract和interface的区别

    转自:Java中abstract和interface的区别 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java ...

  9. Java中堆和栈的区别(转)

    栈与堆都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆.      Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new. ...

  10. 转:二十一、详细解析Java中抽象类和接口的区别

    转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...

随机推荐

  1. PHP 报错--Array to string conversion,请用print_r() 来输出数组

    报错如下: 原因:数组不能用 echo 来输出 解决办法:print_r() 来输出数组 解决办法:var_dump() 来查看数据类型

  2. unity3d优化-代码篇(不定期更新)

    1.Update 大多数情况是需要在update中处理很多逻辑的,然而unity3d底层是c/c++编写,逻辑层是c#,通过monobehaviour挂载于对象中,实现一些unity3d接口的重载. ...

  3. Jmeter中基本操作

    Jmeter中基本操作包括 1:线程组 2:HTTP信息头管理器 3:HTTP请求默认值 4:HTTP请求 5:查看结果树 操作步骤如下: 1.创建一个线程组 通俗的讲一个线程组,,可以看做一个虚拟用 ...

  4. 我们为什么不用 Select * 吗?

    应用程序慢如牛,原因多多,可能是网络的原因.可能是系统架构的原因,还有可能是数据库的原因. 那么如何提高数据库SQL语句执行速度呢?有人会说性能调优是数据库管理员(DBA)的事,然而性能调优跟程序员们 ...

  5. qt之数据库对照片的存取

    需要确保数据库连接上 QOCI为驱动 //oracle 数据库连接 //需要在执行文件目录添加 oci.dll oraociei11.dll QSqlDatabase db = QSqlDatabas ...

  6. SQL注入——知表名不知列明情景下查询数据

    场景 有某些情况,可以查找到表名,但查找不到列名. MySQL < 5 或 web过滤 information_scema 详解 select `1` from (select 1,2,3,4, ...

  7. 学习随笔:Django 补充及常见Web攻击 和 ueditor

    判断用户是否登录 <!-- xxx.html --> {% if request.user.is_authenticated %} django中的request对象详解 填错表格返回上次 ...

  8. CF715B. Complete The Graph

    CF715B. Complete The Graph 题意: 给一张 n 个点,m 条边的无向图,要求设定一些边的边权 使得所有边权都是正整数,最终 S 到 T 的最短路为 L 1 ≤ n ≤ 100 ...

  9. 实现logstash6.4.3 同步mysql数据到Elasticsearch6.4.3

    本文旨在实践把mysql已有的数据同步到elasticsearch中,使用的版本是6.4.3,对于其它6.x版本理应是一样的处理方式. 本文目录: 1.初始化Elasticsearch 6.4.3 1 ...

  10. 数据分析——pandas

    简介 import pandas as pd # 在数据挖掘前一个数据分析.筛选.清理的多功能工具 ''' pandas 可以读入excel.csv等文件:可以创建Series序列,DataFrame ...