从零学Java(31)之构造方法

Posted 编程界小明哥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从零学Java(31)之构造方法相关的知识,希望对你有一定的参考价值。

作者简介

作者名:编程界明世隐
简介:CSDN博客专家,从事软件开发多年,精通Java、javascript,博主也是从零开始一步步把学习成长、深知学习和积累的重要性,喜欢跟广大ADC一起打野升级,欢迎您关注,期待与您一起学习、成长、起飞!

导航

✪ 从零学Java系列目录索引
◄上一篇【30】递归
►下一篇【32】参数传递

引言

♀ 小AD:明哥明哥,几天不见你都王者10几星了,这是要冲荣耀的节奏吗?
♂ 明世隐:那必须的,我最近贼猛了。
♀ 小AD:还得是我明哥呀!
♂ 明世隐:😄😄
♀ 小AD:我星耀都还没上。。。,你不觉得脸上没光吗?
♂ 明世隐:跟我有什么关系,你在砖石多挣扎几次,指不定剑指荣耀呢!
♀ 小AD:荣耀个鬼哦,我上来星耀再说。
♂ 明世隐:我说的是荣耀黄金😂😂😂
♀ 小AD:你这个人,太坏了,我用脚趾打,也不至于吧🙈🙈
♂ 明世隐:你知道你为啥上不去吗?
♀ 小AD:不就是操作不够、意识不行?我知道的。
♂ 明世隐:对,这是一方面,还有一方面你出装也不是很对。
♀ 小AD:怎么就不对了,我都是按推荐出装选的,选完英雄后就有个推荐出装,比如这个

♂ 明世隐:这个装备没毛病,但是要看人的要,意识不行,操作不行就不能光出这个装备,输出是很高,但没有容错率,分分钟暴毙。
♀ 小AD:我知道我操作不行,那大家都这样出呀!
♂ 明世隐:所以你换个思路,多出些肉装,打野一套秒不了你,接下来你就可以反打了。
♀ 小AD:那作为一个射手,出肉装有什么用,我是要打输出的呢。
♂ 明世隐:话是没错,可你一秒就蒸发了,还怎么打输出呢,生存下来了,才有机会输出。
♀ 小AD:好像有那么一丢丢道理。
♂ 明世隐:不是一丢丢,是很有道理,我最近就用肉凯上了一波大分,你以为我的星星是天上掉下来的。
♀ 小AD:肉凯?我没听错吧,这英雄不是一刀一个小鲁班吗?峡谷凯爹谁不知道。
♂ 明世隐:出肉也就3、5刀一个小鲁班,贼能抗,经常一打3,如果发育好的话甚至1打5。
♀ 小AD:出肉你有伤害吗?
♂ 明世隐:你去看了就知道了,看我战绩去,伤害也是非常爆表(靠大招和装备的被动打伤害),容错率比暴击凯高的多,正好符合我的性格冲锋陷阵!
♀ 小AD:哦,出装我看看,虽然我不玩。
♂ 明世隐:好

♀ 小AD:那我鲁班怎么出呢?
♂ 明世隐:看这个,就靠末世打输出

♀ 小AD:我试试,那你什么时候带我上分
♂ 明世隐:就今天啊,择日不如撞日!
♀ 小AD:那老规矩?
♂ 明世隐:那刚好今天学习构造方法,也就是我们类的出装列表
♀ 小AD:什么鬼,明哥,类也有出装列表?你着魔了吧!
♂ 明世隐:对啊,定义不同的构造方法,就会得到不同的结果,跟你选择推荐出装列表一样的。
♀ 小AD:我虽然不太明白,但是好像很有道理的样子!
♂ 明世隐:先研究一下,你就明白了。

