首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么java构造函数是这样的。变量没有被赋值给数组?

为什么Java构造函数是这样的? 构造函数是一种特殊的方法,用于创建对象并初始化对象的状态。Java构造函数具有以下特点:

  1. 方法名与类名相同:构造函数的方法名必须与类名完全相同,包括大小写。
  2. 没有返回类型:与其他方法不同,构造函数没有明确的返回类型。它们不返回任何值,甚至不返回void。
  3. 自动调用:构造函数在创建对象时自动调用。当使用new关键字创建对象时,会自动调用与该对象类型匹配的构造函数。
  4. 可重载:与普通方法一样,构造函数也可以被重载。同一个类可以有多个构造函数,每个构造函数具有不同的参数列表。
  5. 初始化对象状态:构造函数主要用于初始化对象的状态,为对象的成员变量赋初值。可以在构造函数中对成员变量进行赋值,或执行其他必要的初始化操作。

为什么变量没有被赋值给数组? 如果在Java中变量没有被赋值给数组,可能有以下几种情况:

  1. 声明但未实例化:当声明一个数组变量时,没有对其进行实例化,即没有使用new关键字来创建数组对象。在这种情况下,数组元素没有被分配内存,因此不能对其进行访问或赋值。解决方法是使用new关键字实例化数组对象。
  2. 数组下标错误:如果尝试通过错误的数组下标访问数组元素,可能会导致变量未被赋值给数组。Java数组的下标从0开始,如果数组长度为n,则有效的下标范围是0到n-1。如果使用超出数组长度或负数的下标,将导致数组越界异常。确保使用正确的下标来访问数组元素。
  3. 变量赋值错误:在代码中,如果没有正确地将值赋给数组变量,就无法将值存储到数组中。检查代码,确保正确地将值赋给数组变量。

请注意,以上是一些可能导致变量没有被赋值给数组的常见情况,具体原因需要根据代码上下文和具体情况进行分析和排查。在编写代码时,请确保正确地初始化和赋值数组变量,以避免出现未被赋值的情况。

相关搜索:为什么我的cmake函数没有给参数赋值?为什么必须先在Java构造函数中委托给不同的构造函数?如何将数组(类变量)的大小赋给构造函数?在没有调用构造函数的情况下赋值给boost::intrusive_ptr?在Java中有没有使用构造函数参数快速赋值多个类变量的方法?'NoneType‘对象没有’append‘属性.为什么会这样,因为我没有将该语句赋值给另一个变量Laravel:为什么我的变量在控制器的构造函数中时没有被设置?在函数参数中赋值变量是如何工作的?这样做的目的是什么?Java如何将数组中的变量赋值给另一个数组为什么构造函数中的实例变量没有显示在输出中?为什么函数调用需要参数名,而赋值给变量的函数不允许参数名?枚举*似乎被多次初始化,构造函数被多次调用。如果我是对的,为什么?为什么Task.Run参数中使用的外部变量被认为是未赋值的?为什么这个对象中的变量没有被它的回调函数修改?UnboundLocalError:赋值前引用的局部变量。为什么进入函数时初始化的值没有赋值作为(构造函数)函数的参数的扩展运算符是否总是导致数组,如果是,为什么?如何在while循环中保持数据持久化,特别是当数据被赋值给函数中的变量时?为什么输入变量在我的递归调用过程中会改变,即使它没有被重新赋值?为什么Java类型推断在整数数组的集合的构造函数中失败,例如PriorityQueue<int[]>?为什么超类空构造函数是必需的,但在可怕的菱形情况下却没有调用?
相关搜索:
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Java构造函数没有返回值,是怎么赋值的?

众所周知,在java里是不能给构造函数写返回值的,如果在低版本的编译器定义一个构造器写上返回值可能会报错,高版本里面他就是一个普通的方法。...可是如果构造函数没有返回值,那么比如Test t = new Test()我们new一个对象的时候是怎么赋值的呢?...我在书里找到这样一段话: 在 Java 虚拟机层面上,Java 语言中的构造函数是以一个名为init的特殊实例初始化方法的形式出现的,init这个方法名称是由编译器命名的,因为它并非一个合法的 Java...实例初始化方法只能在实例的初始化期间,通过 Java 虚拟机的 invokespecial 指令来调用, 只有在实例正在构造的时候,实例初始化方法才可以被调用访问。...init代表着虚拟机调用构造函数,现在情况很明显,构造函数返回类型是void,那么它究竟是怎么赋值的呢?

2.1K00

构造函数没有返回值是怎么赋值的?

