java 自定义构造方法,默认函数,看下面的例子,作用,区别,是啥?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 自定义构造方法,默认函数,看下面的例子,作用,区别,是啥?相关的知识,希望对你有一定的参考价值。

public class Page
private int everyPage;
private int totalCount;
private int totalPage;
private int currentPage;
private int beginIndex;
private boolean hasPrePage;
private boolean hasNextPage;
public Page(int everyPage, int totalCount, int totalPage,
int currentPage,int beginIndex, boolean hasPrePage,
boolean hasNextPage) //自定义构造方法
this.everyPage = everyPage;
this.totalCount = totalCount;
this.totalPage = totalPage;
this.currentPage = currentPage;
this.beginIndex = beginIndex;
this.hasPrePage = hasPrePage;
this.hasNextPage = hasNextPage;

public Page() //默认构造函数

先说"默认构造函数",这个写不写有什么区别?什么都没有啊?

再说"自定义构造方法",这个事赋值,这么赋值有什么用呢?值从哪里来?这么多参数都要传进来才能赋值吗?
谢谢大家的回答,我最想知道的就是,为什么要这么写?

自定义构造函数:参数需要在实例化的传进来,如果没有参数,可以传null,至于用途,应该是在此类有些地方要用到,如果没有用到的话,可以不要

默认构造函数:可以不写

此类在实例化的时候有两种形式:
1:Page page1 = new Page();
2:Page page1 = new Page(参数...);
如果不准用第一种实例化,可将默认构造函数改为private Page()
参考技术A 默认构造函数是在没有显示定义构造函数的时候编译器编译时加到你的二进制的目标代码中去的,类似于这个public Page() 。

给你类中的数据成员赋值,初始化你生成的这个对象,自己输入的。。首先要自己定义这些变量。。本回答被提问者采纳
参考技术B ,有无顺序的实现类,也有有顺序的实现类。
最大的不同就是List是可以重复的。而Set是不能重复的。
List适合经常追加数据,插入,删除数据。但随即取数效率比较低。
Set适合经常地随即储存,插入,删除。但是在遍历时效率比较低。
参考技术C 在软件里面就是一些东西传来传去的。。。。赋值的作用就是让你声明的变量有意义撒。

如果类具有参数化构造函数,为啥Java不提供默认构造函数? [复制]

【中文标题】如果类具有参数化构造函数,为啥Java不提供默认构造函数? [复制]【英文标题】:Why Java doesn't provide default constructor, if class has parametrized constructor? [duplicate]如果类具有参数化构造函数,为什么Java不提供默认构造函数? [复制] 【发布时间】:2013-04-16 20:13:57 【问题描述】:

如果类具有参数化构造函数,为什么 Java 不提供默认构造函数? 考虑下面的例子

class A 
    int a;

    public A() 
    

    public A(int val) 
        a = val;
    

这里我明确需要添加默认构造函数。有什么原因,为什么Java不为具有参数化构造函数的类提供默认构造函数?

【问题讨论】:

我不认为这是重复的;它在问为什么规范说明了它的作用。 @OrangeDog 这里的困难在于OP问题的字面答案是“当您显式定义构造函数时,编译器不会生成默认构造函数,因为默认构造函数的定义是'当您没有定义另一个时,编译器会定义一个'"。 (他们的public A() 不是默认构造函数。)OP 可能混淆了术语,可能实际上询问了无参数构造函数。如果我们假设 OP 混淆了术语,也许应该编辑这个问题。 【参考方案1】:

原因与安全性和界面的结合有关。编译器不应该给你没有明确定义的方法。如果您不指定任何构造函数,则一个例外是方便的无参数构造函数。如果您确实指定了构造函数,编译器会假定您不需要任何其他构造函数。

【讨论】:

【参考方案2】:

因为如果编译器不自动为每个类提供 arg 构造函数,就会破坏类设计。考虑 Scanner 类。它的构造函数很少,您可以在其中指定要从何处读取数据。如果编译器也不会添加 arg 构造函数,那么在调用 Scanner 的一种方法以从使用此构造函数初始化的对象中读取数据后,将引发异常,因为不会指定数据源。

【讨论】:

【参考方案3】:

在某些情况下,不希望使用默认构造函数。该语言必须提供一些方法来告诉编译器不要生成它。除了显式构造函数的存在之外,使用其他指示符会导致问题,例如在禁用默认值时需要指定构造函数。

当前的安排通过确保在禁用默认值时有另一个构造函数来消除该问题。

【讨论】:

【参考方案4】:

如果你的类没有定义任何构造函数,Java 会给你一个默认构造函数。

如果您定义了 any 构造函数,(即使是没有任何参数的构造函数)编译器也不会再给您一个。

它是这样工作的,因为它是这样指定的。您可以在Language Specification 中阅读更多相关信息

【讨论】:

OP 知道Java doesn't provide default constructor, if class has parametrized constructor。问题是“为什么”?

以上是关于java 自定义构造方法,默认函数,看下面的例子,作用,区别,是啥?的主要内容,如果未能解决你的问题,请参考以下文章

C++自定义拷贝构造函数

构造方法和构造函数

java怎么调用带参数构造函数

类和对象

c++转换构造函数

C++5大构造函数