Java 教程
- Java - 首页
- Java - 概述
- Java - 历史
- Java - 特性
- Java 与 C++
- JVM - Java 虚拟机
- Java - JDK 与 JRE 与 JVM
- Java - Hello World 程序
- Java - 环境搭建
- Java - 基本语法
- Java - 变量类型
- Java - 数据类型
- Java - 类型转换
- Java - Unicode 系统
- Java - 基本运算符
- Java - 注释
- Java - 用户输入
- Java - 日期和时间
Java 控制语句
- Java - 循环控制
- Java - 决策制定
- Java - If-else
- Java - Switch
- Java - For 循环
- Java - For-Each 循环
- Java - While 循环
- Java - do-while 循环
- Java - Break
- Java - Continue
面向对象编程
- Java - OOPs 概念
- Java - 对象和类
- Java - 类属性
- Java - 类方法
- Java - 方法
- Java - 变量作用域
- Java - 构造方法
- Java - 访问修饰符
- Java - 继承
- Java - 聚合
- Java - 多态
- Java - 重写
- Java - 方法重载
- Java - 动态绑定
- Java - 静态绑定
- Java - 实例初始化块
- Java - 抽象
- Java - 封装
- Java - 接口
- Java - 包
- Java - 内部类
- Java - 静态类
- Java - 匿名类
- Java - 单例类
- Java - 包装类
- Java - 枚举
- Java - 枚举构造方法
- Java - 枚举字符串
Java 内置类
Java 文件处理
Java 错误和异常
- Java - 异常
- Java - try-catch 块
- Java - try-with-resources
- Java - 多重 catch 块
- Java - 嵌套 try 块
- Java - Finally 块
- Java - throw 异常
- Java - 异常传播
- Java - 内置异常
- Java - 自定义异常
Java 多线程
- Java - 多线程
- Java - 线程生命周期
- Java - 创建线程
- Java - 启动线程
- Java - 线程连接
- Java - 线程命名
- Java - 线程调度器
- Java - 线程池
- Java - 主线程
- Java - 线程优先级
- Java - 守护线程
- Java - 线程组
- Java - 关闭钩子
Java 同步
Java 网络编程
- Java - 网络编程
- Java - 套接字编程
- Java - URL 处理
- Java - URL 类
- Java - URLConnection 类
- Java - HttpURLConnection 类
- Java - Socket 类
- Java - 泛型
Java 集合
Java 接口
Java 数据结构
Java 集合算法
高级 Java
- Java - 命令行参数
- Java - Lambda 表达式
- Java - 发送邮件
- Java - Applet 基础
- Java - Javadoc 注释
- Java - 自动装箱和拆箱
- Java - 文件不匹配方法
- Java - REPL (JShell)
- Java - 多版本 Jar 文件
- Java - 私有接口方法
- Java - 内部类菱形运算符
- Java - 多分辨率图像 API
- Java - 集合工厂方法
- Java - 模块系统
- Java - Nashorn JavaScript
- Java - Optional 类
- Java - 方法引用
- Java - 函数式接口
- Java - 默认方法
- Java - Base64 编码解码
- Java - Switch 表达式
- Java - Teeing 收集器
- Java - 微基准测试
- Java - 文本块
- Java - 动态 CDS 档案
- Java - Z 垃圾收集器 (ZGC)
- Java - 空指针异常
- Java - 打包工具
- Java - 密封类
- Java - 记录类
- Java - 隐藏类
- Java - 模式匹配
- Java - 简洁数字格式化
- Java - 垃圾回收
- Java - JIT 编译器
Java 杂项
- Java - 递归
- Java - 正则表达式
- Java - 序列化
- Java - 字符串
- Java - 进程 API 改进
- Java - 流 API 改进
- Java - 增强的 @Deprecated 注解
- Java - CompletableFuture API 改进
- Java - 流
- Java - 日期时间 API
- Java 8 - 新特性
- Java 9 - 新特性
- Java 10 - 新特性
- Java 11 - 新特性
- Java 12 - 新特性
- Java 13 - 新特性
- Java 14 - 新特性
- Java 15 - 新特性
- Java 16 - 新特性
Java API 和框架
Java 类参考
- Java - Scanner
- Java - 数组
- Java - 字符串
- Java - Date
- Java - ArrayList
- Java - Vector
- Java - Stack
- Java - PriorityQueue
- Java - LinkedList
- Java - ArrayDeque
- Java - HashMap
- Java - LinkedHashMap
- Java - WeakHashMap
- Java - EnumMap
- Java - TreeMap
- Java - IdentityHashMap
- Java - HashSet
- Java - EnumSet
- Java - LinkedHashSet
- Java - TreeSet
- Java - BitSet
- Java - Dictionary
- Java - Hashtable
- Java - Properties
- Java - Collection
- Java - Array
Java 有用资源
Java - 构造方法
Java 构造方法
Java 构造方法是用于在创建对象时初始化该对象的特殊类型的方法。它与类名相同,并且在语法上类似于方法。但是,构造方法没有显式的返回类型。
通常,您将使用构造方法为类定义的实例变量提供初始值,或执行创建完整形成的对象所需的任何其他启动过程。
所有类都具有构造方法,无论您是否定义了一个,因为 Java 自动提供一个默认构造方法,该构造方法将所有成员变量初始化为零。但是,一旦您定义了自己的构造方法,便不再使用默认构造方法。
创建 Java 构造方法的规则
在创建 Java 构造方法时,必须遵循以下规则
- 构造方法的名称必须与类名相同。
- Java 构造方法没有返回类型。甚至不要使用 void 作为返回类型。
- 同一个类中可以有多个构造方法,这个概念称为构造方法重载。
- 可以使用访问修饰符与构造方法一起使用,如果您想更改构造方法的可见性/可访问性,请使用它们。
- Java 提供了一个在对象创建期间调用的默认构造方法。如果您创建任何类型的构造方法,则不会调用默认构造方法(由 Java 提供)。
创建 Java 构造方法
要在 Java 中创建构造方法,只需编写构造方法的名称(与类名相同),后跟括号,然后在花括号 ({}) 内编写构造方法的主体。
语法
以下是构造方法的语法:
class ClassName {
ClassName() {
}
}
创建 Java 构造方法的示例
以下示例创建了一个简单的构造方法,它将打印“Hello world”。
public class Main {
// Creating a constructor
Main() {
System.out.println("Hello, World!");
}
public static void main(String[] args) {
System.out.println("The main() method.");
// Creating a class's object
// that will invoke the constructor
Main obj_x = new Main();
}
}
此程序将打印
The main() method. Hello, World!
Java 构造方法的类型
Java 中有三种不同的构造方法类型,我们已将其列出如下
- 默认构造方法
- 无参构造方法
- 带参构造方法
1. 默认构造方法
如果您没有在类中创建任何构造方法,则 Java 会提供一个默认构造方法来初始化对象。
示例:默认构造方法(没有构造方法的类)
在此示例中,我们没有定义任何构造方法。默认构造方法用于初始化对象。
public class Main {
int num1;
int num2;
public static void main(String[] args) {
// We didn't created any structure
// a default constructor will invoke here
Main obj_x = new Main();
// Printing the values
System.out.println("num1 : " + obj_x.num1);
System.out.println("num2 : " + obj_x.num2);
}
}
输出
num1 : 0 num2 : 0
2. 无参(无参数)构造方法
顾名思义,无参数构造方法不接受任何参数。通过使用无参构造方法,您可以初始化类数据成员并执行您希望在对象创建时执行的各种活动。
示例:无参构造方法
此示例创建了一个无参构造方法。
public class Main {
int num1;
int num2;
// Creating no-args constructor
Main() {
num1 = -1;
num2 = -1;
}
public static void main(String[] args) {
// no-args constructor will invoke
Main obj_x = new Main();
// Printing the values
System.out.println("num1 : " + obj_x.num1);
System.out.println("num2 : " + obj_x.num2);
}
}
输出
num1 : -1 num2 : -1
3. 带参构造方法
带有一个或多个参数的构造方法称为带参构造方法。
大多数情况下,您将需要一个接受一个或多个参数的构造方法。参数以与添加到方法相同的方式添加到构造方法中,只需在构造方法名称后的括号内声明它们。
示例 1:带参构造方法
此示例创建了一个带参构造方法。
public class Main {
int num1;
int num2;
// Creating parameterized constructor
Main(int a, int b) {
num1 = a;
num2 = b;
}
public static void main(String[] args) {
// Creating two objects by passing the values
// to initialize the attributes.
// parameterized constructor will invoke
Main obj_x = new Main(10, 20);
Main obj_y = new Main(100, 200);
// Printing the objects values
System.out.println("obj_x");
System.out.println("num1 : " + obj_x.num1);
System.out.println("num2 : " + obj_x.num2);
System.out.println("obj_y");
System.out.println("num1 : " + obj_y.num1);
System.out.println("num2 : " + obj_y.num2);
}
}
输出
obj_x num1 : 10 num2 : 20 obj_y num1 : 100 num2 : 200
示例 2:带参构造方法
这是一个使用构造方法的简单示例:
// A simple constructor.
class MyClass {
int x;
// Following is the constructor
MyClass(int i ) {
x = i;
}
}
您可以按如下方式调用构造方法来初始化对象:
public class ConsDemo {
public static void main(String args[]) {
MyClass t1 = new MyClass( 10 );
MyClass t2 = new MyClass( 20 );
System.out.println(t1.x + " " + t2.x);
}
}
输出
10 20
Java 中的构造方法重载
构造方法重载意味着一个类中的多个构造方法。当您有多个具有不同参数列表的构造方法时,则称为构造方法重载。
示例:构造方法重载
在此示例中,我们有多个构造方法。
// Example of Java Constructor Overloading
// Creating a Student Class
class Student {
String name;
int age;
// no-args constructor
Student() {
this.name = "Unknown";
this.age = 0;
}
// parameterized constructor having one parameter
Student(String name) {
this.name = name;
this.age = 0;
}
// parameterized constructor having both parameters
Student(String name, int age) {
this.name = name;
this.age = age;
}
public void printDetails() {
System.out.println("Name : " + this.name);
System.out.println("Age : " + this.age);
}
}
public class Main {
public static void main(String[] args) {
Student std1 = new Student(); // invokes no-args constructor
Student std2 = new Student("Jordan"); // invokes parameterized constructor
Student std3 = new Student("Paxton", 25); // invokes parameterized constructor
// Printing details
System.out.println("std1...");
std1.printDetails();
System.out.println("std2...");
std2.printDetails();
System.out.println("std3...");
std3.printDetails();
}
}
输出
td1... Name : Unknown Age : 0 std2... Name : Jordan Age : 0 std3... Name : Paxton Age : 25
广告