Java 从入门到进阶之路(八)

在之前的文章我们介绍了一下 Java 中的重载,接下来我们看一下 Java 中的构造方法。

我们之前说过,我们在定义一个变量的时候,java 会为我们提供一个默认的值,字符串为 null,数字为 0。如下:

 1 public class HelloWorld {
 2     public static void main(String[] args) {
 3         User e = new User(); // 创建一个 User 对象
 4         e.print(); // 姓名:null 年龄:0 性别:null
 5     }
 6 }
 7
 8 class User {
 9     String name;
10     int age;
11     String gender;
12
13     void print() {
14         System.out.print("姓名:" + name + "年龄:" + age + "性别:" + gender);
15     }
16 }

但是我们往往在使用的时候并不是想用默认的值,而是自己去定义我们想要的值,如下:

 1 public class HelloWorld {
 2     public static void main(String[] args) {
 3         // 创建一个 zs 的 User 对象
 4         User zs = new User();
 5         zs.name = "张三";
 6         zs.age = 20;
 7         zs.gender = "男";
 8         zs.print(); // 姓名:张三 年龄:20 性别:男
 9
10         // 创建一个 ls 的 User 对象
11         User ls = new User();
12         ls.name = "李四";
13         ls.age = 22;
14         ls.gender = "女";
15         ls.print(); // 姓名:李四 年龄:22 性别:女
16     }
17 }
18
19 class User {
20     String name;
21     int age;
22     String gender;
23
24     void print() {
25         System.out.print("姓名:" + name + "年龄:" + age + "性别:" + gender);
26     }
27 }

在上面的代码中,我们每次实例化一个 User 对象并赋值时,都要重复写很多代码,造成代码冗余,我们可以将初始化参数也一并写到队形的方法内来解决,如下:

 1 public class HelloWorld {
 2     public static void main(String[] args) {
 3         // 创建一个 zs 的 User 对象
 4         User zs = new User();
 5         zs.userInfo("张三", 20, "男");
 6         zs.print(); // 姓名:张三 年龄:20 性别:男
 7
 8         // 创建一个 ls 的 User 对象
 9         User ls = new User();
10         ls.userInfo("李四", 22, "女");
11         ls.print(); // 姓名:李四 年龄:22 性别:女
12     }
13 }
14
15 class User {
16     String name;
17     int age;
18     String gender;
19
20     void userInfo(String name, int age, String gender) {
21         this.name = name;
22         this.age = age;
23         this.gender = gender;
24     }
25
26     void print() {
27         System.out.print("姓名:" + name + "年龄:" + age + "性别:" + gender);
28     }
29 }

在上面的代码中,我们定义了一个 userInfo( ) 的方法,通过赋值的形式将参数初始化,其中 this.name = name 中的 this 关键字表示的是 调用改方法的那个对象,即 User,我们可以将其浅显地理解为 zs.name = name;或者 ls.name = name;这样我们在创建 User 实例后通过调用 userInfo( ) 方法来赋值。

通过以上方法我们就可以有效地减少我们在做初始化参数值的时候的代码冗余。

Java 其实已经为我们提供了更为简单的方法:构造方法。如下

 1 public class HelloWorld {
 2     public static void main(String[] args) {
 3         // 创建一个 zs 的 User 对象
 4         User zs = new User("张三", 20, "男");
 5         zs.print(); // 姓名:张三 年龄:20 性别:男
 6
 7         // 创建一个 ls 的 User 对象
 8         User ls = new User("李四", 22, "女");
 9         ls.print(); // 姓名:李四 年龄:22 性别:女
10     }
11 }
12
13 class User {
14     String name;
15     int age;
16     String gender;
17
18     User(String name, int age, String gender) {
19         this.name = name;
20         this.age = age;
21         this.gender = gender;
22     }
23
24     void print() {
25         System.out.print("姓名:" + name + "年龄:" + age + "性别:" + gender);
26     }
27 }

我们将 void userInfo() 方法改为了和类名 User 一样的 User( ),然后在初始化实例的时候直接将参数传入,使代码更加简洁。

其实我们之前一直写的 User zs = new User( ) 就是一个无参数构造方法。

在有的时候,我们常常会根据也无需要来传递自己想要的参数,类似于之前提到的窗口支付问题,那就需要用到重载,构造方法也是可以重载的,如下:

 1 public class HelloWorld {
 2     public static void main(String[] args) {
 3         // 创建一个 zs 的 User 对象
 4         User zs = new User();
 5         zs.print(); // 姓名:null 年龄:0 性别:null
 6
 7         // 创建一个 ls 的 User 对象
 8         User ls = new User("李四", 22, "女");
 9         ls.print(); // 姓名:李四 年龄:22 性别:女
10     }
11 }
12
13 class User {
14     String name;
15     int age;
16     String gender;
17
18     User(){
19
20     }
21
22     User(String name, int age, String gender) {
23         this.name = name;
24         this.age = age;
25         this.gender = gender;
26     }
27
28     void print() {
29         System.out.print("姓名:" + name + "年龄:" + age + "性别:" + gender);
30     }
31 }

我们对构造方法的 User( ) 进行了重载,这样就可以根据需求来初始化自己想要的参数了。

构造方法的定义与约束:

1、常常用于给成员变量赋初始值

2、与类同名,没有返回类型

