JAVA构造函数(方法)

JAVA构造函数(方法)一 什么是构造函数 java 构造函数 也叫构造方法 是 java 中一种特殊的函数 函数名与相同 无返回值 作用 一般用来初始化成员属性和成员方法的 即 new 对象产生后 就调用了对象了属性和方法 在现实生活中 很多事物一出现 就天生具有某些属性和行为 比如人一出生 就有年龄 身高 体重 就会哭 汽车一出产 就有颜色 有外观 可以运行等 这些 我们就可以将这些天然的属性和行为定义在构造函数中

一、什么是构造函数

Java构造函数,也叫构造方法,是JAVA中一种特殊的函数。与函数名相同,无返回值。

作用:一般用来初始化成员属性和成员方法的,即new对象产生后,就调用了对象的属性和方法。

在现实生活中,很多事物一出现,就天生具有某些属性和行为。比如人一出生,就有年龄、身高、体重、就会哭;汽车一出产,就有颜色、有外观、可以运行等。

这些,我们就可以将这些天然的属性和行为定义在构造函数中,当new实例化对象时,也就具有这些属性和方法,不用再去重新定义,从而加快编程效率。

构造函数是对象一建立就运行,给对象初始化,就包括属性,执行方法中的语句。

而一般函数是对象调用才执行,用 “.方法名” 的方式,给对象添加功能。

 一个对象建立,构造函数只运行一次。

 而一般函数可以被该对象调用多次。  

 

二、构造函数的特点

1、函数名与类名相同

2、不用定义返回值类型。(不同于void类型返回值,void是没有具体返回值类型;构造函数是连类型都没有)

3、不可以写return语句。(返回值类型都没有,故不需要return语句)

注:一般函数不能调用构造函数,只有构造函数才能调用构造函数。

 

 三、示例

1、无参构造函数类中只定义一个方法。构造器总是伴随着new操作一起调用. 

new对象时,就调用与之对应的构造函数,执行这个方法。不必写“.方法名”。

