java中类的构造函数到底有什么用

如题,例如一段代码
class point2{
int x,y;
point2(int a,int b){//构造函数;含参的构造函数;构造方法必须要和类名一致
//且没有返回值
x=a;
y=b;
}
void output(){
System.out.println(x);
System.out.println(y);
}
public static void main(String args[]){//类的实例
point2 pt;
pt=new point2(3,3);//声明实例变量;传递参数给构造函数的变量
pt.output();//实际上调用了类中的构造函数;
}
}

那么我不用构造函数,只声明成员变量是否可以直接代替构造函数,请详细解释构造函数的作用

什么是构造函数,问的好。
开始的时候我也不理解为什么要构造函数。因为那时候的设计思想还停留在面向过程编程。即我要干什么事,这件事有几个步骤,然后我决定怎么干。
面向对象不是这么直接简单,它的设计思想就是要代码重用。即我以前干过类似的事,那么我找出以前可以用到的代码,完成一部分。以前没有的我重新写。这样就有了类。
回到你提的问题。有了类,就是有了可以重用的代码,但是我怎么产生这个对象呢。必须要实例化这个类(当然这不是唯一产生对象的途径,比如单例模式,但本质上说所有途径都是一样的)。那么就要用到构造函数。即告诉程序我现在要实例化一个对象了,你给我马上分配内存。将内存的首地址赋给我指定的类对象。而且有时候你需要传递参数到函数里面,有了构造函数就方便了,构造函数可以有无数个。当然,传递参数到到对象里面也可以其它方法,比如直接赋一个值给成员变量,举例:
class point2{
int x,y;

point2(){
}

point2(int a,int b){//构造函数;含参的构造函数;构造方法必须要和类名一致
//且没有返回值
x=a;
y=b;
}
void output(){
System.out.println(x);
System.out.println(y);
}
public static void main(String args[]){
point2 pt=new point2();//实例化对象,这时候x,y没有赋值,默认初始值为0;
pt.output();
pt.x=3;pt.y=3;
pt.output();
}
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2018-07-04
  1.构造函数的命名必须和类名完全相同;在java中普通函数可以和构造函数同名,但是必须带有返回值。
  2.构造函数的功能主要用于在类的对象创建时定义初始化的状态。它没有返回值,也不能用void来修饰。这就保证了它不仅什么也不用自动返回,而且根本不能有任何选择。而其他方法都有返回值,即使是void返回值。尽管方法体本身不会自动返回什么,但仍然可以让它返回一些东西,而这些东西可能是不安全的。
  3.构造函数不能被直接调用,必须通过new运算符在创建对象时才会自动调用;而一般的方法是在程序执行到它的时候被调用的。
  4.当定义一个类的时候,通常情况下都会显示该类的构造函数,并在函数中指定初始化的工作也可省略,不过Java编译器会提供一个默认的构造函数.此默认构造函数是不带参数的。而一般的方法不存在这一特点。
  5.当一个类只定义了私有的构造函数,将无法通过new关键字来创建其对象,当一个类没有定义任何构造函数,C#编译器会为其自动生成一个默认的无参的构造函数。本回答被网友采纳
第2个回答  2010-01-29
类是用来制造对象的,你现在可以这么理解,类的范围要比对象大(也就是说类更抽象一点) 一个类可以有多种对象,比如说椅子类,他可以有很多对象,像是石椅啊,竹椅啊等等,而你的那个point2类也一样,他也可以有多个对象,像你现在的这个对象就是x=2,y=3的这么一个point2对象,如果你在new一个,比如这样new point2(7,7); 那么这个他就是一个x=7,y=7的这么一个point2对象,而构造方法就是用来生成不一样的对象的!你刚开始学吧,呵呵,我以前也这样,怎么都想不通,其实不用管它,JAVA语法就是这么规定的,他让你这样写。你就这样写。等你以后打的多了,自然就明白了
第3个回答  2010-01-29
public static void main(String args[]){
point2 pt;
pt=new point2(3,3);//是这儿调用了类中的构造函数
pt.output;
}
在Java中,或者说是在面向对象的编程语言中,构造函数作用是用来创建对象的,也是对象的唯一创建方法,就算是静态方法如public static Object getInstanse(),其内部也是通过new关键字来创建对象的。
如果不创建对象是无法修改或访问对象的内部成员,或者是通过类名来访问类的静态成员。
试想车子还没造出来,怎么能使用它呢。

加点分吧
第4个回答  2015-11-10
使用构造器时需要记住:

1.构造器必须与类同名(如果一个源文件中有多个类,那么构造器必须与公共类同名)
2.每个类可以有一个以上的构造器
3.构造器可以有0个、1个或1个以上的参数
4.构造器没有返回值
5.构造器总是伴随着new操作一起调用

示例:
A.java

Java代码
public class A{
public A(){
System.out.println("调用了无参的构造函数");
}
public A(String mess){
System.out.println("调用了有参的构造函数\n"+
"参数内容为:"+mess);
}
}
Test.java

Java代码
public class Test{
public static void main(String [] args){
A a_1=new A();//调用无参的构造函数
A a_2=new A("Hello");//调用有参的构造函数
}
}
输出结果:

继承与构造函数

使用super调用父类构造器的语句必须是子类构造器的第一条语句
如果子类构造器没有显式地调用父类的构造器,则将自动调用父类的默认(没有参数)的构造器。如果父类没有不带参数的构造器,并且在子类的构造器中又没有显式地调用父类的构造器,则java编译器将报告错误

示例:

A.java
Java代码
public class A{
public A(){
System.out.println("调用了A的无参构造函数");
}
public A(String mess){
System.out.println("调用了A的有参的构造函数\n"+
"参数内容为:"+mess);
}
}

B.java
Java代码
public class B extends A{
public B(){
System.out.println("调用了B的无参构造函数");
}
public B(String mess){
super(mess);
System.out.println("调用了B的有参构造函数\n"+
"参数内容为:"+mess);
}
}

Test.java
Java代码
public class Test{
public static void main(String [] args){
B b_01=new B();
B b_02=new B("你好");
}
}
相似回答