精华内容
下载资源
问答
  • Kotlin构造函数多个构造函数

    万次阅读 2018-05-07 17:57:44
    Kotlin构造函数首先 强调一下 如果下面这样行代码是构造函数的话 class ClassName(name:String){}那么每一个Kotlin只有一个构造函数 没有多个构造函数其实由于代码什么的都是源于国外的 所以在翻译过程中多说...

    Kotlin构造函数

    首先 强调一下 如果下面这样行代码是构造函数的话 

    class ClassName(name:String){}

    那么每一个Kotlin类只有一个构造函数 没有多个构造函数

    其实由于代码什么的都是源于国外的  所以在翻译过程中多说会有些出入 毕竟我们不是翻译官 而大多数的翻译官又不懂代码

    实际上Kotlin的构造函数 都是用构造器的 上面的代码其实是省略了constructer()的  在Kotlin中init()函数是主结构器内置函数

    class ClassName constructer(name:String){
         init{
             print("test == ${name}")
         }
    }

    请在看完这篇文章之后我不希望听到kotlin中的构造函数 主构造器 次级构造函数 同时出现,以后请直接说主构造函数 次构造函数 或者主构造器 次构造器

    现在进入正题

    主构造函数

    class ClassName constructer(name:String){
         init{
             print("test == ${name}")
         }
    }

    或者

    class ClassName (name:String){
         init{
             print("test == ${name}")
         }
    }

    其中元素name可以用var修饰 将其变为全局变量

    class ClassName constructer(var name:String){
         init{
             print("test == ${name}")
         }
    }

    次级构造函数 可以为多个 但是不支持init()函数

    class ClassName constructer(name:String){
         init{
             print("test == ${name}")
         }
         constructor(name: String, alexa: Int):this(name){
            print("test == ${name}")
            print("test == ${alexa}")
        }
        constructor(name: String, alexa: Int,onemore:String):this(name){
            print("test == ${name}")
            print("test == ${alexa}")
            print("test == ${onemore}")
    
        }
    }
    最后希望大家对代码有属于自己的理解 
    展开全文
  • 在Spring框架中,当一个类包含多个构造函数带的参数相同,它总是会造成构造函数注入参数类型歧义的问题。 看如下一个代码: public class Student {    private String name;  private String ...

    在Spring框架中,当一个类包含多个构造函数带的参数相同,它总是会造成构造函数注入参数类型歧义的问题。
    看如下一个代码:
    public class Student {
        
        private String name;
        private String address;
        private int age;  
        public Student(String name, String address, int age) {
             super();
             this.name = name;
             this.address = address;
             this.age = age;
        }
        public Student(String name, int age, String address) {
             super();
             this.name = name;
             this.address = address;
             this.age = age;
        }
        public String getName() {
             return name;
        }
        public void setName(String name) {
             this.name = name;
        }
        public String getAddress() {
             return address;
        }
        public void setAddress(String address) {
             this.address = address;
        }
        public int getAge() {
             return age;
        }
        public void setAge(int age) {
             this.age = age;
        }
        @Override
        public String toString() {
             return "Student [name=" + name + ", address=" + address + ", age=" + age + "]";
        }
    }
    在Spring bean的配置文件中,name为jack,adderss为123456,age为12:
    <beans
        
        <bean id="StudentBean" class="com.yiibai.dao.Student">
            <constructor-arg><value>jack</value></constructor-arg>
            <constructor-arg><value>123456</value></constructor-arg>
            <constructor-arg><value>12</value></constructor-arg>
             
        </bean>
    </beans>
    执行如下代码:
    public static void main(String[] args) {
             ApplicationContext context =
                 new ClassPathXmlApplicationContext("applicationContext.xml");
             Student student = (Student) context.getBean("StudentBean");    
             System.out.println(student);
        }
    我们期望的输出结果为:
    Student [name=jack, address=123456, age=12]
    实际的输出结果为:
    Student [name=jack, address=12, age=123456]
    我们期望的是它调用第一个构造函数来注入属性的,但实际上调用的是第二个构造函数,在Spring参数类型'123456' 能够转换成int,所以Spring只是转换它,并采用第二个构造来执行,即使你认为它应该是一个字符串。这样就造成了属性注入问题。
    为了解决这个问题,应该为构造函数指定确切的数据类型,Spring bean的配置文件应该修改为如下形式:
    <beans
        
        <bean id="StudentBean" class="com.yiibai.dao.Student">
             <constructor-arg type="java.lang.String"><value>jack</value></constructor-arg>
             <constructor-arg type="java.lang.String"><value>123456</value></constructor-arg>
             <constructor-arg type="int"><value>12</value></constructor-arg>
             
        </bean>
    </beans>
    输出结果为:
    Student [name=jack, address=123456, age=12]
    因此,为了解决这个问题可以为构造函数指定确切的数据类型,但是这样做其实还是很麻烦,所以,个人建议属性注入可以使用setter方法。
    展开全文
  • 但我们可以一个构造方法里调用其他重载的构造方法,不是用构造方法名,而是用this(参数列表)的形式,根据其中的参数列表,选择相应的构造方法。例如: public class Person{ String name; int ...
    构造方法是在产生对象时被java系统自动调用的,我们不能在程序中像调用其他方法一样去调用构造方法(必须通过关键词new自动调用它)。但我们可以在一个构造方法里调用其他重载的构造方法,不是用构造方法名,而是用this(参数列表)的形式,根据其中的参数列表,选择相应的构造方法。例如:     
    public class Person{
            String name;
            int age;
            public Person(String name){
                this.name = name;
            }
            public Person(String name,int age){
                this(name);
                this.age = age;
            }
        }
    不是一个类有多个构造函数,而是这个把这个构造函数重载了很多次。你可以去读一下方法重载这个概念。

    构造方法重载具体好处就是:我扔进来是什么样的参数,程序就会自动找到相对应的构造方法去执行。这样构造函数就能实现很多功能了。否则一个功能写一个类,多麻烦啊。


    展开全文
  • 在学习群里面看到一位同学问——一个类可以定义多个空参数的构造方法吗 我当是在想应该不行的吧,然后看到那个问问题的同学说:“可以再定义局部的空参构造方法”,然后自己看了一下关于局部的知识确实阔以,...

    在学习群里面看到一位同学问——一个类中可以定义多个空参数的构造方法吗
    我当是在想应该不行的吧,然后看到那个问问题的同学说:“可以再定义局部类的空参构造方法”,然后自己看了一下关于局部类的知识确实阔以,话不多说,上代码。

    package e01;
    
    public class jvav {
    
    	public static void main(String[] args) {    
    		Outer outer=new Outer();
    		Outer.Inner inner = outer.new Inner(); // 创建内部类对象
    		inner.show1(); // 测试在成员内部类中访问外部类成员变量和方法
    		outer.test2(); // 测试在外部类中访问内部类成员变量和方法
    	}
    }
    
    //定义外部类Outer
    class Outer {
    	Outer(){
    		System.out.println("调用了外部类的无参构造函数");
    	}
    	int m = 0; // 定义外部类的成员变量
    	// 定义外部类成员方法
    	void test1() {
    		System.out.println("外部类成员方法");
    	}
    	// 定义成员内部类Inner
    	class Inner {
    		Inner(){
    			System.out.println("调用了内部类的无参构造函数");
    		}
    		int n = 1;
    		// 1、定义内部类方法,访问外部类成员变量和方法
    		void show1() {
    			System.out.println("外部类成员变量m="+m);
    			test1();
    		}
    		void show2(){
    			System.out.println("内部类成员方法");
    		}
    	}
    	// 2、定义外部类方法,访问内部类变量和方法
    	void test2() {
    		Inner inner = new Inner();
    		System.out.println("内部类成员变量n="+inner.n);
    		inner.show2();
    	}
    }
    

    看完上述代码就该就清楚了吧,我生成的的是成员内部类,那估计局部内部类应该也行,不得不说他们是真滴牛

    展开全文
  • 当你需要大批量的写对象的时候,就需要用到构造函数,它可以方便创建多个对象的实例,并且创建的对象可以被标识为特定的类型,可以通过继承扩展代码 2.构造函数的特点 a:构造函数的首字母必须大写,用来区分于普通...
  • 在python中定义多个构造函数

    万次阅读 2018-09-20 23:56:33
    当我们在编写一个类时,我们希望用户可以通过多种不同的方式来创建一个类实例,而不是局限于_init_()方法提供的一种。这个时候,就需要我们创建多个构造函数了。 &nbsp;&nbsp;&nbsp;&nbsp;下面是...
  • 一个class只能有一个用于构造对象的__init__函数但python中的变量是无类型的,因此传给__init__的参数可以是任何类型python中的函数参数在定义时可以有默认值,可以让__init__函数接受多个参数,在后面的一些参数给...
  • es6为创建多个构造函数

    千次阅读 2018-09-23 10:48:31
    虽然ES6之后可以实现JavaScript创建Class,但自身并不提供函数重载,所以无法直接创建多个构造函数 更多精彩 更多技术博客,请移步 asing1elife’s blog 解决 原理则是对一个构造函数的传值进行类型判断,从而...
  • C++中有一个很重要的法则:使用构造函数创建对象的顺序与使用析构函数释放对象的顺序相反。对于一些C++的初学者来说,这是一条有点费解的法则,那么该怎么理解和清晰的表现出来呢?下面我们通过程序来体现一下: #...
  • 构造函数的作用是在创建的对象时进行对象初始化的。 在 C++ 中,每个且必须...如果用户还希望能有一个无参数的构造函数,必须自行编写。 构造函数也是一种函数, 所以在定义时可以将其定义为参数和无...
  • 构造函数 ,是一种特殊的方法 。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new...特别的一个类可以有多个构造函数 ,可根据其参数个数的不同或参数类型的不同来区分它们 即构造函数的重载。
  • JAVA一个类有两个构造函数,当在一个构造函数中调用另外一个构造函数时为什么要用this.()而不能用类名.() 举报描述不清违规检举侵权投诉| 分享| 2009-03-12 10:51 彪悍排骨男 | 浏览 7058 次 编程语言 ...
  • 中定义多个构造函数

    千次阅读 2019-08-18 23:18:09
    如果想让用户能够以多种方式创建实例,而不局限于__init()__方法,可以用下面的解决方案 import time import time class Date: def __init__(self, year, month, day): self.year = year self.month = month ...
  • 构造函数

    千次阅读 2016-03-07 22:28:52
    构造函数的函数名与类名相同,没有返回类型,不能声明为const成员函数(因为直到构造函数初始化过程后,对象才能真正的取得其常量属性)一个类可以有多个构造函数构造函数一个初始化列表。   &构造函数初始...
  • 每个只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数)。对于任意一个类A,如果不手动编写上述函数,C++编译器将自动为A生成四个缺省的函数:  A(void);...
  • 拥有多个构造函数的模型

    千次阅读 2009-12-08 23:23:00
    这是一个拥有多个构造函数的模型 ,设计的时候,如果类似业务可以借鉴 //一个用户,不能实例化,只接受继承。所以定义为抽象 abstract class Customer { private string Name; public Customer(string ...
  • c++ 构造函数详解

    万次阅读 多人点赞 2019-05-31 17:20:58
    c++构造函数详解。(构造函数的分类、拷贝构造函数
  • 每个C++只有一个析构函数,但可以有多个构造函数多个赋值函数。其中构造函数包括默认构造函数(无参,或参数全有默认值),拷贝构造函数。在编程时,如果程序员不显式声明和定义上述函数,编译器将自动产生4个...
  • c++构造函数分类说明

    千次阅读 2017-07-15 15:43:23
    3. 构造函数可以被重载,但是每次对象创建时只会调用其中的一个; 我们可以将构造总结为以下几,不同入参决定调用不同的构造函数,它们分别是普通构造函数 、默认构造函数 、拷贝构造函数 、转换构造函
  • &nbsp; 一个类的对象作为另一个类的数据成员。...一个类中的数据成员除了可以是int, char, float等这些基本的数据类型外,还可以是某一个类一个对象。用子对象创建新。 &nbsp; &n...
  • //构造函数的初始化列表:在一个类中使用另一个类所需要注意的 #include<iostream> using namespace std; class A { private: int a; public: A(int _a) { a=_a; ...
  • C++中构造函数与复制构造函数

    千次阅读 2017-04-27 10:52:42
    在网络上朋友提到“主要原因在于编译器的优化,当复制构造函数是public时,编译器就会根据这特性来对代码进行优化。当程序运行时,编译器发现复制构造函数是public,则说明程序允许对象之间的复制,此时就会通过...
  • 默认构造函数指不带参数或者所有参数都有缺省值的构造函数!...每个只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数)。对于任意一个类A,如果不编写上述
  • 每个只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数)。对于任意一个类A,如果不想编写上述函数,C++编译器将自动为A产生四个缺省的函数(也只是在需要的...
  • 2编写一个有参的构造函数 3在主函数中调用无参构造函数生成圆的实例c1,调用构造函数生成圆的实例c2,调用实例方法判断c1和c2是否重叠   import java.util.*; class Circle { int radius;//半径 int x; ...
  • 3-1 Point构造函数 ...设计一个Point,私有数据成员x、y;公有成员函数:无参数的构造函数Point(),带参数的构造函数Point(int,int);ShowPoint()输出点对象的信息 在主函数main()中
  • 构造函数为私有,如何创造一个类

    千次阅读 2010-10-05 17:09:00
    构造函数为私有成员,如何去创建一个类
  • scala 定义构造函数与继承

    千次阅读 2016-11-09 23:52:04
    1.scala中如何定义scala中定义的方式很简单class Point(xc:Int,yc:Int)上面这行代码就定义了一个类 ...2.的构造方法的定义中可以有多个构造参数。与java中不同的是,scala名称后直接加上构造函数
  • C++的构造函数和默认构造函数详解

    万次阅读 多人点赞 2019-04-07 15:19:45
    构造函数是c++的在构造对象时调用的函数,此函数没有返回类型。 默认构造函数是未提供显式初始值时用来构建对象的构造函数。 其实这定义并没有告诉我们什么,真正想要搞懂还是要看代码,从代码的区别来体会他们...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,156,668
精华内容 462,667
关键字:

一个类的构造函数可以有多个