变量未初始化这个问题,相信是几乎所有编程者都遇到过的一个编译期异常
int a; System.out.println(a);
Integer b ; System.out.println(b);
对于这两句不知道大家有什么看法
我遇到过一个面试官,记得当时是去面试java讲师,他问我基本数据类型和包装数据类型的区别
我回答了一大堆,最后说基本上数据类型整数型默认值是0,布尔型默认值是false,字符型默认值是\u0000,浮点型默认0.0,引用数据类型默认值是null
他当时就问我,以你的意思是我定义一个int变量,不给他复制,使用System.out.println打印是0?
我肯定回答是,然后他告诉我说不是,说唯有定义成数组才有默认值,其他时候是没有的,不信你回去试,根本打不出来
我当时就惊了,我编程这么久,难道一直理解都是错误的?
public class A { static int a ; public static void main(String[] args) { System.out.println(a); } }
回家我就写了这么一段代码,发现没问题啊,还以此试了基础数据类型都没问题,我当时就觉得他挺逗的
后来我问了我一个朋友这个问题,他说应该会报错吧,变量未初始化
然后我就知道了
public static void main(String[] args) { int a ; System.out.println(a); }
那个面试官肯定是这么理解的,把变量放在了方法里面
如果把变量放到类里面,那我肯定对的,但是如果放到方法里面呢?到底谁对?谁错?
其实我觉得我还对的,因为从机器的角度出发,不管初始化没有初始化,把结果输出了就行了
上一章说过,基础数据类型来自c语言的函数库,在里面本身就给赋值了,这里我们暂时不解释,因为这里超出了java的范围,我们看看引用数据类型
假如我定义String类型呢?答案还是一样的
我们来看看java源码
/** * Prints a string. If the argument is <code>null</code> then the string * <code>"null"</code> is printed. Otherwise, the string's characters are * converted into bytes according to the platform's default character * encoding, and these bytes are written in exactly the manner of the * <code>{@link #write(int)}</code> method. * * @param s The <code>String</code> to be printed */ public void print(String s) { if (s == null) { s = "null"; } write(s); }
从上面我们可以看出,不管我们传递什么值都是能打印出东西的,那么为什么会有变量未初始化呢
在编程之中,空引用会引发空指针异常,
因为从java的角度来说,任何变量未定义值都是null(基础类型不属于java角度,只是引用),会引发空指针异常,只是像print这种判空的方法比较特殊而已,空的话代表你不引用,直接传个null就是,何必整个变量,因此才会有变量未初始化这么一个编译期的异常,导致了有的人认为基础数据类型不初始化无值的情况
相关推荐
注意:本文所说的全局变量指的是 variables with static storage,措词来自 c++ 的语言标准文档。 什么时候初始化 ... static initialization: 静态初始化指的是用常量来对变量进行初始化,主要包括 zero init
易语言静态变量初始化源码,静态变量初始化,静态变量初始化例子
Java 类加载器静态变量初始化机制详解 Java 类加载器是 Java 语言的核心组件之一,负责将 Java 字节码文件加载到内存中,以便 JVM 可以执行它们。在 Java 中,类加载器是通过委派机制来实现的,即一个类加载器可以...
详细讲解java类中静态变量,普通标量,对象、基本类型的初始化顺序。
C++中,全局变量只能声明、初始化,而不能赋值 也就是说,下面这样是不被允许的: #include using namespace std; int a; a = 2; int main() { return 0; } 错误提示是: C++ requires a type specifier for all...
易语言源码易语言静态变量初始化源码.rar 易语言源码易语言静态变量初始化源码.rar 易语言源码易语言静态变量初始化源码.rar 易语言源码易语言静态变量初始化源码.rar 易语言源码易语言静态变量初始化源码.rar ...
易语言静态变量初始化源码.zip这个是易语言源码,希望是你需要的例程,只有学习才会进步,感谢你的关注。谢谢
本附件是相关博文的示例工程,欢迎有需要的小伙伴下载。下载后使用vs2013直接可以编译测试。希望感兴趣的小伙伴能亲自动手实战。
重点说明了VC++全局变量动态初始化的顺序
以下是对java变量初始化的时机的分析。 【java变量执行初始化的步骤】 java是一门强类型语言,因此java语言规定每个变量必须先声明,然后才能使用,声明变量时必须指定该变量的数据类型。首先看下面这条语句的...
主要介绍了浅谈js中变量初始化的相关资料,需要的朋友可以参考下
今天小编就为大家分享一篇对Tensorflow中的变量初始化函数详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
主要介绍了Java静态和非静态成员变量初始化过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
论坛首页 (/home)论坛牛人 (/rank)论坛地图 (/map)的顺序应该是按照你成员声明顺序初顺序应该是按照你成员声明顺序初始…例化子类的对象的时候会调
java语言规定每个变量必须先声明,然后才能使用,声明变量时必须指定该变量的数据类型
一般情况下,tensorflow里面变量初始化过程为: #variables ........... #..................... init = tf.initialize_all_variables() sess.run(init) 这里 tf.initialize_all_variables() 会初始化所有的...
NULL 博文链接:https://crazybackkom.iteye.com/blog/968174
资源介绍: 源码演示了易语言静态变量的用法。是易语言初级例程, 资源作者:
为您提供易语言静态变量初始化源码下载,易语言静态变量初始化源码系统结构:静态变量初始化例子, ======窗口程序集_启动窗口 | | | |------ __启动窗口_创建完毕 | | | |------ _按钮1_被单击 | | | |------ 静态...
这里挑出一个最新发现的一个让我郁闷半天的小问题展开来聊聊。