【Java编程教程】详解Java 构造函数

在Java中,构造函数是类似于方法的代码块。它在创建类的实例时被调用。在调用构造函数时,对象的内存是在内存中分配的。

它是一种特殊类型的方法,用于初始化对象。

每次使用 new() 关键字创建对象时,至少会调用一个构造函数。

如果类中没有可用的构造函数,它会调用默认构造函数。在这种情况下,Java 编译器默认提供默认构造函数。

Java 中有两种类型的构造函数:无参数构造函数和参数化构造函数。

注意:它被称为构造函数,因为它在对象创建时构造值。没有必要为类编写构造函数。这是因为如果您的类没有默认构造函数,java 编译器会创建一个默认构造函数。

# 创建 Java 构造函数的规则

为构造函数定义了两个规则。

  1. 构造函数名必须与其类名相同

  2. 构造函数必须没有明确的返回类型

  3. Java 构造函数不能是抽象的、静态的、最终的和同步的

注意:我们可以在声明构造函数时使用访问修饰符。它控制对象的创建。换句话说,我们可以在 Java 中拥有 private、protected、public 或 default 构造函数。

# Java构造函数的类型

Java 中有两种类型的构造函数:

  1. 默认构造函数(无参数构造函数)

  2. 参数化构造函数

# Java 默认构造函数

当构造函数没有任何参数时,它被称为“默认构造函数”。

默认构造函数的语法:


<类名>(){}

默认构造函数示例

在此示例中,我们在 Bike 类中创建无参数构造函数。它将在对象创建时被调用。


//Java 程序创建并调用默认构造函数  
class Bike1{  
//创建默认构造函数 
Bike1(){System.out.println("自行车已创建");}  
//主要方法 
public static void main(String args[]){  
//调用默认构造函数 
Bike1 b=new Bike1();  
}  
}

输出:


自行车已创建

规则:如果类中没有构造函数,编译器会自动创建一个默认构造函数。

Q) 默认构造函数的目的是什么?

默认构造函数用于为对象提供默认值,如 0、null 等,具体取决于类型。

显示默认值的默认构造函数示例


//让我们看另一个默认构造函数的例子 
//显示默认值 
class Student3{  
int id;  
String name;  
//显示id和name值的方法 
void display(){System.out.println(id+" "+name);}  
  
public static void main(String args[]){  
//创建对象 
Student3 s1=new Student3();  
Student3 s2=new Student3();  
//显示对象的值 
s1.display();  
s2.display();  
}  
}

输出:


0 null
0 null

说明:在上面的类中,您没有创建任何构造函数,因此编译器为您提供了一个默认构造函数。这里 0 和 null 值由默认构造函数提供。

Java参数化构造函数

具有特定数量参数的构造函数称为参数化构造函数。

为什么要使用参数化构造函数?

参数化构造函数用于为不同的对象提供不同的值。但是,您也可以提供相同的值。

参数化构造函数示例

在此示例中,我们创建了具有两个参数的 Student 类的构造函数。我们可以在构造函数中有任意数量的参数。


//Java程序演示参数化构造函数的使用。
class Student4{  
    int id;  
    String name;  
    //创建参数化构造函数 
    Student4(int i,String n){  
    id = i;  
    name = n;  
    }  
    //显示值的方法 
    void display(){System.out.println(id+" "+name);}  
   
    public static void main(String args[]){  
    //创建对象并传递值
    Student4 s1 = new Student4(111,"小卡");  
    Student4 s2 = new Student4(222,"小安");  
    //调用方法显示对象的值
    s1.display();  
    s2.display();  
   }  
}

输出:


111 小卡
222 小安

# Java 中的构造函数重载

在 Java 中,构造函数就像一个方法,但没有返回类型。它也可以像 Java 方法一样被重载。

Java 中的构造函数重载是一种拥有多个具有不同参数列表的构造函数的技术。它们的排列方式使每个构造函数执行不同的任务。编译器根据列表中参数的数量及其类型来区分它们。

构造函数重载的例子

//Java程序重载构造函数 
class Student5{  
    int id;  
    String name;  
    int age;  
    //创建两个arg构造函
    Student5(int i,String n){  
    id = i;  
    name = n;  
    }  
    //创建三参数构造函数 
    Student5(int i,String n,int a){  
    id = i;  
    name = n;  
    age=a;  
    }  
    void display(){System.out.println(id+" "+name+" "+age);}  
   