众所周知,在java里是不能给构造函数写返回值的,如果在低版本的编译器定义一个构造器写上返回值可能会报错,高版本里面他就是一个普通的方法。...可是如果构造函数没有返回值,那么比如Test t = new Test()我们new一个对象的时候是怎么赋值的呢?...我在书里找到这样一段话: 在 Java 虚拟机层面上,Java 语言中的构造函数是以一个名为init的特殊实例初始化方法的形式出现的,init这个方法名称是由编译器命名的,因为它并非一个合法的 Java...实例初始化方法只能在实例的初始化期间,通过 Java 虚拟机的 invokespecial 指令来调用, 只有在实例正在构造的时候,实例初始化方法才可以被调用访问。...init代表着虚拟机调用构造函数,现在情况很明显,构造函数返回类型是void,那么它究竟是怎么赋值的呢?

1.7K20
  • 构造函数没有返回值是怎么赋值的?

    个人原创100W+访问量博客:点击前往,查看更多 转自:艾小仙 众所周知,在java里是不能给构造函数写返回值的,如果在低版本的编译器定义一个构造器写上返回值可能会报错,高版本里面他就是一个普通的方法。...可是如果构造函数没有返回值,那么比如Test t = new Test()我们new一个对象的时候是怎么赋值的呢?...我在书里找到这样一段话: 在 Java 虚拟机层面上,Java 语言中的构造函数是以一个名为init的特殊实例初始化方法的形式出现的,init这个方法名称是由编译器命名的,因为它并非一个合法的 Java...实例初始化方法只能在实例的初始化期间,通过 Java 虚拟机的 invokespecial 指令来调用, 只有在实例正在构造的时候,实例初始化方法才可以被调用访问。...init代表着虚拟机调用构造函数,现在情况很明显,构造函数返回类型是void,那么它究竟是怎么赋值的呢?

    1.7K20

    计算机程序的思维逻辑 (13) - 类

    p.x = 2; p.y = 3; 给对象的变量赋值,语法形式是:对象变量名.成员名。...没有返回值,也不能有返回值。这个规定大概是因为返回值没用吧。 与普通方法一样,构造方法也可以重载。第二个构造方法是比较容易理解的,使用this对实例变量赋值。...为什么Java有时候帮助自动生成,有时候不生成呢?...你在没有定义任何构造方法的时候,Java认为你不需要,所以就生成一个空的以被new过程调用,你定义了构造方法的时候,Java认为你知道自己在干什么,认为你是有意不想要不带参数的构造方法的,所以不会帮你生成...堆中的内存是被垃圾回收机制管理的,当没有活跃变量指向对象的时候,对应的堆空间就可能被释放,具体释放时间是Java虚拟机自己决定的。活跃变量,具体的说,就是已加载的类的类变量,和栈中所有的变量。

    579100

    聊聊并发编程:final关键字

    扩展思考,为什么String类为什么是final的?先看下源码 final修饰的String,代表了String的不可继承性,final修饰的char[]代表了被存储的数据不可更改性。...在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。...我们先假设线程B读对象引用与读对象的成员域之间没有重排序,那以下是一种可能的执行时序: 这里可以看出, 写普通域的操作被编译器重排序到了构造函数之外,读线程B错误地读取了普通变量i初始化之前的值。...对于引用类型,写final域的重排序规则对编译器和处理器增加了如下约束:在构造函数内对一个final引用的对象的成员域的写入,与随后在构造函数外把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序...那下面就可能是一种时序: 1是对final域的写入,2是对这个final域引用的对象的成员域的写入,3是把被构造的对象的引用赋值给某个引用变量。

    17930

    一文了解 final 关键字的特性、使用方法以及实现原理

    final变量一旦被初始化后不能再次赋值。 本地变量必须在声明时赋值。因为没有初始化的过程 在匿名类中所有变量都必须是final变量。...对于 final 域,编译器和处理器要遵守两个重排序规则: 在构造函数内对一个 final 域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。...这行代码包含两个步骤: 构造一个 FinalExample 类型的对象; 把这个对象的引用赋值给引用变量 obj。...对于引用类型,写 final 域的重排序规则对编译器和处理器增加了如下约束: 在构造函数内对一个 final 引用的对象的成员域的写入,与随后在构造函数外把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序...下面是一种可能的线程执行时序: ? 在上图中,1 是对 final 域的写入,2 是对这个 final 域引用的对象的成员域的写入,3 是把被构造的对象的引用赋值给某个引用变量。

    1.4K20

    ​JMM中的final关键字解析

    对于final域,编译器和处理器要遵守两个重排序规则: 在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。...这行代码包含两个步骤: 构造一个FinalExample类型的对象; 把这个对象的引用赋值给引用变量obj。...对于引用类型,写final域的重排序规则对编译器和处理器增加了如下约束: 在构造函数内对一个final引用的对象的成员域的写入,与随后在构造函数外把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序...下面是一种可能的线程执行时序: ? 在上图中,1是对final域的写入,2是对这个final域引用的对象的成员域的写入,3是把被构造的对象的引用赋值给某个引用变量。...通过为final域增加写和读重排序规则,可以为java程序员提供初始化安全保证:只要对象是正确构造的(被构造对象的引用在构造函数中没有“逸出”),那么不需要使用同步(指lock和volatile的使用)

    62720

    夯实Java基础系列4:一文了解final关键字的特性、使用方法,以及实现原理

    final变量一旦被初始化后不能再次赋值。 本地变量必须在声明时赋值。 因为没有初始化的过程 在匿名类中所有变量都必须是final变量。...对于 final 域,编译器和处理器要遵守两个重排序规则: 在构造函数内对一个 final 域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。...这行代码包含两个步骤: 构造一个 FinalExample 类型的对象; 把这个对象的引用赋值给引用变量 obj。...对于引用类型,写 final 域的重排序规则对编译器和处理器增加了如下约束: 在构造函数内对一个 final 引用的对象的成员域的写入,与随后在构造函数外把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序...,3 是把被构造的对象的引用赋值给某个引用变量。

    38400

    php面向对象第二篇

    我们接着来: 构造函数什么时候产生:创建对象的过程中产生的哈 当new people();的过程中的调用构造函数然后才能算得上一个对象哈 何为构造,就是构想创造嘛是吧,创造一个对象出来是吧 同学们...为什么构造函数是__contruct()子的,为什么不像java那样构造函数名与类名一致呢? ?...php这样做的目的是: 好处:如果类名发生改变不需要改构造函数,麻烦把,简洁一点把,构造函数名独立于类名把。 缺点;不好记把. 记住,一个类中只能有一个构造函数,只服务于他类所创建的实例哈。...php class person { private $name; function __set($a,$name)//第一个为要赋值给的变量,第二个为要赋值的变量$name为李文,$a为新定义的变量...{ $this->$a=$name;//语法是这样的哈 } function __get($a)//获取赋值好的变量,获取新定义并赋值好的变量 { return $this->$a;/

    50120

    深入理解Java内存模型(六)——final

    对于final域,编译器和处理器要遵守两个重排序规则: 在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。...这行代码包含两个步骤: 构造一个FinalExample类型的对象; 把这个对象的引用赋值给引用变量obj。...假设线程B读对象引用与读对象的成员域之间没有重排序(马上会说明为什么需要这个假设),下图是一种可能的执行时序: 在上图中,写普通域的操作被编译器重排序到了构造函数之外,读线程B错误的读取了普通变量i初始化之前的值...对于引用类型,写final域的重排序规则对编译器和处理器增加了如下约束: 在构造函数内对一个final引用的对象的成员域的写入,与随后在构造函数外把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序...下面是一种可能的线程执行时序: 在上图中,1是对final域的写入,2是对这个final域引用的对象的成员域的写入,3是把被构造的对象的引用赋值给某个引用变量。

    75530

    一次活见鬼的调试经历

    结果:第一句赋值成功,第二句没有效果。 我不再在构造函数中赋值,而是另开一个方法单独赋值。问题依然存在。 ? ? 我开始怀疑是不是注解的问题。...我把attestationType的类型修改为byte[]和int[]。赋值问题不再出现!于是我现在得到的结论是:被注解的short[]类型会出现赋值问题。 为什么偏偏是short[]类型呢?...步骤6的问题,是因为我刚好把步骤22所说的断电给移动了,导致了这个现象,其实和值并没有关系。...如果我只是用打印的方法查询该变量值而不是debug,在运行时的构造函数中该值不会被改变。 所以表面看起来只是单步调试了一个赋值语句,而值就被变化了。...深层结果是调试器调用了toString()导致的修改值行为。 本次经历给我的经验是: 对数组的赋值和操作,尤其是在构造函数时,应当进行拷贝而不是直接引用(数组直接clone()就可以了)。

    43920

    【C++】C++11常用特性总结

    wyn命名空间中的移动构造和移动赋值也实现了,实际移动构造和移动赋值的原理很简单,就是因为右值是将亡值嘛,那既然你都是将亡值了,何不直接把资源转移给被拷贝或是被赋值的对象呢?...把重新拷贝的资源给到被拷贝对象或被赋值对象,这当然一点问题都没有。...此时就需要移动拷贝和移动赋值来提高这样场景下的效率,怎么提高呢?很简单,我们不再拷贝资源,而是直接将右值的资源移动给被拷贝对象或被赋值对象,省去一次深拷贝。...但对于Date这样不涉及资源申请的日期类,就没有必要实现移动构造和移动赋值了,因为你没有资源啊,压根不会出现深拷贝的场景,你所有资源的拷贝都是浅拷贝,移动语义的接口和拷贝构造、拷贝赋值这些接口没有区别,...对于右边的场景来说,编译器是不能优化的,因为被赋值对象是已经存在的,编译器不能直接构造ret,必须以赋值重载的方式来拷贝ret,那就必须需要一个临时变量将str的资源保存下来,然后将临时变量赋值给ret

    82140

    java基础知识总结(绝对经典)

    构造函数:用于给对象进行初始化,是给与之对应的对象进行初始化,它具有针对性,函数中的一种。 特点: 1:该函数的名称和所在类的名称相同。 2:不需要定义返回值类型。 3:该函数没有具体的返回值。...() 8:将首地址赋值给p ,p变量就引用了该实体。...发现子类构造函数运行时,先运行了父类的构造函数。为什么呢?...而super():是在调用父类中空参数的构造函数。 为什么子类对象初始化时,都需要调用父类中的函数?(为什么要在子类构造函数的第一行加入这个super()?)...4:被final修饰的变量是一个常量,只能赋值一次。 其实这样的原因的就是给一些固定的数据起个阅读性较强的名称。 不加final修饰不是也可以使用吗?那么这个值是一个变量,是可以更改的。

    65500

    C++之类和对象

    注意这里一定还要带分号 类的主体一般由成员变量和成员函数组成,但是,是把成员变量放在前面还是把成员函数放在前面这个并没有影响,因为C++认为一个类就是一个整体,并没有什么前后之分。...,就没有必要再显示定义拷贝构造函数了,比如日期类: 可以看到,我没有写拷贝构造,但是编译器生成的默认拷贝构造将d1变量成功拷贝给了d2。...因为在进行赋值操作的时候我们经常会连续赋值如(a=b=c)这样的操作,其实这个连续赋值是从右往左进行的,也就是说其实是先将c赋值给b,在将b=c这个赋值表达式的返回值赋值给a,所以还是需要返回值。...将临时变量赋值给d3的时候又要调用一次d3的构造函数,所以这个过程其实是拷贝构造+构造得到的,不过编译器做了优化跳过了拷贝构造的过程。但是如果你使用的是一些较老的编译器就可能没有优化。...,在Java中使用频繁,所以大家只需要了解有这个东西即可 匿名对象 所谓匿名对象就是在定义时不给它取名字,这样的对象生命周期只有定义那一行,因为没有名字所以无法被别人使用,一旦出了那一行就没有人能记得它了

    1.2K00

    Java基础知识大全(二)

    构造函数是用于创建对象,并对其进行初始化赋值,对象一建立就自动调用相对应的构造函数, (3)构造方法的注意事项: A:如果一个自定义类没有构造方法,系统会默认给出一个无参构造方法。...C:调用区别 构造方法是在创建对象时被调用的,一个对象建立,只调用一次相应构造函数 普通成员方法是由创建好的对象调用,可以调用多次8、构造代码块: (1)作用:给对象进行初始化,对象一建立就执行,...而且优先于构造函数执行 (2)构造代码块和构造函数的区别: 构造代码块是给所有不同对象的共性进行统一初始化 构造函数是给对应的对象进行初始化 9、this关键字...(6)调用构造代码块对对象进行初始化。(如果没有就不执行) (7)调用构造方法对对象进行初始化。对象初始化完毕。 (8)将对象的内存地址赋值给p变量,让p变量指向该对象。...String[]:字符串数组 args:数组名在运行的时候,通过java命令给args数组赋值。

    64051

    Java 枚举

    Java 枚举 枚举 enum 什么是枚举类: Java 枚举是一个特殊的类,一般表示一组常量 比如: 一年的 4 个季节,一个年的 12 个月份,一个星期的 7 天,方向有东南西北等… 类似这种当一个变量有几种固定可能的取值时..., 可以将它定义为枚举类型 出现: Java1.5 之前是没有 枚举 和 注解 的....public static final的 //因为是私有的构造函数,类中进行创建......~ Java中被 Final修饰的变量的几种赋值方式 Final 表示"最后的、最终的"含义,变量一旦赋值后,不能被重新赋值 被 Final 修饰的实例变量必须显式指定初始值 Final 修饰符通常和...,也是可以的 构造块会在创建对象时被调用,每次创建时都会被调用,优先于类构造函数执行. */ public class FinalTest { private final Integer num

    9710

    Java并发关键字-final

    final域为引用类型 final的实现原理 为什么final引用不能从构造函数中“溢出” final的简介 final可以修饰变量,方法和类,用于表示所修饰的内容一旦赋值之后就不会再被改变,比如String...由于a,b之间没有数据依赖性,普通域(普通变量)a可能会被重排序到构造函数之外,线程B就有可能读到的是普通变量a初始化之前的值(零值),这样就可能出现错误。...对final修饰的对象的成员域写操作 针对引用数据类型,final域写针对编译器和处理器重排序增加了这样的约束:在构造函数内对一个final修饰的对象的成员域的写入,与随后在构造函数之外把这个被构造的对象的引用赋给一个引用变量...引用数据类型: 额外增加约束:禁止在构造函数对一个final修饰的对象的成员域的写入与随后将这个被构造的对象的引用赋值给引用变量 重排序 final的实现原理 上面我们提到过,写final域会要求编译器在...具体是否插入还是得看是什么处理器 为什么final引用不能从构造函数中“溢出” 这里还有一个比较有意思的问题:上面对final域写重排序规则可以确保我们在使用一个对象引用的时候该对象的final域已经在构造函数被初始化过了

    70730

    了解final关键字在Java并发编程领域的作用吗?

    在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给个引用变量,这两个操作之间不能重排序。...存在的一种可能执行时序图,如下:由于a,b之间没有数据依赖性,普通域(普通变量)a可能会被重排序到构造函数之外,线程B就有可能读到的是普通变量a初始化之前的值(零值),这样就可能出现错误。...final域为引用类型对final修饰的对象的成员域写操作针对引用数据类型,final域写针对编译器和处理器重排序增加了这样的约束:在构造函数内对一个final修饰的对象的成员域的写入,与随后在构造函数之外把这个被构造的对象的引用赋给一个引用变量...由于一个final域的引用对象的成员域写入不能与随后将这个被构造出来的对象赋给引用变量重排序,因此2和3不能重排序。...引用数据类型: 额外增加约束:禁止在构造函数对一个final修饰的对象的成员域的写入与随后将这个被构造的对象的引用赋值给引用变量 重排序final的实现原理写final域会要求编译器在final域写之后

    11810

    第二阶段-Java面向对象:【第一章 面向对象】

    关于初始化问题我们在下面详细讲解,但是我现在还有一个问题,在我们学习java中内存分配的时候,有这样一句话,“堆内存用来存放new创建的对象和数组” 换句话说对象存在于堆中,而成员变量存在于类中而且对象是类的个体...,提供公共方法对其访问 思考过程: 通过对象去给成员变量赋值,可以赋值一些非法的数据 这是不合理的。...所以在Student类中提供一个方法来对数据进行校验 但是如果偏偏不调用方法来赋值,还是直接赋值 这样我们的方法就没有起作用 所以我们必须强制要求使用我的方法,而不能直接调用成员变量 针对这种情况 Java...1.2 构造方法 构造方法和它所在类的名字相同,但构造方法没有返回值。 通常会使用构造方法给一个类的实例变量赋初值,或者执行其它必要的步骤来创建一个完整的对象 怎么理解呢?...给成员变量赋值的两种方法: A:setXxx() ? B:构造方法 ?

    56220

    java从入门到精通四(面向对象上,类与对象的实现,代码块的执行顺序)

    2:方法内部类 顾名思义,该类是定义在方法中的,只能被本方法所使用,所以就不可以给public,static权限了。和局部变量一下,方法外部无法访问。...接口中是不可以有具体的方法和成员变量的。没有构造方法,而且不能示例话,只能被实现。接口之间也具有继承关系,并且,接口只能继承接口。一个类可以实现多个接口,且若实现,必须实现接口中的方法。...两种方法给private赋值 1、 在原来的类里定义一个方法,直接调用这个方法给它赋值 缺点:只能实现对私有属性赋值,但是没有办法取值。 2、 在原类里重载一个还有private参数的方法。...至于机理,我们这样去理解,非静态方法/变量只有实例化之后才被存放入堆的。没有实例化只会在栈内存,静态方法与变量在堆里。我是这样理解的,但其实你看网上会说有关方法区的相关。...我们这样来做 普通方法是需要通过对象来调用的,静态方法可以直接调用。当然,你也可以通过对象调用。如下: 非静态成员方法/变量都是必须依赖具体的对象才能够被调用。

    76420
    领券