网站首页 > 技术教程 正文
作者 | 吴懿罡
出品 | 百数云课(专注互联网知识共享,官方公众号:百数云课)
背景引入
今天给大家讲一讲Java的面向对象基础语法,很简单,10分钟可以快速入门。
构造方法是类的一种特殊方法,用来初始化类的一个新的对象。Java 中的每个类都有一个默认的构造方法,它必须具有和类名相同的名称,而且没有返回类型。构造方法的默认返回类型就是对象类型本身,并且构造方法不能被 static、final、synchronized、abstract 和 native 修饰。
提示:构造方法用于初始化一个新对象,所以用 static 修饰没有意义;构造方法不能被子类继承,所以用 final 和 abstract 修饰没有意义;多个线程不会同时创建内存地址相同的同一个对象,所以用 synchronized 修饰没有必要。
构造方法的语法格式如下:
class class_name
{
public class_name(){} //默认无参构造方法
public ciass_name([paramList]){} //定义构造方法
…
//类主体
}
在一个类中,与类名相同的方法就是构造方法。每个类可以具有多个构造方法,但要求它们各自包含不同的方法参数。
例 1
构造方法主要有无参构造方法和有参构造方法两种,示例如下:
public class MyClass
{
private int m; //定义私有变量
MyClass()
{
//定义无参的构造方法
m=0;
}
MyCiass(int m)
{
//定义有参的构造方法
this.m=m;
}
}
- 该示例定义了两个构造方法,分别是无参构造方法和有参构造方法。在一个类中定义多个具有不同参数的同名方法,这就是方法的重载。这两个构造方法的名称都与类名相同,均为 MyClass。在实例化该类时可以调用不同的构造方法进行初始化。
注意:类的构造方法不是要求必须定义的。如果在类中没有定义任何一个构造方法,则 Java 会自动为该类生成一个默认的构造方法。默认的构造方法不包含任何参数,并且方法体为空。如果类中显式地定义了一个或多个构造方法,则 Java 不再提供默认构造方法。
例 2
- 要在不同的条件下使用不同的初始化行为创建类的对象,这时候就需要在一个类中创建多个构造方法。下面通过一个示例来演示构造方法的使用。
(1) 首先在员工类 Worker 中定义两个构造方法,代码如下:
public class Worker
{
public String name; //姓名
private int age; //年龄
//定义带有一个参数的构造方法
public Worker(String name)
{
this.name=name;
}
//定义带有两个参数的构造方法
public Worker(String name,int age)
{
this.name=name;
this.age=age;
}
public String toString()
{
return"大家好!我是新来的员工,我叫"+name+",今年"+age+"岁。";
}
}
- 在 Worker 类中定义了两个属性,其中 name 属性不可改变。分别定义了带有一个参数和带有两个参数的构造方法,并对其属性进行初始化。最后定义了该类的 toString() 方法,返回一条新进员工的介绍语句。
提示:Object 类具有一个 toString() 方法,该方法是个特殊的方法,创建的每个类都会继承该方法,它返回一个 String 类型的字符串。如果一个类中定义了该方法,则在调用该类对象时,将会自动调用该类对象的 toString() 方法返回一个字符串,然后使用“System.out.println(对象名)”就可以将返回的字符串内容打印出来。
(2) 在 TestWorker 类中创建 main() 方法作为程序的入口处,在 main() 方法中调用不同的构造方法实例化 Worker 对象,并对该对象中的属性进行初始化,代码如下:
public class TestWorker
{
public static void main(String[] args)
{
System.out.println("-----------带有一个参数的构造方法-----------");
//调用带有一个参数的构造方法,Staff类中的sex和age属性值不变
Worker worker1=new Worker("张强");
System.out.println(worker1);
System.out.println("-----------带有两个参数的构造方法------------");
//调用带有两个参数的构造方法,Staff类中的sex属性值不变
Worker worker2=new Worker("李丽",25);
System.out.println(worker2);
}
}
在上述代码中,创建了两个不同的 Worker 对象:一个是姓名为张强的员工对象,一个是姓名为李丽、年龄为 25 的员工对象。对于第一个 Worker 对象 Worker1,并未指定 age 属性值,因此程序会将其值采用默认值 0。对于第二个 Worker 对象 Worker2,分别对其指定了 name 属性值和 age 属性值,因此程序会将传递的参数值重新赋值给 Worker 类中的属性值。
运行 TestWorker 类,输出的结果如下:
-----------带有一个参数的构造方法-----------
大家好!我是新来的员工,我叫张强,今年0岁。
-----------带有两个参数的构造方法------------
大家好!我是新来的员工,我叫李丽,今年25岁。
通过调用带参数的构造方法,在创建对象时,一并完成了对象成员的初始化工作,简化了对象初始化的代码。
总结:
构造方法是方法名与类名相同的特殊方法,在新建对象时调用,可以通过不同的构造方法实现不同方式的对象的初始化。
- 构造方法名称必须与类名相同。
- 构造方法是没有返回类型的,即使是void也不能有,它返回对象的地址,并赋值给引用变量。
- 构造方法不能被继承 ,不能被覆写,不能被直接调用。调用途径有三种:一是通过new关键字,二是在子类的构造方法中通过super调用父类的构造方法,三是通过反射方式获取并使用。
- 类定义时提供了默认的无参构造方法。但是如果显示定义了有参构造方法,则此无参构造方法就会被覆盖;如果依然想拥有,就需要进行显示定义。
- 构造方法可以私有化。外部无法使用私有构造方法创建对象。
在接口中是不能定义构造方法,在抽象类中可以定义。在枚举类中,构造方法是特殊的存在,他可以定义,但不能public修饰,因为它默认是private的,是绝对的单例,不允许外部以创建对象的方式生成枚举对象。
一个类可以有多个参数不同的构造方法,称为构造方法的重载,为了方便阅读,当一个类有多个构造方法时,这些方法应该被放置在一起。同理,类中的其他同名方法也应该遵循这个原则。
单一职责,对于构造方法同样适用,构造方法的使命就是在构造对象时进行传参操作,所有不应该在构造方法中引入业务逻辑。如果一个对象生产中,需要完成初始化上下游对象、分配内存、执行静态方法、赋值句柄等繁重的工作,其中某个步骤出错,导致没有完成对象初始化,再将希望寄托于业务逻辑部分来处理异常就是一件不受控制的事情了。故推荐将初始化业务逻辑放在某个方法中,比如init(),当对象确认完成所有初始化工作之后,再显示调用。
猜你喜欢
- 2024-11-27 清华教授精心制作,Java300集视频(2022版)全新上线
- 2024-11-27 五分钟读懂设计模式之工厂方法模式、抽象工厂模式
- 2024-11-27 计算机等级考试辅导:Java类的基本组成和使用单元辅导文档
- 2024-11-27 Java开发培训课程怎么选?
- 2024-11-27 基于Jsp+Servlet+Mysql实现的javaweb机房课表管理系统
- 2024-11-27 Java在线学习课程内容有哪些
- 2024-11-27 学习Java需要掌握哪些技能?
- 2024-11-27 Java需要学些什么知识?
- 2024-11-27 Java培训班该怎么选择 跟着千锋老师了解下
- 2024-11-27 这才是Java基础知识点的总结
你 发表评论:
欢迎- 最近发表
-
- Win11学院:如何在Windows 11上使用WSL安装Ubuntu
- linux移植(Linux移植freemodbus)
- 独家解读:Win10预览版9879为何无法识别硬盘
- 基于Linux系统的本地Yum源搭建与配置(ISO方式、RPM方式)
- Docker镜像瘦身(docker 减小镜像大小)
- 在linux上安装ollama(linux安装locale)
- 渗透测试系统Kali推出Docker镜像(kali linux渗透测试技术详解pdf)
- Linux环境中部署Harbor私有镜像仓库
- linux之间传文件命令之Rsync傻瓜式教程
- 解决ollama在linux中安装或升级时,通过国内镜像缩短安装时长
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)