我们说构造函数能处理参数的问题,但其实也要分三种情况进行讨论。目前有三种类型:无参、有参和默认。根据不同的参数情况,需要我们分别进行构造函数的讨论。这里重点是无参构造函数的初始化也要分两种方法进行分析。下面我们就这三种不同的构造函数类型分别为大家进行展示。

1.无参构造函数

不带入参的构造函数叫无参构造函数,对类的成员初始化有两种方法:

(1)在类成员变量声明时进行初始化

?
1
2
3
4
5
6
7
public class MyClass {
private String name = "Jerry";
private int id = 1;
public MyClass()
{
}
}

(2)在无参构造函数的方法体里对类成员变量初始化

?
1
2
3
4
5
6
7
8
9
public class MyClass {
private String name;
private int id;
public MyClass()
{
this.name = "Jerry";
this.id = 1;
}
}

2.有参构造函数

带入参的构造函数叫有参构造函数。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Employee {
int empId;
String empName;
//parameterized constructor with two parameters
Employee(int id, String name){
this.empId = id;
this.empName = name;
}
void info(){
System.out.println("Id: "+empId+" Name: "+empName);
}
public static void main(String args[]){
Employee obj1 = new Employee(10245,"Chaitanya");
Employee obj2 = new Employee(92232,"Negan");
obj1.info();
obj2.info();
}
}

输出:

?
1
2
Id: 10245 Name: Chaitanya
Id: 92232 Name: Negan

当类里没有显式地定义代码来实现任何构造函数时,Java编译器将会在编译的字节码(.class文件)里面为这个类插入默认构造函数。由于是在编译阶段插入,因此在源文件(.java)里是不会找到默认构造函数的代码的。

3.默认构造函数

默认构造函数形式上类似无参构造函数(都没有入参),但是二者并不能划等号,区别如下:

默认构造函数方法体为空,无参构造函数方法体可以为空也可以不为空;

只要类里显式的创建了一个构造函数,比如一个无参构造函数,编译器都不会再为这个类创建默认构造函数了。

到此这篇关于java构造函数的三种类型总结的文章就介绍到这了,更多相关java构造函数的类型内容请搜索自学编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持自学编程网!

标签:

