首页
学习
活动
专区
工具
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虚拟机自己决定。活跃变量,具体说,就是已加载变量,和栈中所有的变量

    578100

    聊聊并发编程:final关键字

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

    16930

    一文了解 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使用)

    62020

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

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

    38000

    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;/

    49920

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

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

    74530

    一次活见鬼调试经历

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

    43720

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

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

    81140

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

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

    65400

    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数组赋值

    63451

    Java 枚举

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

    9310

    Java并发关键字-final

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

    69130

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

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

    11610

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

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

    55320

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

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

    75020
    领券