构造方法描述

  1. 构造方法又被称为构造函数、构造器、Constructor
  2. 构造方法的语法:
		[修饰符] 构造方法名(形式参数列表)
			构造方法内容;
		
  1. 普通方法的语法:
		[修饰符] 返回值类型 方法名(形式参数列表)
			方法内容;
		
  1. 构造方法的返回值无需指定,如果指定则就是普通的方法了。
  2. 构造方法不需要指定构造名称,因为名字必须和类名一致。

构造方法和方法的区别:

构造方法要与类名相同,无返回类型,在类初始化的时候调用。
方法最好与类名不同,对象调用,静态方法可用类名.方法().
构造器和方法在下面三个方面区别:修饰符,返回值,命名。

  1. 和方法一样,构造器可以有任何访问的修饰: public, protected, private或者没有修饰(通常被package 和 friendly调用). 不同于方法的是,构造器不能有以下非访问性质的修饰: abstract, final, native, static, 或者 synchronized。
  2. 返回类型也是非常重要的。方法能返回任何类型的值或者无返回值(void),构造器没有返回值,也不需要void。
  3. 两者的命名。构造器使用和类相同的名字,而方法则不同。按照习惯,方法通常用小写字母开始,而构造器通常用大写字母开始。构造器通常是一个名词,因为它和类名相同;而方法通常更接近动词,因为它说明一个操作。

创建一个Java实例对象

♂ 明世隐:之前也跟明哥学了30节课了,现在来考考你。
♀ 小AD:放马过来吧
♂ 明世隐:创建一个实例对象,代码你会不?
♀ 小AD:我会啊,很简单
♂ 明世隐:写我看看
♀ 小AD:马上

public class Student 
    private String name;
    private String age;
    private String no;

public class Test 
    public static void main(String[] args) 
        Student s1 = new Student();//创建实例对象
    

♀ 小AD:明哥没错吧。
♂ 明世隐:做的很好,创建一个实例对象直接new就完事了。
♀ 小AD:new Student()为什么要这样写,我却不知道。
♂ 明世隐:因为这是构造方法的调用,new 构造方法()就是创建实例对象。
♀ 小AD:那我在Student没有创建构造方法的呀!
♂ 明世隐:因为默认会有一个没有参数的构造方法,就像这样,你不写,默认就会有。

public class Student 

    public Student()
        
    
    
    private String name;
    private String age;
    private String no;

♀ 小AD:也就是默认会创建这么一个无参的构造方法,是这个意思吧。
♂ 明世隐:对,这是java设计好的,否则每创建一个类就要手动创建构造很麻烦,默认有一个。
♀ 小AD:那我要是手动创建了一个有参数的构造呢。
♂ 明世隐:那默认的构造就没有了。
♀ 小AD:我不信
♂ 明世隐:你不信也行,我们事实说话,凡是讲证据。
♀ 小AD:行
♂ 明世隐:我们来试试

手动创建构造方法

创建有一个int 参数的构造方法

public class Student 

    public Student(int a) 
        System.out.println("这是一个构造方法,有个a参数");
    

    private String name;
    private String age;
    private String no;

♀ 小AD:报错了。。。
♂ 明世隐:也就是手动创建了构造,则默认的就无效了。
♀ 小AD:嗯,我看到了,那我就想用无参的那个,我又想自己定义的也有呢,怎么办?
♂ 明世隐:那也很简单,你自己再创建一个无参的就行
♀ 小AD:好我试试

public class Student 

    public Student() 
        System.out.println("这是一个构造方法,没有参数");
    
    public Student(int a) 
        System.out.println("这是一个构造方法,有个a参数");
    

    private String name;
    private String age;
    private String no;

几个案例

案例1

创建一个默认的构造方法

/*
 * 学生类
 */
public class Student 

	private String name;// 名字
	private int age;// 年龄
	private char sex;// 性别

	public String getName() 
		return name;
	

	public void setName(String name) 
		this.name = name;
	
	
	public int getAge() 
		return age;
	

	public void setAge(int age) 
		this.age = age;
	

	public char getSex() 
		return sex;
	

	public void setSex(char sex) 
		this.sex = sex;
	

