上篇说到了Java类中重要的部分:构造器,说到一个类中,至少必须有一个构造器,否则就无法使用构造器来创建对象了。
如果类中没有构造器,按理说是不符合Java语言规定的,但是看我们前面的示例,很明显类中没有定义构造器,但是也通过了Java编译器的编译,而且也能正常运行。
是我们说错了么,当然不是。
是这样的,如果在程序中没有定义任何的构造器,则编译器将会自动加上一个不带任何参数的构造器。默认的构造器不带任何的参数,也没有“方法体”。
看,我们的Java编译器还是很贴心的吧。
我们回头来看示例2-2,在这个Dog类中定义了一个只带一个参数的构造器。如果上面的Dog类没有定义构造器,则编译器会自动加上一个构造器:
public class Dog {
private int weight;
//注意,这个构造器实际上并不存在于源程序中
public Dog() {
}
}
所以,这个时候可以用下面的语句来实例化这个类:
Dog d = new Dog();
如果在程序中定义了构造器,则编译器将不再提供默认的构造器,例如在上面的示例2-2中,已经定义了一个构造器,这个构造器有一个参数,如果这时候再使用下面的语句来实例化这个类,则在编译时将会报错:
Dog d = new Dog();
将会出现如下的错误:
cannot resolve symbol
symbol : constructor Dog ()
location: class Dog
Dog d = new Dog();
^
1 error
分享到:
相关推荐
- 如果一个类没有声明任何构造器,Java会自动提供一个无参的默认构造器。这个构造器不执行任何初始化操作,仅调用超类的默认构造器。 - 一旦为类定义了构造器,Java将不再提供默认构造器。因此,如果需要无参构造...
- **默认构造器**:当一个类没有显式地定义任何构造器时,Java编译器会自动为该类提供一个默认构造器。默认构造器是无参的,并且不执行任何操作。 - **自定义构造器**:开发者可以根据需求定义一个或多个构造器来...
listConstructors.java 利用反射机制获取构造器列表 listFields.java 利用反射机制获取成员属性列表 listMethods.java 利用反射机制获取成员方法列表 loadClass.java 动态装载一个类 Shape.java 一个用于测试的...
这包括私有的、受保护的以及默认(包级私有)构造器。 对于每个`Constructor`对象,我们可以通过以下方法获取更多信息: - `getModifiers()`:返回构造器的修饰符,如public、private等,结果是一个整数,可以使用...
- **默认构造器**:如果程序员没有定义任何构造方法,Java编译器会自动提供一个无参的默认构造器。但一旦自定义了构造器,这个默认构造器将不再自动生成。 - **参数化构造器**:当需要在创建对象时传入特定值来初始...
《Java编程思想》第五章主要讨论的是对象的初始化与清理,包括构造器的使用、方法重载以及默认构造器的概念。下面将详细阐述这些知识点。 ### 一、构造器确保初始化 1. **为什么要引入构造器**:在Java中,构造器...
6. **方法与构造器引用**:除了lambda表达式,Java 8还引入了方法引用和构造器引用,它们可以更直接地引用已有方法或构造器,简化代码。 7. **Optional类**:为了解决空指针异常问题,Java 8引入了`Optional`类,它...
9. **构造器接口**:Java 8 允许接口中定义静态方法,这些方法可以作为工具类使用,而无需创建实例。 10. **类型推断增强**:Java 8 对泛型类型的推断进行了增强,使得在某些情况下编译器能更准确地推断出类型。 ...
当创建一个对象时,如果没有显式调用构造器,那么就会自动使用默认构造器。 2. **作用**: - **创建对象**:与`new`关键字一起使用,构造器负责实例化对象。 - **初始化属性**:构造器允许我们在创建对象的同时为...
6. **默认构造器**:如果程序员在定义类时不定义构造方法,Java编译器会自动提供一个无参数的默认构造器。这个默认构造器不执行任何代码,仅用于对象的创建。但是,一旦程序员自定义了一个构造方法,系统就不会再...
默认构造器又称为无参构造器,在没有其他构造器的情况下,JAVA会帮助类生成一个默认的构造器即无参构造器,可以被省略不写。 5.4 this关键字 1. this关键字可以指当前对象,即当前类的对象 2. this关键字在同一...
1. **默认构造器**:每个Java类都隐含地拥有一个无参的默认构造器,如果程序员没有显式定义任何构造器的话。这个构造器负责初始化类的基本属性。 2. **带参数的构造器**:当类需要在创建对象时传入特定初始值时,会...
最后,值得注意的是,Java编译器会在构造器中自动插入对超类构造器的调用,如果没有显式指定,会默认调用无参构造器。这在继承层次结构中确保了初始化的连续性。 总之,理解构造器和方法的区别对于Java程序员至关...
5. **默认构造器**:如果类中没有显式地定义任何构造器,Java编译器会自动提供一个不带参数的默认构造器。 #### 三、构造器的应用实例 下面通过两个例子来具体说明构造器的作用和使用方法。 ### 实例一:基本构造...
- **默认构造器**:当用户没有定义任何构造器时,Java会提供一个无参数的默认构造器。它执行基本的初始化,如将成员变量设置为默认值。 - **自定义构造器**:用户可以根据需要定义带参数的构造器,以实现更复杂的...
13. Java 面板默认布局:FlowLayout。 14. Java 类组成:属性和方法。 15. Java 构造函数:基本使用规则。 16. Java 对象声明和使用。 17. Java 类继承:重写父类方法。 18. Java 可重用代码。 三、数据结构 19. ...
17. 为什么Java类需要默认构造器? 18. Java中的构造器返回什么值? 19. 可以继承构造器吗? 20. 为什么Java中的构造器不能是final、static或abstract的? 这些问题帮助面试者展示对面向对象概念的理解,例如继承、...
// 调用父类的默认构造器 } ``` 或者指定父类构造器的参数: ```java public Son1(String name) { super(name); // 调用父类带参数的构造器 } ``` **3. 调用父类构造器的注意事项** - **位置**:调用父类构造...
14. **使用私有构造器或final类来阻止实例化**:对于工具类或者单例模式,这样做可以防止外部非法实例化。 15. **避免非最终字段的同步**:非最终字段在多线程环境中可能导致数据不一致,应优先考虑使用原子变量或...