java变量的初始化和属性的默认值

问题描述

java变量的初始化和属性的默认值

java变量的初始化和属性的默认值问题。
为什么local variables 使用时要赋初值,而global variables 系统默认初值?(我这样理解对吗?本人小白,求各路大神指点!)

解决方案

对于类成员,会自动附初值,对于方法内部变量,不会,你最好给一下值

解决方案二:

这个你用时手动给一下值就是了,也没有那么麻烦吧。

解决方案三:

对于成员变量,都有对应的默认值,而对于局部变量,在使用前必须先赋值,你可以自己写代码验证下。

解决方案四:

尝试着为楼主解释一下这是为什么。
首先要知道,局部变量一般分配在栈上面(值不一定分配在栈上面,比如引用类型的可能是分配在堆上面,也可能分配在常量区),而对象是分配在堆上面的。
java是面向对象的语言,对象一般分配在堆上面,成员变量是对象的一个属性,是随着对象的创建而分配空间,并经过JVM初始化,那么为什么jvm会为堆上的对象的属性初始化呢,试想一下,现实世界中,一般一个人有胳膊有腿,到了JVM里面,你new出一个人来,结果缺胳膊少腿的,肯定不行。所以JVM会为成员变量进行初始化,完了在运行时,你还可以去改变。
那么局部变量为什么不会初始化呢?声明一个局部变量 Person person变量,为什么一定要初始化才能用呢?JVM为什么不先帮我初始化一下呢?我估摸着JVM是考虑资源的问题,因为大家在使用局部变量的时候,一般想这个局部变量来存储我们想要储存的值,一般不会拿null之类的来做业务逻辑处理吧。所以JVM认为你应该自己指定一个值,然后来使用它。所以他就不帮我们初始化局部变量了,如果他初始化了局部变量,但通常又不是我们想要的,在局部变量为引用类型的时候,值是分配在堆上面或常量区里面,初始化了就占了内存,你又不用,JVM一时半会儿也不回收,不是浪费资源么?

个人的理解,不一定完全正确。大牛也来说说吧。

时间: 2024-10-02 08:45:45

java变量的初始化和属性的默认值的相关文章

WinForm控件开发总结(十) 为属性设置默认值

本系列的前面几篇文章讲解了如何来定义属性以及更有效的编辑属性,接下来我要讲一下控件属性的默 认值.如果我们希望自己开发的控件更易于被其它开发者使用,那么提供默认值是非常值得的. 如果你为属性设定了默认值,那么当开发者修改了属性的值,这个值在Property Explorer中将会以粗 体显示.VS为属性提供一个上下文菜单,允许程序员使用控件把值重置为默认值.当VS进行控件的串行化 时,他会判断那些值不是默认值,只有不是默认值的属性才会被串行化,所以为属性提供默认值时可以大 大减少串行化的属性数目

Java中八种基本数据类型的默认值_java

通过一段代码来测试一下 8种基本数据类型的默认值 package dierge; public class Ceshi { int a; double b; boolean c; char d; float f; byte e; long h; short j; public static void main(String args[]){ Ceshi a=new Ceshi(); System.out.println("整型的默认值是:"+a.a); System.out.print

浅谈Java变量的初始化顺序详解_java

规则1(无继承情况下):对于静态变量.静态初始化块.变量.初始化块.构造器,它们的初始化顺序依次是(静态变量.静态初始化块)>(变量.初始化块)>构造器证明代码: 复制代码 代码如下: public class InitialOrderTest {    // 静态变量    public static String staticField = "静态变量";    // 变量    public String field = "变量";    // 静

java.lang.reflect操作对象属性(域)的值

package reflect; import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /*2015-10-28*/ public class RefactorDemo { /** * @param args * @throws NoSuchF

Java变量初始化的时机

对于JAVA中变量的初始化是一个很基础的问题,其中的一些问题也是易被学习者所忽略.当在编写代码的时候碰到时,常被这些问题引发的错误,感觉莫名其妙.而且现在许多大公司的面试题,对于这方面的考查也是屡试不爽.以下是对java变量初始化的时机的分析. [java变量执行初始化的步骤] java是一门强类型语言,因此java语言规定每个变量必须先声明,然后才能使用,声明变量时必须指定该变量的数据类型.首先看下面这条语句的执行过程: int a = 5; 实际上面这条语句会被拆分成两个过程执行: (1)i

Struts2的动态Action和全局跳转视图以及配置各项默认值

1:Struts2的默认访问后缀是.action(特别需要注意的是改了配置文件web.xml或者struts.xml需要重启服务器)  2:Struts2中常用的常量介绍:<!-- 一:全局配置 --> <!--1.请求数据编码  --><constant name="struts.i18n.encoding" value="UTF-8"/><!--2.修改struts2默认的自定义后缀 --><constant

struts2 s:select默认值的问题

问题描述 struts2的s:select标签里list属性如果是一个Map,那么map的key就对应于select标签中的value,map中的value就对应于select标签中的option.而如果是一个List或者是一个Set,那么可以通过listKey和listValue指定.在List中可以通过value属性来设置select的默认值但是map中的value已经有其他的作用,那map的默认值该怎么设置<s:select name="productOffer.state"

JAVA基础培训(4) 熟悉属性/变量的访问权限

和前一个教程一样,我们也建了一个子目录,用来存放不同package的类 属性分为2种, 1 类实例的属性,属于某个类的实例所有,必须通过实例访问 2 类级的静态属性,属于类和所有实例所有,可通过类或者实例都可以访问 属性的权限分为 1 private 私有属性 2 [default] 默认属性,也就是啥都不写的那种,运行同一个package的访问 3 protected 被保护的属性,允许同一个package的访问,以及子类访问 4 public 公开的属性,可以被任何类访问 先看主类 less

Java中static静态变量的初始化完全解析_java

静态变量初始化顺序 1.简单规则 首先先看一段最普遍的JAVA代码: public class Test { public static Test1 t = new Test1(); public static int a = 0; public static int b; public static void main(String[] arg) { System.out.println(Test.a); System.out.println(Test.b); } } class Test1