构造器

构造器介绍

构造器是Java学习中一个很重要的概念,每个类的对象在使用关键字new实例化的时候,Java虚拟机都会给这个实例化的对象自动调用一个无参构造器,但是当我们自己写有构造器时,Java虚拟机将不再为我们调用这个无参构造器,而是我们要遵循我们自己写的构造器的参数规则来进行实例化。构造器不需要返回值类型,同时它也可以提供很多方法,最主要的功能是初始化类的变量成员。一个类可以有多个不同的构造器,但是这些构造器的参数列表的数量、类型、或者顺序上的差异,而不是同类型不同变量名的差异。

构造器代码演示

无参构造器

public class ConstructDisplay {public static void main(String[] args) {ConstructDisplay display=new ConstructDisplay();//我们没有自己定义类的构造器//所以Java虚拟机为我们自动调用了无参构造器}}

自定义构造器

public class ConstructDisplay {String name;int age;public ConstructDisplay(String name) {//this.name指的是调用这个构造器对象的name属性//而等号右边的name才是//public ConstructDisplay(String name)中的形参namethis.name=name;}public ConstructDisplay(int age) {this.age=age;}public static void main(String[] args) {ConstructDisplay display=new ConstructDisplay("1");ConstructDisplay display2=new ConstructDisplay(1);}}

在上面的代码中,在我们没有定义无参构造器这种情况下,我们将不能在实例化对象时再调用无参构造器。

this与super

this关键字

当一个对象被创建好之后,Java虚拟机就会为这个对象分配一个引用自身的指针this,Java中为了解决变量命名的冲突与不确定性等问题,引入关键字this代表其所在方法的当前对象。

在代码中使用this关键字

构造器中的this

public class Tree {String name;int num;int age;public Tree(String name) {System.out.print("树的品种是"+name+",");}public Tree(int age) {this("苹果树");//调用Tree的其他构造器System.out.println("它的树龄为"+age+"年.");}public Tree() {this(10);//调用Tree的其他构造器System.out.println(".......");}public static void main(String[] args) {Tree tree=new Tree();}
}
//run:
//树的品种是苹果树,它的树龄为10年.
//.......

这里需要注意的是,在构造器中使用this调用其他构造器时要把调用的代码放在该构造器的第一句。构造器中赋值this的用法在上面介绍构造器时就使用了这个写法,所以就不在这里重复了。

构造方法中的this

public class Tree {String name;int age;public void setAge(Tree t) {t.age=10;}public void setName(String name) {this.name=name;//将当前调用setName的对象作为实参传给setAge的形参tsetAge(this);}public static void main(String[] args) {Tree tree=new Tree();tree.setName("苹果树");System.out.println(tree.name+"的树龄为"+tree.age);}
}
//run:苹果树的树龄为10

在代码中使用super关键字

构造器与方法中的super

class BananaTree extends Tree{public BananaTree(String name, int age) {//第一个super调用父类的构造器super(name, age);//第二个super调用父类的方法setNamesuper.setName("香蕉树");}}public class Tree {String name;int age;public Tree(String name,int age) {this.name=name;this.age=age;}public void setName(String changeName) {this.name=changeName;}public static void main(String[] args) {BananaTree tree=new BananaTree("苹果树", 10);System.out.println(tree.name+"的树龄为"+tree.age);}
}

super关键字仅在子类中使用,它用来调用调用父类的属性、构造器或者方法,所以super常与继承一起出现。

传值与传引用

传值与传引用的区别

传值就是将当前变量的值传递给另外一个与当前变量不相关联的另一个变量,另一个变量的操作不会对当前的变量本身造成影响;而传引用就是将本身传递给另一个变量指向,另一个变量对这个变量操作也会影响到当前变量。

传值与传应用代码示例

传值

public class Tree {String name;int age;public Tree(String name,int age) {this.name=name;this.age=age;}public void setName(String name) {name="香蕉树";}public static void main(String[] args) {Tree tree=new Tree("苹果树",10);tree.setName(tree.name);System.out.println(tree.name+"的树龄为"+tree.age);}
}

传引用

public class Tree {String name;int age;public Tree(String name,int age) {this.name=name;this.age=age;}public void setName(Tree otherTree) {otherTree.name="香蕉树";}public static void main(String[] args) {Tree tree=new Tree("苹果树",10);tree.setName(tree);System.out.println(tree.name+"的树龄为"+tree.age);}
}

哪些情况下是传值,哪些情况下是传引用,我认为不是一篇简单的博客就可以解释的明白的,更重要的还是多打代码,自己就能总结出什么情况是传值,什么情况下是传引用了。经验都是自己慢慢总结出来哒,我也只是在这里跟小伙伴们提出这样一个概念这样子啦。

Java构造器与传值相关推荐

