作者名:编程界明世隐
简介: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:我虽然不太明白,但是好像很有道理的样子!
♂ 明世隐:先研究一下,你就明白了。
[修饰符] 构造方法名(形式参数列表){
构造方法内容;
}
[修饰符] 返回值类型 方法名(形式参数列表){
方法内容;
}
构造方法要与类名相同,无返回类型,在类初始化的时候调用。
方法最好与类名不同,对象调用,静态方法可用类名.方法().
构造器和方法在下面三个方面区别:修饰符,返回值,命名。
- 和方法一样,构造器可以有任何访问的修饰: public, protected, private或者没有修饰(通常被package 和 friendly调用). 不同于方法的是,构造器不能有以下非访问性质的修饰: abstract, final, native, static, 或者 synchronized。
- 返回类型也是非常重要的。方法能返回任何类型的值或者无返回值(void),构造器没有返回值,也不需要void。
- 两者的命名。构造器使用和类相同的名字,而方法则不同。按照习惯,方法通常用小写字母开始,而构造器通常用大写字母开始。构造器通常是一个名词,因为它和类名相同;而方法通常更接近动词,因为它说明一个操作。
♂ 明世隐:之前也跟明哥学了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;
}
创建一个默认的构造方法
/*
* 学生类
*/
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() 来创建了,这个就是默认的构造器,只要建了类就会默认自带的
修改默认的构造器,自己编写。
在Student类中加入以下代码
public Student() {
System.out.println("调用自己定义的无参构造器");
}
运行一下这个类:
调用自己定义的无参构造器
姓名:张三
性别:男
年龄:20
当然可以有多个构造器的存在,需要哪个就调用哪个,但是因为名字都是和类名一样的,所以构造器是通过参数来区分的。
加入多个参数的构造器
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
多个构造可以共存,并且分别调用的,看自己的需要
/*
* 学生类
*/
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
创建一个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从零到精通