//main方法
public static void main(String[] args) 
	Student student1  = new Student();
	student1.setName("张三");
	student1.setAge(20);
	student1.setSex('男');
	
	System.out.println("姓名:" + student1.getName() + "\\n性别:" + student1.getSex() + "\\n年龄:" + student1.getAge());

♀ 小AD:明哥这个就是刚才的那个无参构造的调用吧。
♂ 明世隐:是的,可以看到在实例化Student的时候,直接用new Student() 来创建了,这个就是默认的构造器,只要建了类就会默认自带的

案例2

修改默认的构造器,自己编写。
在Student类中加入以下代码

public Student() 
	System.out.println("调用自己定义的无参构造器");

运行一下这个类:

调用自己定义的无参构造器
姓名:张三
性别:男
年龄:20

当然可以有多个构造器的存在,需要哪个就调用哪个,但是因为名字都是和类名一样的,所以构造器是通过参数来区分的。

案例3

加入多个参数的构造器

public Student(String name,int age,char sex) 
		System.out.println("调用自己定义的有参构造器");
		
		this.name=name;
		this.age=age;
		this.sex=sex;
	

修改一下main方法

//main方法
public static void main(String[] args) 
	/*Student student1  = new Student();
	student1.setName("张三");
	student1.setAge(20);
	student1.setSex('男');*/
	
	Student student1  = new Student("王小妹",18,'女');
	
	System.out.println("姓名:" + student1.getName() + "\\n性别:" + student1.getSex() + "\\n年龄:" + student1.getAge());

运行结果:

调用自己定义的有参构造器
姓名:王小妹
性别:女
年龄:18

案例4

多个构造可以共存,并且分别调用的,看自己的需要

/*
 * 学生类
 */
public class Student 

	public Student() 
		System.out.println("调用自己定义的无参构造器");
	
	
	public Student(String name,int age,char sex) 
		System.out.println("调用自己定义的有参构造器");
		
		this.name=name;
		this.age=age;
		this.sex=sex;
	
	
	private String name;// 名字
	private int age;// 年龄
	private char sex;// 性别

	public String getName() 
		return name;
	

	public void setName(String name) 
		this.name = name;
	
	
	public int getAge() 
		return age;
	

	public void setAge(int age) 
		this.age = age;
	

	public char getSex() 
		return sex;
	

	public void setSex(char sex) 
		this.sex = sex;
	

//main方法
public static void main(String[] args) 
	Student student1  = new Student();
	student1.setName("张三");
	student1.setAge(20);
	student1.setSex('男');
	System.out.println("姓名:" + student1.getName() + "\\n性别:" + student1.getSex() + "\\n年龄:" + student1.getAge());
	
	Student student2  = new Student("王小妹",18,'女');
	
	System.out.println("姓名:" + student2.getName() + "\\n性别:" + student2.getSex() + "\\n年龄:" + student2.getAge());



运行结果:

调用自己定义的无参构造器
姓名:张三
性别:男
年龄:20
调用自己定义的有参构造器
姓名:王小妹
性别:女
年龄:18

小AD写实例

创建一个Zhuangbei类

public class Zhuangbei 
    public Zhuangbei() 
        System.out.println("装备1:攻速鞋+末世+无尽+电刀+破晓+苍穹");
    

    public Zhuangbei(int a) 
        System.out.println("装备2:电刀+韧性鞋+无尽+末世+破晓+复活甲");
    

    public Zhuangbei(String str) 
        System.out.println("装备3:忍鞋+末世+反甲+暴烈+魔女斗篷+苍穹");
    


创建测试类

public class Test 
    public static void main(String[] args) 
        Zhuangbei z1 = new Zhuangbei();
        Zhuangbei z2 = new Zhuangbei(1);
        Zhuangbei z3 = new Zhuangbei("1");
    

运行结果

