构造器的深入了解

有一段时间没有看编程方面的书了,今天复习了一下java方面的知识,发现很多知识之前都了解甚浅,今天就先总结一下关于java构造器方面的知识深入了解。

首先讲一下什么是构造器:

构造器是一个和类名相同但是无返回值的方法,它在一个类中的作用是创建实例时执行初始化,是创建对象的重要途径。注:如果程序员没有为java类提供任何的构造器,系统会自动为这个类提供无参数的构造器,相反,如果有自定义的构造器,系统就不再提供默认的构造器

1  创建实例时执行初始化

创建一个对象时,系统会对这个对象的Field进行默认初始化,把所有的基本类型的Field设为0或false,所有引用类型的Filed设为null,使用构造器可以显示的改变Filed的初始值,,如:

public class ConstructorTest{
     public String name;
     public int count;
     public ContructorTest(String name,int count)
     {
          this.name = name;
          this.count = count;
      }

   public static void main(String[] args)
   {

       ContructorTest ct = new ContructorTest("book",123333)
       System.out.printIn(ct.name);
       System.out.printIn(ct.count);
   }
}

2 构造器是创建java对象的重要途径,但不是全部途径

实际上,当程序员调用构造器时,系统会先为该对象分配内存空间,并为这个对象执行默认初始化,此时这个对象已经产生了,而且这些操作都是在构造器执行之前就完成了,也就是说在系统执行构造器的执行体之前,系统已经创建了一个对象,只是这个对象还没被外部程序访问,只能在该构造器中通过this来引用

再来说一下构造器的重载问题:

一个类中可以有多个构造器,如果用户希望该类保留无参数的构造器,或者希望有多个初始化过程,则可以为该类提供多个构造器,一个类有多个构造器就形成了构造器的重载,,如:

public class ConstructorTest{
     public String name;
     public int count;
     public ContructorTest()
     {
     }
     public ContructorTest(String name,int count)
     {
          this.name = name;
          this.count = count;
      }

   public static void main(String[] args)
   {
       ContructorTest ct1 = new ContructorTest();
       ContructorTest ct2 = new ContructorTest("book",123333)
       System.out.printIn(ct1.name + "" +ct1.count);
       System.out.printIn(ct2.count + "" +ct2.count);
   }
}

系统通过new调用构造器时,会根据传入的实例列表来决定调用哪个构造器。

当有多个构造器时,其中一个构造器A的执行体可能包含另一个构造器B的执行体B,当存在这种情况时,可在方法A中调用方法B,构造器不能被直接调用,必须使用new关键字来调用,但是在这里如果使用new关键字就会重新创建一个对象,在这种情况下,可以使用this关键字来调用相应的构造器,,如:

public class ConstructorTest{
     public String name;
     public int count;
     public double weight;
     public ContructorTest()
     {
     }
     public ContructorTest(String name,int count)
     {
          this.name = name;
          this.count = count;
      }
     public ContructorTest(String name,int count,double weight)
     {

        this(name,count);   //通过this直接调用上一个构造器的初始化代码
        this.weight = weight;
      }
}

注意:使用this调用另一个重载的构造器只能在构造器中使用,而且必须作为构造器执行体的第一条语句

时间: 2024-10-05 15:35:02

构造器的深入了解的相关文章

从头认识java-18.2 基本的线程机制(6)-使用构造器或者内部类来实现多线程的编码变体

这一章节我们来讨论一下使用构造器或者内部类来实现多线程的编码变体. 1.基础实现 package com.ray.ch17; public class Test { public static void main(String[] args) { Thread thread1 = new ExtendsThread(); thread1.start(); Thread thread2 = new Thread(new ImplRunnable()); thread2.start(); } } c

构造器和析构器