  1. java 构造器 构造方法_Java构造器(构造方法/constructor)

    我们先来看一下什么是构造器: 1.构造器也叫构造方法或构造函数,分为有参构造器和无参构造器: 2.构造器也是一种方法,只不过是一种特殊的方法,它会在对象创建的时候被调用: 3.构造器最大的作用就是在创 ...

  2. JAVA中是传值还是传引用?回答KEZHANG问题

    首先,推荐对Java有一定理解的同仁一本书<Practical Java>.在<Practical Java>中也有一个章节介绍Java中关于传值和传引用的问题,堪称经典. & ...

  3. java的函数传值_java 函数形参传值和传引用的区别[转]

    java方法中传值和传引用的问题是个基本问题,但是也有很多人一时弄不清. (一)基本数据类型:传值,方法不会改变实参的值. publicclassTestFun { publicstaticvoidt ...

  4. java构造器_Java构造器就是这么简单!

    前言 理解构造器之前,首先我们需要了解Java中为什么要引入构造器,以及构造器的作用. 在很久之前,程序员们编写C程序总会忘记初始化变量(这真的是一件琐碎但必须的事),C++引入了 构造器(const ...

  5. Java中的传值与传引用

    曾经对java中传值还是传引用的问题十分困惑,而且也被问到过许多次,无论是面试,还是平时我们平时的讨论中. 在stackoverflow上面浏览时,无意中发现了跟这个问题有关的论题,于是深入地查看了, ...

  6. java构造器详解_Java中关于构造器的使用详解

    这篇文章主要介绍了Java构造器使用方法及注意事项的相关资料,这里举例说明如何使用构造器及需要注意的地方,需要的朋友可以参考下 Java构造器使用方法及注意事项 超类的构造器在子类的构造器运行之前运行 ...

  7. 从底层本质上解析java是值传值还是引用传值

    关于java是值传值还是引用传值,在网上找了半天发现网上对于这个问题没有一个合理的解释,特地写了这篇文章,希望能给这个问题一个正确的解释 这个问题涉及语言层次的设计问题,所以我会列出从底向上的的所有结 ...

  8. 用Java构造器来计算圆的周长和面积

    用Java构造器来计算圆的周长和面积 提供测试线束 •我们可以为任何类声明main方法. •这对于单独测试类很有用在把它集成到一个更大的程序之前. •Java只运行类的main方法: 以Java这个词 ...

  9. Java构造器(构造方法)

    Java构造器(构造方法)详解 什么是构造器 构造器通常也叫构造方法.构造函数,构造器在每个项目中几乎无处不在.当你new一个对象时,就会调用构造器.构造器格式如下: [修饰符,比如public] 类 ...

最新文章

  1. PostgreSQL 8.2.5 安装为 Windows 服务 (Service)
  2. PyTorch torchvision.models小结
  3. OpenCASCADE:可视化简介
  4. 高仿真的类-业务逻辑注入接口
  5. junit可执行但控制层无法执行_Junit测试时ContextLoader.getCurrentWebApplicationContext()返回空值...
  6. System.getProperty的用法
  7. 2021上半年测试工作总结:再一次的跳出、新的转变
  8. windows 7系统报错txupd.exe
  9. ArrayList常用函数
  10. 【开源分享】微信营销系统(第三方微信平台)github 开源
  11. python3_实现BP神经网络 + BP神经网络应用实例
  12. BigDecimal取整数
  13. php.ini afm,nanoscope analysis(AFM数据处理软件) v1.5 官方安装免费版(附安装教程)
  14. Window server 2008 搭建DNS服务器
  15. matlab研究,基于MATLAB的实时数据采集与分析研究
  16. Java各阶段学习书目
  17. 罐头蘑菇的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  18. python从入门到精通 邮电出版社_《人民邮电出版社Python深度学习入门:基于PYTHON的理论与实现》【价格 目录 书评 正版】_中国图书网...
  19. 100元人民币兑换成1元、2元、5元人名币的所有兑换方案
  20. 产品研发流程-启示录

热门文章

  1. C++算法集锦:基础数学
  2. Android 联系人开发- 保存联系人
  3. Python爬取全国地铁站点、地铁线路和发车时刻
  4. 关于Swing中使用Substance皮肤和界面刷新问题一角
  5. 武汉富士康奖励优秀员工住房最大126平米-富士康-住房-奖励
  6. maya 和katana 流程链接
  7. 独显2g用于计算机科学与技术,独显2g是什么意思
  8. Java——多线程那些问题
  9. 万字博客带你了解Spring Framework 的全貌
  10. mysql数据data怎么恢复_利用data文件恢复MySQL数据库