Java中构造方法、实例方法、类方法的区别
1. 构造方法
构造方法负责对象的初始化工作,为实例变量赋予合适的初始值。必须满足以下的语法规则:
- 方法名与类名相同;
- 不要返回类型(例如return、void等);
- 不能被static、final、native、abstract和synchronized修饰,不能被子类继承。
例如以下例子:
- <span style="font-family:'Microsoft YaHei'; font-size:10px">public class Sample{
- private in x;
- public Sample(){ //不带参数的构造方法
- this(1);
- }
- public Sample(int x){ //带参数的构造方法
- this.x=x;
- }
- public int Sample(int x){ //不是构造方法,return
- return x++;
- }
- }</span>
1.1. 默认构造方法
默认构造方法时没有参数的构造方法,分为
a.隐含的默认构造方法:public ClassName(){}
b.程序显示定义默认构造方法:public Employee(){this("无名氏");}
可以调用ClassName类的默认构造方法来创建对象,没有默认构造方法则不合法,例如:
- <span style="font-family:'Microsoft YaHei'; font-size:10px">ClassName c=new ClassName(); //此语句合法</span>
1.2. 重载构造方法
通过new创建一个对象后,在不同的条件下,对象可能会有不同的初始化行为,可以通过重载构造方法来表达对象的初始化行为。具体参考this关键字的用法。
1.3. 子类调用父类的构造方法
父类的构造方法不能被子类调用,可以通过super语句调用父类的构造方法。例如:
- <span style="font-family:'Microsoft YaHei'; font-size:10px">public class MyExpection extends Exceptio{
- public MyException(){
- //调用Exception父类的Exception(String msg)方法
- super("Something is error!");
- }
- public MyException(String msg){
- //调用EXception父类的Exception(String msg)方法
- super(msg);
- }
- }</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修饰,不能被子类继承。
例如以下例子:
- <span style="font-family:'Microsoft YaHei'; font-size:10px">public class Sample{
- private in x;
- public Sample(){ //不带参数的构造方法
- this(1);
- }
- public Sample(int x){ //带参数的构造方法
- this.x=x;
- }
- public int Sample(int x){ //不是构造方法,return
- return x++;
- }
- }</span>
1.1. 默认构造方法
默认构造方法时没有参数的构造方法,分为
a.隐含的默认构造方法:public ClassName(){}
b.程序显示定义默认构造方法:public Employee(){this("无名氏");}
可以调用ClassName类的默认构造方法来创建对象,没有默认构造方法则不合法,例如:
- <span style="font-family:'Microsoft YaHei'; font-size:10px">ClassName c=new ClassName(); //此语句合法</span>
1.2. 重载构造方法
通过new创建一个对象后,在不同的条件下,对象可能会有不同的初始化行为,可以通过重载构造方法来表达对象的初始化行为。具体参考this关键字的用法。
1.3. 子类调用父类的构造方法
父类的构造方法不能被子类调用,可以通过super语句调用父类的构造方法。例如:
- <span style="font-family:'Microsoft YaHei'; font-size:10px">public class MyExpection extends Exceptio{
- public MyException(){
- //调用Exception父类的Exception(String msg)方法
- super("Something is error!");
- }
- public MyException(String msg){
- //调用EXception父类的Exception(String msg)方法
- super(msg);
- }
- }</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中构造方法、实例方法、类方法的区别的更多相关文章
- Java 中静态方法 实例方法 具体方法区别与联系
在查阅JDK文档时,经常会看到某个类的方法汇总,一般会以如下的格式列出来: 这几个标签对应的方法类型分别是什么意思呢? 1. Static Method,静态方法,可以在不创建类实例的情况下,访问 ...
- Java中this与super的区别【6】
若有不正之处,请多多谅解并欢迎批评指正,不甚感激.请尊重作者劳动成果: 本文原创作者:pipi-changing本文原创出处:http://www.cnblogs.com/pipi-changing/ ...
- java中构造方法和方法super/this超类与子类中初始化顺序
java中构造方法和方法全面解析 我相信大多说人都对构造方法.方法不陌生,而且很了解,但我也相信有很多像我这样的没有一个很好很清晰很全面的认识,今天就把它整理如下,希望能给大家带来点方便与帮助,也希望 ...
- 关于java中构造方法、实例初始化、静态初始化执行顺序
在Java笔试中,构造方法.实例初始化.静态初始化执行顺序,是一个经常被考察的知识点. 像下面的这道题(刚刚刷题做到,虽然做对了,但是还是想整理一下) 运行下面的代码,输出的结果是... class ...
- java中wait和sleep的区别
文章目录 Wait和sleep的区别 唤醒wait和sleep java中wait和sleep的区别 在本篇文章中,我们将会讨论一下java中wait()和sleep()方法的区别.并讨论一下怎么使用 ...
- Java中Set Map List 的区别
java中set map list的区别: 都是集合接口 简要说明 set --其中的值不允许重复,无序的数据结构 list --其中的值允许重复,因为其为有序的数据结构 map--成对的数据结构 ...
- Java中Comparable和Comparator接口区别分析
Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comp ...
- 转:Java中abstract和interface的区别
转自:Java中abstract和interface的区别 abstract class和interface是Java语言中对于抽象类定义进行支持的两种机制,正是由于这两种机制的存在,才赋予了Java ...
- Java中堆和栈的区别(转)
栈与堆都是Java用来在Ram中存放数据的地方.与C++不同,Java自动管理栈和堆,程序员不能直接地设置栈或堆. Java的堆是一个运行时数据区,类的对象从中分配空间.这些对象通过new. ...
- 转:二十一、详细解析Java中抽象类和接口的区别
转:二十一.详细解析Java中抽象类和接口的区别 http://blog.csdn.net/liujun13579/article/details/7737670 在Java语言中, abstract ...
随机推荐
- requireJS简单应用
项目结构目录: Html页面 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> < ...
- C# 返回JSON格式化统一标准
public class BackJson { public int code { get; set; } public string msg { get; set; } public string ...
- java-数组排序--冒泡排序、鸡尾酒排序、地精排序
冒泡排序 冒泡排序的思想是,让依次数组中相邻的数进行比较,如果前一个数比后一个数大,则两数进行交换,大的数就会象泡泡一样慢慢浮在水面上了 见图解 稳定性:稳定时间复杂度:O(n2) public st ...
- Linux环境下Hadoop集群搭建
Linux环境下Hadoop集群搭建 前言: 最近来到了武汉大学,在这里开始了我的研究生生涯.昨天通过学长们的耐心培训,了解了Hadoop,Hdfs,Hive,Hbase,MangoDB等等相关的知识 ...
- BZOJ 4804
辣鸡题目毁我青春 易推 \[\sum_{i=1}^n\sum_{i=1}^m \varphi(gcd(i,j))=\sum_{T}\frac{n}{T}\dfrac{m}{T}\sum_{d|T} \ ...
- iphone 屏蔽系统自动更新,消除设置上的小红点
苹果ios系统的更新频率大家应该都知道,一般来说1个月就会来次更新.这一点让很多人讨厌.主要原因还是iPhone会自动下载更新包,然后一直不停地提示你是否安装更新,问题是我们还找不到关闭提醒和关闭自动 ...
- SVN 问题:None of the environment variables SVN_EDITOR, VISUAL or EDITOR are set, and no 'editor-cmd' run-time
问题原因: 没有设置svn编辑器的环境变量,主要是import.commit中填写comment要用 解决办法: 编辑 /etc/bashrc 文件,加入如下一行: export SVN_EDITOR ...
- Spring + SpringMVC + Mybatis项目中redis的配置及使用
maven文件 <!-- redis --> <dependency> <groupId>redis.clients</groupId> <art ...
- Centos7 编译安装 Nginx PHP Mariadb Memcached 扩展 ZendOpcache扩展 (实测 笔记 Centos 7.3 + Openssl 1.1.0e + Mariadb 10.1.22 + Nginx 1.12.0 + PHP 7.1.4 + Laravel 5.4 )
环境: 系统硬件:vmware vsphere (CPU:2*4核,内存2G,双网卡) 系统版本:CentOS-7-x86_64-Minimal-1611.iso 安装步骤: 1.准备 1.0 查看硬 ...
- Filter(过滤器)
一.Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态 ...