一 构造器 swift的init方法是没有返回值的,而OC的init方法就有返回值,返回类本身 1.默认构造器 即使我们不写init方法,系统也会为函数默认写一个空的init方法 struct Fahrenheit {          var temperature:Double          init(){         temperature = 32.0     } } var f = Fahrenheit() 2.自定义构造器 struct Celsius {          

使用构造器装配属性

beans.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springfr

java8之lambda表达式(构造器引用)

构造器引用同方法引用类似,不同的是在构造器引用中方法名是new.例如,Button::new表示Button类的构造器引用.对于拥有多个构造器的类,选择使用哪个构造器取决于上下文.假设你有一个字符串列表,并且希望调用Button类的构造器使用列表中的字符串来构造一个按钮列表,可以使用如下表达式: List<String> labels = ....; Stream<Button> stream = labels.stream().map(Button::new); List<

疯狂java学习笔记之面向对象-定义类、方法、构造器

Java面向对象 1.定义类 2.创建对象.调用方法 类和对象: 某一类对象的概念定义. 比如:人类 - 抽象出来的概念(不特指某个人) 对象 - 在类的概念下产生的一个实例,它就是一个对象了. java程序中,类是最小的程序单位 - 所有的java程序都必须从定义类开始 定义类的语法格式: [修饰符]  class  类名{ //0 ~ N 个 Field 定义 //0 ~ N 个 方法定义 //0 ~ N个 构造器定义 } 一个类中最多只能出现五种成分:Field.方法.构造器 一个类最常见

effective java读书札记值第2条:遇到多个构造器参数时要考虑用构造器

对于一个参数有多个的构造器的类,程序员一向习惯采用重叠的构造器模式. public class Person { private String Id; private String name; private String address; public Person(String id) { Id = id; } public Person(String name, String address) { super(); this.name = name; this.address = addr

Java的构造器

初始化和清理是涉及安全的两个问题.C++和Java都引入了构造器(constructor)的概念,这是一个在创建对象时被自动调用的特殊方法. 可以假想为编写的每个类都定义一个initialize()方法.在每次使用对象的时候,都会用这个方法.在Java中,通过提供构造器,类的设计者可确保每个对象都会得到初始化. 在Java中,构造器与类的名称是相同的.如果没有定义构造器,那么Java就会自动调用默认的构造器. 我们先来看看一个带有构造器的简单类: class Yes(){ Yes(){ Syst

-Java基础-构造器

1.构造器 构造器就是类创建对象的初始化方法.它的名字与类名相同. 假设没有写有构造器的情况下,虚拟机会自动加上一个没有参数的构造器,如果[学Java,到凯哥学堂kaige123.com]写有构造器,那么虚拟机就不会在加上构造器了. public class Test1 { public Test1() { System.out.println("我是构造器!"); } } 2.构造器重载 构造器就是一个方法,所以它和普通的方法一样也可以做方法重载,换句话说就是构造器的重载. 和方法重

Java——构造器

Java 构造器的由来:构造器是一个创建对象时被自动调用的特殊方法,为的是初始化. 当创建一个个对象时,系统会该对象的属性默认初始化,基本类型属性的值为0(数值类型),false(布尔类型),把所有的引用类型设置为null.构造器可以改变这种默认的初始化.构造器不是函数. 要求:构造器的名称应与类的名称一致.调用构造器是编译器的责任,所以必须让编译器知道调用的是哪一个方法.所以Java采取了与类同名的方法命名构造器. public class Person { public String nam

CLR类型设计之方法与构造器

C#语言中最常用到的就是方法的语法,如果在控制台应用程序中,一定要有一个Main()方法作为程序入口,本文讨论的不是方法实现也不是为什么要写方法,而是来讨论下如何构造器和扩展方法. 无论学习那门语言都要学习函数体,C#,JAVA,PHP,都会涉及到函数体,而C#的函数体成员并不少,方法和构造器就是函数体成员之一,函数体成员还包括但不限于:方法,属性,构造器,终结器,运算符及索引器. 方法就是某个类相关的函数,也可以返回简单的基元类型或者什么也不反回,方法可以定义其公开性,如果使用static修饰