package javastudy; public class ConfunDemo { public static void main(String[] args) { //输出Hello World。new对象一建立,就会调用对应的构造函数Confun(),并执行其中的println语句。 Confun c1=new Confun(); } } class Confun{ Confun(){ //定义构造函数,输出Hello World System.out.println("Hellow World"); } }

输出:

Hellow World 

 

 2、有参构造函数,在new对象时,将实参值传给private变量,相当于完成setter功能。

package javastudy; public class ConfunDemo3 { public static void main(String[] args){ //实例化对象时,new Person()里直接调用Person构造函数并转转实参,相当于setter功能 Person z = new Person("aerchi",18); z.show(); } } class Person{ private String name; private int age; //有参数构造函数,实现给private成员变量传参数值的功能 public Person(String n,int m){ name=n; age=m; } //getter //实例化对象时,完成了sett功能后,需要getter,获取实参值。 public String getName(){ return name; } public int getAge(){ return age; } //获取private值后,并打印输出 public void show(){ System.out.println(name+"\n"+age); } }

输出:

aerchi 18

 以上代码,我们也可以将show()方法中的输出语句直接放在构造函数中,new对象时,即可直接输出值,如下

package javastudy; public class ConfunDemo3 { public static void main(String[] args){ //实例化对象时,new Person()里直接调用Person构造函数并转转实参,同时执行输出语句 Person z=new Person("aerchi", 18); } } class Person{ private String name; private int age; //有参数构造函数,实现给private成员变量传参数值的功能,同时直接输出值 public Person(String n,int m){ name = n; age = m; System.out.println(name+"\n"+age); } }

输出:

aerchi 18

 或

class ConFun { public static void main(String[] args){ Person a=new Person(18,"aerchi"); System.out.println(a.getAge() +", " + a.getName()); } } class Person { private int age; private String name; public Person(int x,String y){ age=x; name=y; } public int getAge(){ return age; } public String getName(){ return name; } }

 

3、一个对象建立后,构造函数仅只运行一次。

如果想给对象的值再赋新的值,就要使用set和get方法,此时是当做一般函数使用

如下:

package javastudy; public class ConfunDemo4 { public static void main(String[] args) { PersonDemo s=new PersonDemo("张三",18); //new对象时,即调用对应的构造函数,并传值。同时,不能new同一个对象多次,否则会报错。 s.setName("李四"); //对象建立后,想变更值时,就要用set/get方法,重新设置新的值 s.setName("王二麻子"); //并可调用对象多次。 s.print(); } } class PersonDemo{ private String name; private int age; PersonDemo(String n,int m){ //建立有参构造函数,用于给两个private变量name、age赋值,同时输出值 name=n; age=m; System.out.println("姓名:"+name+"\n"+"年龄:"+age); } public void setName(String x){ //set方法,用于再次给name赋值 name=x; } public String getName(){ //get方法,用于获取name的赋值 return name; } public void print(){ System.out.println(name); } }

输出结果:

姓名:张三 年龄:18 王二麻子

 

四、默认构造函数

当一个类中没有定义构造函数时,系统会给该类中加一个默认的空参数的构造函数,方便该类初始化。只是该空构造函数是隐藏不见的。

如下,Person(){}这个默认构造函数是隐藏不显示的。

class Person { //Person(){} }

当在该类中自定义了构造函数,默认构造函数就没有了。

如果仍要构造函数,需要在类中手动添加。

 

五、构造函数的重载

构造函数也是函数的一种,同样具备函数的重载(Overloding)特性。

class Person { private String name; private int age; Person() { System.out.println("A:name="+name+", age="+age); } Person(String n) { name = n; System.out.println("B:name="+name+", age="+age); } Person(String n,int a) { name=n; age=a; System.out.println("C:name="+name+", age="+age); } } class PersonDemo2 { public static void main(String[] args) { Person p1=new Person(); Person p2=new Person("aerchi"); Person p3=new Person("aerchi",18); } }

输出结果:

A:name=null, age=0 B:name=aerchi, age=0 C:name=aerchi, age=18

 

class Person { private String name; private int age; Person() { System.out.println("A:name="+name+", age="+age); cry(); } Person(String n) { name = n; System.out.println("B:name="+name+", age="+age); cry(); } Person(String n,int a) { name=n; age=a; System.out.println("C:name="+name+", age="+age); cry(); } void cry() { System.out.println("Haha ..............."); } } class PersonDemo2 { public static void main(String[] args) { Person p1=new Person(); Person p2=new Person("aerchi"); Person p3=new Person("aerchi",18); } }

输出结果:

A:name=null, age=0 Haha ............... B:name=aerchi, age=0 Haha ............... C:name=aerchi, age=18 Haha ...............

 

六、构造函数的使用

 1、子类所有的 构造函数 默认调用父类的无参构造函数(构造函数不会被继承,只是被子类调用而已),父类参数是private的,无法直接访问。需要在父类中使用get方法来调用私有变量值。

package javastudy; public class ConfunDemo5 { public static void main(String[] args) { Pupil z=new Pupil(); z.show(); } } class Student{ //父类Student private String name; private int height; public Student() { this.name=""; this.height=0; } public String getName(){ return name; } public int getHeight(){ return height; } } class Pupil extends Student{ //子类Pupil private int score; public Pupil(){ //无参构造函数Pupil()直接继承了父类中的无参构造函数Student(),但是父类中的name、height是private的 score=0; } public void show(){ System.out.print("姓名:"+getName()+"\n身高:"+getHeight()+"\n分数:"+score); //输出时,直接用get方法名。 } }

2、使用super调用父类的构造函数

 super 必须写在方法的首行

package javastudy; public class ConfunDemo5 { public static void main(String[] args) { Pupil z=new Pupil("王二麻子",100,200); z.show(); Pupil w=new Pupil(); w.show(); } } class Student{ //父类Student public String name; public int height; public Student() { this.name=""; this.height=0; } public Student(String n,int m) { name=n; height=m; } } class Pupil extends Student{ //子类Pupil private int score; public Pupil(){ super("刘德花",501); //使用super调用父类Student(String n,int m)方法,同时传递实际数值。super必须写在方法的首行。如果这里写super(),则调用的是父类中的Student()方法。 score=0; } public Pupil(String x,int y,int z){ // super(x,y); //使用super调用父类Student(String n,int m)方法,其中super中的参数名称必须与构造函数中的参数名称一致。 score=z; } public void show(){ System.out.println("姓名:"+name+"\n身高:"+height+"\n分数:"+score); } }

 输出:

姓名:王二麻子 身高:100 分数:200 姓名:刘德花 身高:501 分数:0

打杂人

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/199785.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月20日 下午12:13
下一篇 2026年3月20日 下午12:13


相关推荐

  • Eclipse和JDK安装教程(22年8月)[通俗易懂]

    Eclipse和JDK安装教程(22年8月)[通俗易懂]初次学习,安装软件会耗费许多时间。这很不值得,我们可以做更多别的事情。不妨试试这篇简单的帖子,希望节省你的宝贵时间。第一次顺利,以后安装就轻车熟路,这就是好的开始。

    2025年9月3日
    15
  • ODA(Open Design Alliance)介绍「建议收藏」

    ODA(Open Design Alliance)介绍「建议收藏」注:与autocad兼容的软件,大部分基于Intellicad,另外刚冒出一个bricscad,天河的PCCADV10就是基于bricscad,bricscad是用ODA的库开发的,而开发brics

    2022年8月6日
    8
  • route命令linux详解,route命令详解-linux运维

    route命令linux详解,route命令详解-linux运维route 命令详解 Linux 系统的 route 命令用于显示和操作 IP 路由表 show manipulateth 要实现两个不同的子网之间的通信 需要一台连接两个网络的路由器 或者同时位于两个网络的网关来实现 在 Linux 系统中 设置路由通常是为了解决以下问题 该 Linux 系统在一个局域网中 局域网中有一个网关 能够让机器访问 Internet 那么就需要将这

    2026年3月19日
    3
  • mysql执行计划看是否最优

    mysql执行计划看是否最优

    2021年11月26日
    58
  • 算法-DFA算法-敏感词过滤算法(OC、Swift、Python)「建议收藏」

    前言前段时间,公司的IMSDK想做敏感词过滤,但是后端的小伙伴《比较忙》,在开产品需求会的时候想把敏感词过滤放到前端,让iOS、安卓自己搞,但是前端小伙伴写了一个方法来检测一段文本,耗时一两秒钟而且比较耗CPU,这样肯定不行的,最后后端小伙伴妥协了,把敏感词过滤放到后端了。一般的思路可能是遍历敏感词库,然后把一段文字的敏感词过滤掉,但是针对比较大的词库时(比如我们的敏感词库10万),这样非…

    2022年4月10日
    201
  • 心形函数的几种表达式怎么求_心形曲线函数4种表达式

    心形函数的几种表达式怎么求_心形曲线函数4种表达式用两个函数表示:f(x)=sqrt(1-(abs(x)-1)^2)h(x)=-2*sqrt(1-0.5*abs(x))也可以根据图中的q(x)画出心形的内部:q(x)=(f(x)-h(x))/2*cos(200*x)+(f(x)+h(x))/2用一个函数表示,我拟合了很久才画出来的:f(x)=(0.64*sqrt(abs(x))-0.8+1.2^abs(x)*cos(200*x))*sqrt(cos(x))定义域:-pi/2<=x<=pi/2我个人觉得要比

    2022年10月9日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号