Java构造器(构造方法/constructor)
我们先来看一下什么是构造器:
1、构造器也叫构造方法或构造函数,分为有参构造器和无参构造器;
2、构造器也是一种方法,只不过是一种特殊的方法,它会在对象创建的时候被调用;
3、构造器最大的作用就是在创建对象的时候进行对象的初始化,有参构造器可以实现对象传参(后面会比较着来看有参构造器方便在哪儿了);
4、一个类可以有零个(如果没有自己定义编译器会帮你提供无参构造器)或多个构造器(【重载】不知道重载定义的小伙伴可以先记下概念);
5、构造器不能被子类继承,Java中子类会自动调用父类的构造器(同样,不了解的可以先记下概念或者跳过)
前面既然说了构造器是一种特殊的方法,我们就来看一下构造方法和普通方法的区别:
1、命名:构造器的方法名必须和类名相同,一般方法的方法名在命名规范的情况下可以随便定义。
2、修饰符:构造器不能被static、final、synchronized、abstract和native修饰
3、返回值:构造器没有返回值(但是不需要写void),一般方法要有返回值或者无返回值(void)
来看一下无参构造器的代码,同时看一下无参构造器的情况下(不定义构造器同理)是如何给属性赋值的:
package test;
public class Student01 {
//定义属性
public String name;
public int age;
public String sex;
/**
* 无参的构造方法:
* 如果不写编译器会自动加上;只要定义了构造器,不管是有参还是无参,编译器都不会再帮你定义
*/
public Student01() {//new对象的时候会调用这个无参构造方法,它会给new出来的对象一个初始化值(了解即可:数字为 0,字符为 null,布尔为 false,所有引用都是 null)
System.out.println("创建对象的过程中调用我了,在s1.name = ‘张三’;前执行,所以我在main方法的打印语句前打印");
}
public static void main(String[] args) {
Student01 s1 = new Student01();//执行这一步的时候会自动调用Student01()
//通过 对象.属性来给属性赋值
s1.name = "张三";
s1.age = 18;
s1.sex = "男";
System.out.println("姓名:"+s1.name+"\n性别:"+s1.sex+"\n年龄:"+s1.age);
}
}
结果:
创建对象的过程中调用我了,在s1.name = ‘张三’;前执行,所以我在main方法的打印语句前打印
姓名:张三
性别:男
年龄:18
再来看有参构造器(给属性赋值不用再一个一个通过对象.属性)
package test;
public class Student02 {
// 定义属性
public String name;
public int age;
public String sex;
//定义有参构造方法
public Student02(String name, int age, String sex) { //类似于普通带参方法 public void add(int a,int b){}
this.name = name; //将形参变量的值,赋给成员变量。 this指当前对象,这里不会的小伙伴不用慌它们的意思是:
this.age = age; //拿name来举例this.name = name;就是将下面传过来的name值(张翠花)赋值给上面定义属性的(public String name;)name
this.sex = sex;
}
public static void main(String[] args) {
Student02 s2 = new Student02("张翠花", 18, "女");//调用构造器的时候传参(改变默认初始化),类似于调用普通带参方法 add(1,1);
System.out.println("姓名:"+s2.name+"\n性别:"+s2.sex+"\n年龄:"+s2.age);
}
}
构造器不只可以定义一个,可以是零个(以前创建对象没写构造器的时候)或多个
package test;
public class Student02 {
// 定义属性
public String name;
public int age;
public String sex;
//定义有参构造方法
public Student02(String name, int age, String sex) { //类似于普通带参方法 public void add(int a,int b){}
this.name = name;
this.age = age;
this.sex = sex;
}
//定义无参构造方法
public Student02() {
}
//定义一个两个参数的构造方法(重载)不能和刚才的一样 注意:名字依然要和类名保持一致
public Student02(String name, String sex){
this.name = name;
this.sex = sex;
}
public static void main(String[] args) {
Student02 s2 = new Student02("张翠花", 18, "女");//调用构造器的时候传参,类似于调用普通带参方法 add(1,1);
System.out.println("姓名:"+s2.name+"\n性别:"+s2.sex+"\n年龄:"+s2.age);
System.out.println("---------------------");
//创建一个新的对象
Student02 s3 = new Student02("石榴姐", "女");//这里可以用前面三个构造器的任意一个
System.out.println("姓名:"+s3.name+"\n性别:"+s3.sex+"\n年龄:"+s3.age);
//因为这里用的是没有给年龄传值的构造器,所以打印的年龄是初始值0
}
}
结果:
姓名:张翠花
性别:女
年龄:18
---------------------
姓名:石榴姐
性别:女
年龄:0
Java构造器(构造方法/constructor)的更多相关文章
- Java构造器(构造方法)与方法区别
构造器,又称为构造方法.构造器用于构造该类的实例,也就是对象. 格式如下:[修饰符] 类名 (形参列表){//n条语句} 构造方法是一种特殊的方法,与一般的方法区别: 1.构造方法的名字必须与定义 ...
- 构造器 构造方法 constructor
构造器的作用: 1.创建对象. 设计类时,若不显示的声明类的构造器的话,程序会默认提供一个空参的构造器. 一旦显示的定义了构造器,就不再默认提供. 声明类的构造器:权限修饰符 与类同名(形参){} 类 ...
- java Class中得到构造方法Constructor、方法Method、字段Field
常用方法: Constructor类用于描述类中的构造方法: Constructor<T> getConstructor(Class<?>... parameterTypes) ...
- Java 构造器Constructor 继承
Java默认构造方法 构造方法作用:初始化所定义的类的对象和属性. 构造方法没有返回类型. 2 继承中的构造器 子类是不继承父类的构造器(构造方法或者构造函数)的,它只是调用(隐式或显式). 如果父类 ...
- 乐字节Java构造器(构造方法|构造函数)、方法与内存分析
一. 构造器(构造方法|构造函数) 在创建对象时(new),必会调用一个特殊的方法,这个方法是初始化对象信息的为new服务的.这个方法称为“构造器” 使用 new + 构造方法创建一个新的对象. 构造 ...
- java中构造方法和方法super/this超类与子类中初始化顺序
java中构造方法和方法全面解析 我相信大多说人都对构造方法.方法不陌生,而且很了解,但我也相信有很多像我这样的没有一个很好很清晰很全面的认识,今天就把它整理如下,希望能给大家带来点方便与帮助,也希望 ...
- JAVA构造器,重载与重写
1. java构造器 构造器也叫构造方法(constructor), 用于对象初始化. 构造器是一个创建对象时被自动创建的特殊方法,目的是对象的初始化. 构造器 的名称与类的名称一致. JAVA通过n ...
- 浅谈Java构造器
Java构造器 每个类都有构造方法.如果没有显式地为类定义构造方法,Java编译器将会为该类提供一个默认构造方法. 在创建一个对象的时候,至少要调用一个构造方法.构造方法的名称必须与类同名,一个类可以 ...
- Java程序设计之Constructor
插入段代码,下次回忆吧. 先新建一个Person类,代码如下: public class Person { private String name ; private int age; public ...
- java.lang.reflect.Constructor
java.lang.reflect.Constructor 一.Constructor类是什么 Constructor是一个类,位于java.lang.reflect包下. 在Java反射中 Cons ...
随机推荐
- fsLayuiPlugin数据字典使用
概述 数据字典主要解决下拉框数据填充和数据表格转义处理,一个数据字典可以多处使用. 1.多个页面下拉框使用同样的数据,改一个地方需要把所有页面都要修改 2.数据表格转义代替自己手动写templet解析 ...
- vue+express+mysql项目总结(node项目部署阿里云通用)
原文发布于我的个人博客上:原文点这里 前面经历千辛万苦,终于把博客的所有东西都准备好了,现在就只等部署了.下面我介绍下我的部署过程: 一.购买服务器和域名 如果需要域名(不用域名通过ip也可以 ...
- 前端ps中常用的操作
昨天,ui给了个psd图,让写成网页.额,要自己切图.很久之前,操作的还凑乎.但是,好久了,都忘了.所以,打算自己记个笔记,方便以后查看. 首先,打开ps就先来设置一下ps的单位啦点击最上面的一行的编 ...
- 一次 Druid 连接池泄露引发的血案!
最近某个应用程序老是卡,需要重启才能解决问题,导致被各种投诉,排查问题是 Druid 连接池泄露引发的血案.. 异常日志如下: ERROR - com.alibaba.druid.pool.GetCo ...
- 实验二——Linux系统简单文件操作命令
项目 内容 这个作业属于那个课程 这里是链接 作业要求在哪里 这里是链接 学号-姓名 17041506-张政 作业学习目标 学习在Linux系统终端下进行命令行操作,掌握常用命令行操作并能通过命令行操 ...
- optimizing Wi-Fi solution for International School
https://aweisoft.azurewebsites.net/Knowledge/Cisco/OptimizeWiFi/OptimizeWiFi.aspx Connect me on Link ...
- 如何找回微信小程序源码?2020年微信小程序反编译最新教程 小宇子李
前言:在网上看了找回微信小程序源码很多教程,都没法正常使用.微信版本升级后,会遇到各种报错, 以及无法获取到wxss的问题.查阅各种资料,最终解决,于是贴上完整的微信小程序反编译方案与教程. 本文章仅 ...
- 【摩天大楼平地起】基础篇 09 简述N种查找算法
引言 在开始之前首先可以先思考一下假如没有查找算法会是什么情况?所有数据结构都需要全部遍历一遍,每次都一遍又一遍的查,从本质而言查找算法就是为了提高效率. 经过前人一代又一代的努力,目前的查找算法大致 ...
- python中那些让开发事半功倍的模块
1. Map Map会将一个函数映射到一个输入列表的所有元素上 ex: 有一个列表: [1,2,3,4,5,6], 现在要求把列表每个元素乘以10 如果你还不知道Map,那你可能会这样做: list1 ...
- foobox更新日志
2020-1-31, 6.1.5.1a 版(*) 跟进汉化版修正.(*) MusicTag升级到 1.0.4.0.(*) 部分图标改良,其他优化和修正.(+) 丰富网络功能,增加一个搜索源,一个榜单源 ...