    public static void main(String args[]){  
    Student5 s1 = new Student5(111,"小卡");  
    Student5 s2 = new Student5(222,"小安",25);  
    s1.display();  
    s2.display();  
   }  
}

输出:


111 小卡 null
222 小安 25

# Java中构造函数和方法的区别

构造函数和方法之间存在许多差异。它们在下面给出。

Java构造函数方法
构造函数用于初始化对象的状态。方法用于暴露对象的行为。
构造函数不能有返回类型。方法必须有返回类型。
构造函数被隐式调用。该方法被显式调用。
如果类中没有任何构造函数,Java 编译器会提供默认构造函数。在任何情况下,编译器都不会提供该方法。
构造函数名必须与类名相同。方法名可能与类名相同,也可能不同。

# Java 复制构造函数

Java 中没有复制构造函数。但是,我们可以将值从一个对象复制到另一个对象,就像 C++ 中的复制构造函数一样。

在 Java 中有多种方法可以将一个对象的值复制到另一个对象中。他们是:

  • 通过构造函数

  • 通过将一个对象的值分配给另一个对象

  • 通过 Object 类的 clone() 方法

在此示例中,我们将使用 Java 构造函数将一个对象的值复制到另一个对象中。


//Java 程序将值从一个对象初始化为另一个对象。
class Student6{  
    int id;  
    String name;  
    //初始化整数和字符串的构造函数 
    Student6(int i,String n){  
    id = i;  
    name = n;  
    }  
    //构造函数来初始化另一个对象 
    Student6(Student6 s){  
    id = s.id;  
    name =s.name;  
    }  
    void display(){System.out.println(id+" "+name);}  
   
    public static void main(String args[]){  
    Student6 s1 = new Student6(111,"小卡");  
    Student6 s2 = new Student6(s1);  
    s1.display();  
    s2.display();  
   }  
}

输出:


111小卡
111小卡

问)构造函数是否返回任何值?

是的,它是当前的类实例(你不能使用返回类型但它返回一个值)。

构造函数可以执行其他任务而不是初始化吗?

是的,像创建对象、启动线程、调用方法等。您可以像在方法中执行操作一样在构造函数中执行任何操作。

Java中有构造函数类吗?

有的。

Constructor类的目的是什么?

Java提供了一个Constructor类,可以用来获取类中构造函数的内部信息。它位于 java.lang.reflect 包中。

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 8 引入了函数式编程的概念,其中最重要的两个特性是 Lambda 表达式和 Stream API。下面将对这两个特性进行详细介绍。 1. Lambda 表达式 Lambda 表达式是一种匿名函数,它可以作为参数传递给方法或存储在变量中。Lambda 表达式的语法如下: ``` (parameter1, parameter2, ..., parameterN) -> { statement1; statement2; ... } ``` 其中,参数列表可以为空,也可以包含多个参数;箭头符号 "->" 用于将参数列表和 Lambda 表达式的主体分开;体可以是一个语句块,也可以是一个表达式。 下面是一个 Lambda 表达式的例子: ```java (int x, int y) -> { return x + y; } ``` 这个 Lambda 表达式接受两个整数参数 x 和 y,返回它们的和。 Lambda 表达式可以用于函数式接口,即只包含一个抽象方法的接口。例如,下面是一个函数式接口的定义: ```java interface MyInterface { int myMethod(int x, int y); } ``` 可以使用 Lambda 表达式来实现这个接口: ```java MyInterface obj = (int x, int y) -> { return x + y; }; ``` Lambda 表达式还可以使用方法引用来简化代码。例如,可以使用静态方法引用来实现上面的例子: ```java MyInterface obj = Integer::sum; ``` 2. Stream API Stream API 是一种用于处理集合的 API,它提供了一种流式处理集合的方式。Stream API 可以用于对集合进行过滤、映射、排序等操作。 下面是一个使用 Stream API 进行过滤和映射的例子: ```java List<String> list = Arrays.asList("apple", "banana", "orange", "pear"); List<String> result = list.stream() .filter(s -> s.startsWith("a")) .map(String::toUpperCase) .collect(Collectors.toList()); ``` 这个例子首先创建了一个包含四个字符串的列表,然后使用 stream() 方法将其转换为一个流。接着使用 filter() 方法过滤出以字母 "a" 开头的字符串,再使用 map() 方法将这些字符串转换为大写形式。最后使用 collect() 方法将结果收集到一个列表中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值