3、在创建(new)对象时被自动调用

4、若自己不写构造方法,则编译器默认提供无参构造,若自己写了构造,则不再默认提供。

5、构造方法可以重载

原文地址:https://www.cnblogs.com/weijiutao/p/11097413.html

时间: 2024-10-01 03:55:56

Java 从入门到进阶之路(八)的相关文章

Java 从入门到进阶之路(十八)

在之前的文章我们介绍了一下 Java 中的正则表达式,本章我们来看一下 Java 中的 Object. 在日常生活中,任何事物我们都可以看做是一个对象,在编程中是同样的道理,在 Java 编程中其实更突出,因为 Java 就是一门面向对象的编程语言. 我们先来看下面的代码: 1 public class Main { 2 public static void main(String[] args) { 3 Person person = new Person(); 4 // person.age

Java 从入门到进阶之路(十九)

在之前的文章我们介绍了一下 Java 中的Object,本章我们来看一下 Java 中的包装类. 在 Java 中有八个基本类型:byte,short,int,long,float,double,char,boolean,是以值的形式存在的,所以他们并没有面向对象的特征,自然也不继承自 Object,所以不能使用多台,用 Object 的角度去接受基本类型. 假设现在我们有一个计算 1+1 的值,代码如下: 1 public class Main { 2 public static void m

Java 从入门到进阶之路(三)

之前的文章我们介绍了 Java 中的变量和基本数据类型,本章我们来看一下 Java 的运算符和表达式. 计算机的最基本用途之一就是执行数学运算,作为一门计算机语言,Java也提供了一套丰富的运算符来操纵变量.我们可以把运算符分成以下几组: 算术运算符 关系运算符 位运算符 逻辑运算符 赋值运算符 其他运算符 算术运算符 算术运算符用在数学表达式中,它们的作用和在数学中的作用一样.下表列出了所有的算术运算符. 表格中的实例假设整数变量A的值为10,变量B的值为20: 操作符 描述 例子 + 加法

Java 从入门到进阶之路(四)

之前的文章我们介绍了 Java 的运算符和表达式,本章我们来看一下 Java 的循环结构. 循环是程序设计语言中反复执行某些代码的一种计算机处理过程,是一组相同或相似语句被有规律的重复性进行. 循环的要素: - 循环变量的初始化 - 循环条件(以循环变量为基础) - 循环变量的改变(向着循环的结束进行改变) Java中有三种主要的循环结构: while 循环 do…while 循环 for 循环 while 循环 while是最基本的循环,它的结构为: while(布尔表达式){ //循环内容

Java 从入门到进阶之路(十一)

之前的文章我们介绍了一下 Java 中的继承,接下来我们继续看一下 Java 中的继承. 在有些时候,我们通过类继承的方式可以获取父类的方法,但是有些时候父类为我们提供的方法并不完全符合我们的需求,这时候我们就要对类方法进行重写,如下: 1 public class HelloWorld { 2 public static void main(String[] args) { 3 Student student = new Student(); 4 student.name = "张三"

Java 从入门到进阶之路(十四)

在之前的文章我们介绍了一下 Java 中的抽象类和抽象方法,本章我们来看一下 Java 中的接口. 在日常生活中,我们会接触到很多类似接口的问题,比如 USB 接口,我们在电脑上插鼠标,键盘,U盘的时候不用去考虑它到底能不能插进去,只要型号对了就肯定能插进去,接口就相当于一个标准,你要想把鼠标插到我的电脑上,在出厂时就必须遵守该电脑定义的接口标准. 在 Java 中同样有接口的概念,当然也会有接口的定义标准. 1.有 interface 定义: 2.只能包含常量和抽象方法: 3.接口不能被实例化

Java 从入门到进阶之路(十五)

在之前的文章我们介绍了一下 Java 中的接口,本章我们来看一下 Java 中类的多态. 在日常生活中,很多意思并不是我们想要的意思,如下: 1.领导:“你这是什么意思?” 小明:“没什么意思,意思意思.” 领导:“你这就不够意思了.” 小明:“小意思,小意思.” 领导:“你这人真有意思.” 小明:“其实也没有别的意思.” 领导:“那我就不好意思了.” 小明:“是我不好意思.” 2.电视剧<快把我哥带走> 妹:“你根本就不懂我.” 哥:“你不说我怎么懂你啊,” 妹:“真的懂不需要说出来,” 哥

成为java高手一条进阶之路

本文将告诉你学习Java需要达到的25个目标,希望能够对你的学习及找工作有所帮助.对比一下自己,你已经掌握了这25条中的多少 条了呢? 1.你需要精通面向对象分析与设计(OOA/OOD).涉及模式(GOF,J2EEDP)以及综合模式.你应该了解UML,尤其是 class,object,interaction以及statediagrams. 2.你需要学习Java语言的基础知识以及它的核心类库 (collections,serialization,streams,networking,?multi

Python 爬虫从入门到进阶之路(十四)

之前的文章我们已经可以根据 re 模块,Xpath 模块和 BeautifulSoup4 模块来爬取网站上我们想要的数据并且存储在本地,但是我们并没有对存储数据的格式有要求,本章我们就来看数据的存储格式 JSON 及 Python 中的 json 模块. JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.适用于进行数据交互的场景,比如网站前台与后台之间的数据交互. JSON和XML的比较