构造方法 订阅
构造方法是一种特殊的方法,它是一个与类同名的方法。对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化。当类实例化一个对象时会自动调用构造方法。构造方法和其他方法一样也可以重载。 展开全文
构造方法是一种特殊的方法,它是一个与类同名的方法。对象的创建就是通过构造方法来完成,其功能主要是完成对象的初始化。当类实例化一个对象时会自动调用构造方法。构造方法和其他方法一样也可以重载。
信息
类    别
编程方法
特    点
与类同名且没有返回值类型的方法
作    用
对象的创建
中文名
构造方法
外文名
Construction method
构造方法定义
在Java中,任何变量在被使用前都必须先设置初值,如无显式赋值,则编译器会为其进行隐性赋值。Java提供了为类的成员变量赋初值的专门方法。
收起全文
精华内容
下载资源
问答
  • 构造方法

    万次阅读 多人点赞 2019-05-21 15:54:08
    构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是调用构造方法。 格式 public 类名称(参数类型 参数名称){ 方法体 } 注意事项 构造方法的名称必须和所在的类名称完全一样,就连大...

    构造方法是专门用来创建对象的方法,当我们通过关键字new来创建对象时,其实就是调用构造方法。
    格式

    public 类名称(参数类型 参数名称){
    	方法体
    }
    

    注意事项

    1. 构造方法的名称必须和所在的类名称完全一样,就连大小写也要一样。
    2. 构造方法不要写返回值类型,连void都不写。
    3. 构造方法不能return一个具体的返回值。
    4. 如果没有编写任何构造方法,那么编译器将默认会赠送一个构造方法,没有参数、方法体什么事情都不会做。
    5. 一旦编写了至少一个构造方法,那么编译器将不再赠送。
    展开全文
  • 哈夫曼树原理,及构造方法

    万次阅读 多人点赞 2018-08-05 12:13:21
    哈夫曼树(最优二叉树) 百度百科:... 一.... 找出存放一串字符所需的最少的二进制编码 二. 构造方法: 首先统计出每种字符出现的频率!(也可以是概率)//权值 ----------------------------...

    哈夫曼树(最优二叉树)

    百度百科:https://baike.baidu.com/item/%E5%93%88%E5%A4%AB%E6%9B%BC%E6%A0%91/2305769?fr=aladdin

    一. 目的:

    找出存放一串字符所需的最少的二进制编码

    二. 构造方法:

    首先统计出每种字符出现的频率!(也可以是概率)//权值

    ------------------------------------------------------------------------------------------------

               例如:频率表 A:60,    B:45,   C:13   D:69   E:14   F:5  G:3

    第一步:找出字符中最小的两个,小的在左边,大的在右边,组成二叉树。在频率表中删除此次找到的两个数,并加入此次最小两个数的频率和。

    FG最小,因此如图,从字符串频率计数中删除FG,并返回GF的和 8频率表

     重复第一步:

    -------------------------------------------------------------------------------------------------

    频率表 A:60,    B:45,   C:13   D:69   E:14   FG:8

    最小的是 FG:8C:13,因此如图,并返回FGC的和:21频率表。

    ---------------------------------------------------------------------------------------------------

    重复第一步:

    ---------------------------------------------------------------------------------------------------

    频率表 A:60    B: 45   D: 69   E: 14   FGC: 21

    如图

    -----------------------------------------------------------------------------------------------------

    重复第一步

    -----------------------------------------------------------------------------------------------------

    频率表 A:60    B: 45   D: 69  FGCE: 35

    -----------------------------------------------------------------------------------------------------

    重复第一步

    -----------------------------------------------------------------------------------------------------

    频率表 A:60   D: 69  FGCEB: 80

    -----------------------------------------------------------------------------------------------------

    重复第一步

    -----------------------------------------------------------------------------------------------------

    频率表 AD:129  FGCEB: 80

    添加 0 和 1,规则左0 右1

     

    频率表 A:60,    B:45,   C:13   D:69   E:14   F:5  G:3

    每个 字符 的 二进制编码 为(从根节点 数到对应的叶子节点,路径上的值拼接起来就是叶子节点字母的应该的编码)

    字符 编码
    A 10
    B 01
    C 0011
    D 11
    E 000
    F 00101
    G 00100

     

     

     

     

     

     

     

     

     

    那么当我想传送 ABC时,编码为 10 01 0011

    思考:

    大家观察 出现得越多的字母,他的编码越短 ,出现频率越少的字母,他的编码越长。

    在信息传输过程中,如果这个字母越多,那么我们希望他越瘦小(编码短)这样占用的编码越少,其实编码长的字母也是让频率比它多的字母把编码短的位子都占用后,他才去占用当前最短的编码。至此让总的编码长度最短。

    且要保证长编码的不与短编码的字母冲突:

    比如 不能出现 读码 读到 01  还有长编码的 字母为011,如果短编码为一个长编码的左起子串,这就是冲突,意思就是说读到当前位置已经能确定是什么字母时不能因为再读取一位或几位让这个编码能表示另外的字母,

    但哈夫曼树(最优二叉树)在构造的时候就避免了这个问题。为什么能避免呢,因为哈夫曼树的它的字母都在叶子节点上,因此不会出现一个字母的编码为另一个字母编码左起子串的情况。

     

    提问:

    1.为什么要保证长编码不与短编码冲突?

    冲突情况:如果我们已经确定D,E,F,G 用 01 ,010 ,10,001的2进制编码来传输了。那么想传送FED时,我需要传送     1001001,接收方可以把它解析为FDG(10 01 001),当然也能解析为FED(10 010 01),他两编码一样的,这就是编码冲突,(这里编码冲突的原因,也是因为编码时,D的编码是E的编码的左起子串了)显然这是不行的,就像我说压脉带,你如果是日本人会理解为 (你懂得),这就是发出同一种语,得出不同的意的情况。所以不能让一个字母的二进制代表数,为另一个字母的二进制代表数的子串。但为什么实际情况只要求编码时,一个编码不是另一编码的左起子串呢而不是绝对意义上的非子串呢,因为计算机从数字串的左边开始读,如果从右边读,那么可以要求是非右起(无奈)。你又可以问了为什么编码要求是非左起非右起不直接规定不能是子串呢(也行,不过=>),比如说原文中B就是C,F,G的子串,那这不就不符合规则了么。这里是为了哈夫曼的根本目的,优化编码位占用问题,如果完全不能有任何子串那么编码将会非常庞大。但这里计算机是一位一位的·读取编码的,只需要保证计算机在读取中不会误判就行。并且编码占用最少。

    code:0110101001110

    左起子串:011

    右起子串:110

    绝对非子串:1110111  此串在code中完全找不到

    2.那么哈夫曼树怎么避免左起子串问题呢?

    因为哈夫曼是从叶子节点开始构造,构造到根节点的,而且构造时,都是计算两个权值的节点的和与其他叶子节点再生成一个父节点来组成一个新的树。并且不允许任何带有权值的节点作为他们的父节点。这也保证了所有带有权值的节点都被构造为了叶子节点。然后最后编码的时候是从根节点开始走到叶子节点而得出的编码。在有权值的节点又不会出现在任何一条路的路途中的情况,只会出现在终点的情况下,因此不会出现01代表一个字母011又代表一个字母。

    又如原文ABC编码为10010011的情况,当计算机读到10时,由于有左起子串不冲突的原则。那么计算机完全可以保证当前的10就是A字母,然后再往下读010011的部分,然后当读到01时,也完全能确定B,C同理,而不用说因为会出现冲突的编码而接着继续读取之后的编码来确定前面的编码。这样对信息的判断和效率是相当的不利的,也不是说不可以。即使你ABCD,分别用01,011,0111,01111来代替也行,传输后也能精确识别,但是数据量极大呢,想代替整个中文编码呢,那0后面得多少个1才能代表完。因此哈夫曼就是为了获得最少编码量代替最多字符串,并且不冲突,系统不会误判而产生的。

    3.这里要提一下同权不同构

    已经有朋友问起这个问题了。这里要说一下哈夫曼树的构造并不是唯一的

    考虑如下情况:

    有权值分别为 5,29,7,8,14,23,3,11的情况,可以如下图一样构造。

    带权路径长度:

    (5+3+7+8)*4+

    (11+14)*3+

    (23+29)*2

    =271

    也可以如下图构造:

    带权路径长度:

    (3+5)*5+

    7*4+

    (8+11+14)*3+

    (23+29)*2

    =271

    这两种不同的方式构造出来的哈夫曼树,得出的带权路径长度相等,那么选哪颗树都可以,这就叫同权不同构

     

    此问题由博主 https://me.csdn.net/weixin_43690959 昵称:叫我Tim就好了~ 提出,在这里对他表示感谢。

     

     

     

    看懂的朋友留个赞,没看懂的留言我给你单独讲 _(:з」∠)_

    展开全文
  • Java有参构造方法和无参构造方法

    万次阅读 多人点赞 2018-10-29 11:16:29
    Java有参构造方法和无参构造方法 1**、定义:** 编写一个类时没有添加无参构造方法,那么编译器会自动添加无参构造方法;(如果自己添加构造函数,无论有参数或是没参数,默认构造函数都将无效) 编写时添加了有参...

    Java有参构造方法和无参构造方法


    1**、定义:**
    • 编写一个类时没有添加无参构造方法,那么编译器会自动添加无参构造方法;(如果自己添加构造函数,无论有参数或是没参数,默认构造函数都将无效)
    • 编写时添加了有参构造方法而未添加无参构造方法,那么编译器只认有参构造方法而不会默认添加无参构造方法!
    • 如果需要使用无参构造方法,一定要在类里面添加
       
    2、举例:

    定义四个类(说明四种情况):

    类Person1 自己不手动添加任何无参或有参数构造方法            (实例化对象时:编译通过)

    类Person2 自己添加无参的构造方法                                        (实例化对象时:编译通过)

    类Person3 有参数的构造方法                                                   (实例化对象时:不通过)

    类Person4 自己添加无参的构造方法,和有参数的构造方法        (实例化对象时:编译通过)

    //定义类Person1   自己不手动添加任何无参或有参数构造方法
    
    class Person1{
        private int age;
        private String name;
        private String sex;
    
    }
    
    
    //定义类Person2   自己添加无参的构造方法
    
    class Person2{
        private int age;
        private String name;
        private String sex;
        
        public Person2(){
            System.out.println("无参构造方法被调用");
        }
    }
    
    
    //定义类Person3   有参数的构造方法
    
    class Person3{
        private int age;
        private String name;
        private String sex;
        
        public Person3(String name, String sex, int age ){
            this.name = name;
            this.sex = sex;
            this.age = age;
        }
    }
    
    
    //定义类Person4   自己添加无参的构造方法,和有参数的构造方法
    
    class Person4{
        private int age;
        private String name;
        private String sex;
        
        //不带参数的构造函数,可以被重载
        public Person4(){
            System.out.println("无参构造方法被调用");
        }
        
        //带参数对的构造函数
        public Person4(String name, String sex, int age ){
            this.name = name;
            this.sex = sex;
            this.age = age;
        }
    }
    
    
    public class ObjectInit_2 {
        public static void main(String[] args) {
            Person1 person1 = new Person1();//编译通过;①实例化Person对象    ②自动调用构造方法Person( )
    
            Person2 person2 = new Person2();//编译通过;打印: 无参构造方法被调用
    
    
            // 这样写,编译器会报错,原因是系统默认的无参构造方法被有参构造方法覆盖,编译器不能再提供无参构造方法
            Person3 person3 = new Person3();
    
            //Person4 person4 = new Person4();//编译通过;打印: 无参构造方法被调用
    
            Person4 person4 = new Person4("qzz", "man", 18);//编译通过;
        
    
        }
    }
    
    
                                                     2018.10.29/周一
                                                     by 922
    
    展开全文
  • java构造方法:有参构造方法和无参构造方法 一、无参构造方法 1、定义: 如果编写一个javaBean时没有添加无参构造方法,那么编译器会自动添加无参构造方法; 但是如果编写时添加了有参构造方法而未添加无参...

    java构造方法:有参构造方法和无参构造方法

     

    一、无参构造方法

    1、定义:

    如果编写一个javaBean时没有添加无参构造方法,那么编译器会自动添加无参构造方法;

    但是如果编写时添加了有参构造方法而未添加无参构造方法,那么编译器只认有参构造方法而不会默认添加无参构造方法!

    所以,如果需要使用无参构造方法,一定要在类里面添加

     

    2、举例:

    (1)有4个javaBean --------> NoParamInfo.java、 NoParamInfo2.java、 NoParamInfo3.java、 NoParamInfo4.java

    (2)测试

    @Test
    
    public void testNoParamInfo(){
    
    //这样写,编译器不会报错
    
    NoParamInfo  np=new NoParamInfo();
    
    //这样写,编译器也不会报错
    
    NoParamInfo2  np=new NoParamInfo2();
    
    //这样写,编译器会报错,原因是无参构造方法被有参构造方法覆盖,编译器不能提供无参构造方法
    
    NoParamInfo3  np=new NoParamInfo3();
    
    //这样写,编译器不会报错
    
    NoParamInfo4  np=new NoParamInfo4();
    
    //这样写,编译器不会报错
    
    NoParamInfo4  np=new NoParamInfo4(“tina”,'地球村');
    
    }

     

    --------------------- 
    作者:highfei2011 
    来源:CSDN 
    原文:https://blog.csdn.net/high2011/article/details/50788488 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • Java构造方法和子类构造方法

    千次阅读 2019-07-21 23:50:09
    Java构造方法 构造方法是用于初始化一个新建的对象。 普通构造方法 方法名与类名相同 无返回类型 子类不能继承父类的构造方法 不能被static、final、abstract修饰(有final和abstract修饰的是不能被子类继承的,...
  • 在对对象成员变量初始化时,有输入时,通过有参构造方法进行赋值。当没有输入时,可以给个初始值,就通过无参写入默认的,无参调有参完成赋值。 // main方法中 new调用无参构造方法,再完成上面的无参调有参 new ...
  • [Java基础]-- 有参构造方法和无参构造方法

    万次阅读 多人点赞 2016-03-03 15:06:44
    java构造方法:有参构造方法和无参构造方法   一、无参构造方法 1、定义: 如果编写一个javaBean时没有添加无参构造方法,那么编译器会自动添加无参构造方法; 但是如果编写时添加了有参构造方法而未添加无参...
  • java构造方法:有参构造方法和无参构造方法   public class Student {  private String name;  private int age; public Student(){   } public Student(String name){  this.name=name; } public String ...
  • 一、为什么要引入构造方法。 当创建对象的时候需要对属性值初始化,构造方法,即对象创建时要执行的方法。 要求在实例化的同时,就指定好name,和age的值。这就要用到构造方法。又叫做构造器Constructor. 二、构造...
  • Java构造方法

    千次阅读 多人点赞 2019-09-09 19:26:39
    Java构造方法 当新对象被创建的时候,构造方法会被调用。每一个类都有构造方法。当类中没有定义构造函数时,系统会指定给该类加上一个空参数的构造函数。这个是类中默认的构造函数。当类中如果自定义了构造函数,...
  • Java构造方法以及构造方法重载

    千次阅读 2018-12-23 08:49:02
    构造器也叫构造方法(constructor),用于对象的初始化。构造器是一个创建对象时被自动调用的特殊方法,目的是对象的初始化。构造器的名称应与类的名称一致。Java通过new关键字来调用构造器,从而返回该类的实例,是一...
  • 当新对象被创建的时候,构造方法会被调用。每一个类都有构造方法。在程序员没有给类提供构造方法的情况下,Java编译器会为这个类创建一个默认的构造方法。 Java中构造方法重载和方法重载很相似。可以为一个类创建多...
  • java中子类构造方法和父类构造方法

    千次阅读 2019-02-05 11:55:48
    有继承关系的前提下,子类一定会调用父类的构造方法。因为构造方法是用来进行初始化的,子类要初始化,必须先使用父类的构造方法。 以下情形参考: 1.当子类不重写构造方法,子类默认拥有一个无参构造方法,但是,...
  • 一:有参数构造方法 在之前我们要为一个对象赋值,先要创建好对象之后然后“对象名.属性名”或者调用属性的setter为属性赋值。但是在很多时候觉得这样做很麻烦,最好的做法是在创建对象的时候完成属性的初始化操作...
  • 构造方法不能直接调用构造方法,需要使用关键字this
  • Swift-指定构造方法和便利构造方法

    千次阅读 2017-01-06 17:40:25
    指定构造方法和便利构造方法 /* 1、指定构造方法和便利构造方法(Designated Initializer and Convenience Initializers) 便利构造:类类型(针对类class) */ print("1、指定构造方法和便利构造方法") class AB...
  • java构造方法

    千次阅读 2019-05-01 14:56:49
    1 构造方法可以被重载,一个构造方法可以通过this关键字调用另一个构造方法,this语句必须位于构造方法的第一行; 重载:方法的重载(overload):重载构成的条件:方法的名称相同,但参数类型或参数个数不同,才能...
  • 承接面向对象-构造方法1 如何在构造方法中调用另一个重载的构造方法:案例: 编写汽车类 汽车类属性: int id; String brand; String color; int weight; 汽车类中的构造方法: Car(); Car(id,brand); Car...
  • 构造方法 构造器 构造函数

    千次阅读 2017-04-03 05:26:29
    类中可以生命:成员变量,方法,构造器 成员变量包括:实例变量,静态变量 ...构造器:用于创建初始化对象的方法,也叫“构造方法”,"构造函数"  1)给成员变量初始化  2)与类同名,没有返回类型
  • 构造方法和方法重载

    千次阅读 2019-02-13 19:45:00
    前面几堂课已经学过了有关java语言中类的有关知识,类是对象的抽象定义,类也是一种模板。...Java语言中会默认提供给编程者一个无参数的构造方法,在使用默认的构造方法时,不能给构造方法提供任何参数...
  • C#构造方法

    千次阅读 多人点赞 2014-03-17 17:20:53
    所有的类都有构造方法,如果没有定义的构造方法,系统默认生成空的构造方法;如果自己定义了默认的构造方法就会失效了。 2.用途  构造方法用于对类进行初始化,在创建类时自动调用。 3示例  pri

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 230,063
精华内容 92,025
热门标签
关键字:

构造方法