java构造函数的三种类型总结的更多相关文章

  1. 请谨慎使用 avaliable 方法来申请缓冲区

    问题今天开始尝试用 Java 写 http 服务器,开局就遇到 Bug。我先写了一个多线程的、BIO 的 http 服务器,其中接收请求的部分,会将请求的第一行打印出来。下面是浏览器发出的请求和控制台的输出情况。我们竟然收到了一个空的请求!!这是为什么呢?我解析请求的部分代码如下。// reques......

  2. java中判断Object对象类型

    Object param = params.get(i); if (param instanceof Integer) { int value = ((Integer) param).intValue(); prepStatement.setInt(i + , value); }......

  3. Java泛型

    你要做一个不动声色的大人了。不准情绪化,不准偷偷想念,不准回头看。去过自己另外的生活。你要听话,不是所有的鱼都会生活在同一片海里。 ——村上春树 《舞!舞!舞!》Q:什么是泛型?Ja......

  4. 浅谈在Java中JSON的多种使用方式

    1. 常用的JSON转换JSONObject 转 JSON 字符串JSONObject json = new JSONObject();jsonObject.put("name", "test");String str = JSONObject.toJSONS......

  5. Java RMI 实现一个简单的GFS(谷歌文件系统)——介绍篇

    本系列主要是使用Java RMI 实现一个简单的GFS(谷歌文件系统,google file system)。首先进行整体介绍,然后对背景进行描述以及对系统进行设计,同时实现系统,提供演示视频和源代码,望多多支持!本系列主要是使用Java RMI实现一个简单的GFS(谷歌文件系统,google fi......

  6. Java中获取时间戳

    Java中获取时间戳 三种方式对比**最近项目开发过程中发现了项目中获取时间戳的业务。而获取时间戳有以下三种方式,首先先声明推荐使用System类来获取时间戳,下面一起看一看三种方式。1.System.currentTimeMillis() System类中的currentTimeMillis()方......

  7. Java 反射修改类的常量值、静态变量值、属性值

    前言有的时候,我们需要修改一个变量的值,但变量也许存在于 Jar 包中或其他位置,导致我们不能从代码层面进行修改,于是我们就用到了下面的场景,通过反射来进行修改变量的值。定义一个实体类class Bean{ private static final Integer INT_VALUE = 100;......

  8. java自定义注解验证手机格式的实现示例

    1、@Valid与@Validated的区别1.1 基本区别@Valid:Hibernate validation校验机制@Validated:Spring Validator校验机制,这个也是最常用的@Validation只是对@Valid进行了二次封装,在使用上并没有太大区别,但在分组、注解位置......

  9. java HttpClient传输json格式的参数实例讲解

    最近的一个接口项目,传的参数要求是json,需要特殊处理一下。重点是这两句话:httpPost.setHeader("Content-Type", "application/json;charset=UTF-8");se.setContentType(CONT......

  10. Java多线程总结(二)

    四.Java多线程的阻塞状态与线程控制上文已经提到Java阻塞的几种具体类型。下面分别看下引起Java线程阻塞的主要方法。1.join()join —— 让一个线程等待另一个线程完成才继续执行。如A线程线程执行体中调用B线程的join()方法,则A线程被阻塞,知道B线程执行完为止,A才能得以继续执行......

随机推荐

  1. 【小菜学网络】MAC地址详解

    上一小节介绍了以太网帧的结构,以及帧中各个字段的作用。参与以太网通讯的实体,由以太网地址唯一标识。以太网地址也叫做 MAC 地址,我们对它仍知之甚少。以太网地址在不同场景,称谓也不一样,常用叫法包括这些:以太网地址MAC 地址硬件地址物理地址网卡地址网卡在以太网中,每台主机都需要安装一个物理设备并通......

  2. 在nodejs中创建child process

    目录简介child process异步创建进程同步创建进程在nodejs中创建child process简介nodejs的main event loop是单线程的,nodejs本身也维护着Worker Pool用来处理一些耗时的操作,我们还可以通过使用nodejs提供的worker_threads来......

  3. Vue 实现可视化拖拽页面编辑器

    在线地址 (用梯子会更快些)可视化页面编辑器,听起来可望不可即是吧,先来张动图观摩观摩一番!实现这功能之前,在网上参考了很多资料,最终一无所获,五花八门的文章,都在述说着曾经的自己!那么,这时候就需要自己去琢磨了,如何实现?需要考虑到:拖拽的实现数据结构的定义组件的划分可维护性、扩展性对象的引用:在......

  4. C#实现简单的五子棋游戏

    最近利用业余时间写了一个简单的五子棋游戏,没有利用深层次的面向对象技术,自学一年,代码和程序设计有不妥之处,还望大神指出,先看下实现的功能,三个button按钮,黑棋和白棋选择先出,和重置。其他的不多说了,直接上全部代码(通过测试)。计算输赢的时候,左斜和右斜用了数学y=kx+b的线性函数计算。pr......

  5. .NET中使用DebuggerDisplay轻松定制调试

    前言对于调试的方式有多种,不过在今天我们将看到的监视窗口对变量的监视,当然在这里我们是定制内部的变量值,或者说变量的显示与计算的内容。注:监视窗口在调试时可以一次显示多个变量。“快速监视”对话框一次显示一个变量。DebuggerDisplayAttribute在下面示例中,我们在类上添加Debugg......

  6. Java 类的加载与初始化

    本文结构:1.先看几道题2.类的加载于初始化(1)类的加载(2)类的初始化(a)会发生类的初始化的情况(b)不会发生类的初始化的情况首先看几道题。解析可在看完讲解后再看Demo1public class Demo1 {public static void main(String args[]) {D......

  7. MySQL mysqladmin客户端的使用简介

    mysqladmin是MySQL官方提供的shell命令行工具,它的参数都需要在shell命令行里面执行,当我们使用mysqladmin的时候,必须指定两类参数,一类是连接参数,另外一类是命令参数,连接参数用来指定相应的连接信息,而命令参数用来指定命令信息,例如可以用来检查服务器的配置和当前状态、创......

  8. 深入浅出Java线程池:使用篇

    前言很高兴遇见你~借助于很多强大的框架,现在我们已经很少直接去管理线程,框架的内部都会为我们自动维护一个线程池。例如我们使用最多的okHttp以及他的封装框架Retrofit,线程封装框架RxJava和kotlin协程等等。为了更好地使用这些框架,则必须了解他的实现原理,而了解他的原理,线程池是永远......

  9. 【python接口自动化】- 正则用例参数化

    我们在做接口自动化的时候,处理接口依赖的相关数据时,通常会使用正则表达式来进行提取相关的数据。正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(Regular Expression,在代码中常简写为regex、regexp或RE) 。它是一个特殊的字符序列,它能帮助你方便的......

  10. 【JAVA并发第三篇】线程间通信

    线程间的通信JVM在运行时会将自己管理的内存区域,划分为不同的数据区,称为运行时数据区。每个线程都有自己私有的内存空间,如下图示:Java线程按照自己虚拟机栈中的方法代码一步一步的执行下去,在这一过程中不可避免的会使用到线程共享的内存区域堆或方法区。为了防止多个线程在同一时刻访问同一个内存地址,需要......