装备1:攻速鞋+末世+无尽+电刀+破晓+苍穹
装备2:电刀+韧性鞋+无尽+末世+破晓+复活甲
装备3:忍鞋+末世+反甲+暴烈+魔女斗篷+苍穹

♀ 小AD:明哥,我这实例可以吧,我想用装备3,我就只要new Zhuangbei(“1”) 就可以。
♂ 明世隐:实例写的不错,有一套,但是还是可以优化的
♀ 小AD:明哥骗人,总共就没几行代码,还在吗优化
♂ 明世隐:是真的可以,我改给你看看。

明哥优化实例

优化装备类,只需定义一个构造方法

public class Zhuangbei 
    /*public Zhuangbei() 
        System.out.println("装备1:攻速鞋+末世+无尽+电刀+破晓+苍穹");
    */

    public Zhuangbei(int a) 
        if (a == 1) 
            System.out.println("装备1:攻速鞋+末世+无尽+电刀+破晓+苍穹");
         else if (a == 2) 
            System.out.println("装备2:电刀+韧性鞋+无尽+末世+破晓+复活甲");
         else 
            System.out.println("装备3:忍鞋+末世+反甲+暴烈+魔女斗篷+苍穹");
        

    

    /*public Zhuangbei(String str) 
        System.out.println("装备3:忍鞋+末世+反甲+暴烈+魔女斗篷+苍穹");
    */



修改测试类:

public class Test 
    public static void main(String[] args) 
        /*Zhuangbei z1 = new Zhuangbei();
        Zhuangbei z2 = new Zhuangbei(1);
        Zhuangbei z3 = new Zhuangbei("1");*/

        Zhuangbei z1 = new Zhuangbei(1);
        Zhuangbei z2 = new Zhuangbei(2);
        Zhuangbei z3 = new Zhuangbei(3);

    

运行结果:

装备1:攻速鞋+末世+无尽+电刀+破晓+苍穹
装备2:电刀+韧性鞋+无尽+末世+破晓+复活甲
装备3:忍鞋+末世+反甲+暴烈+魔女斗篷+苍穹

♀ 小AD:明哥,运行结果是一样的
♂ 明世隐:对啊,结果都不一样了,那能叫优化吗?
♀ 小AD:调用的时候,只要传入不同的数字即可,不用分调用无参、int参数、还是String参数了,比我的优化的多。果然是我大明哥👍👍
♂ 明世隐:其实也没什么,你多练习,自然以后你就知道怎么写会更好了。
♀ 小AD:明哥威武,我对明哥的敬仰犹如滔滔江水连绵不绝。
♂ 明世隐:下一句是不是又如黄河泛滥一发不可收拾?
♀ 小AD:不对不对,下一句是带我上分一飞冲天!
♂ 明世隐:还得是你😂😂,上线
♀ 小AD:gogogo!

小结

这节学习了“ 构造方法 ”,希望能对大家有所帮助,请各位小伙伴帮忙 【点赞】+【收藏】+ 【评论区打卡】, 如果有兴趣跟小明哥一起学习Java的,【关注一波】不迷路哦。

评论区打卡一波让我知道你,明哥会持续关注你的学习进度哦!

导航

✪ 从零学Java系列目录索引
◄上一篇【30】递归
►下一篇【32】参数传递

热门专栏推荐

【1】Java小游戏(俄罗斯方块、飞机大战、植物大战僵尸等)
【2】JavaWeb项目实战(图书管理、在线考试、宿舍管理等)
【3】JavaScript精彩实例(飞机大战、贪吃蛇、验证码等)
【4】Java小白入门200例
【5】从零学Java、趣学Java
【6】Idea从零到精通

以上是关于从零学Java(31)之构造方法的主要内容,如果未能解决你的问题,请参考以下文章

从零学Java(31)之构造方法

从零学Java(30)之递归

从零学Java(29)之方法重载

从零学Java(29)之方法重载

从零学Java(10)之方法详解,喷打野你真的没我6!

从零学Java(28)之数组的定义与使用