`
神绮_H_亚里亚
  • 浏览: 10446 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

变量初始化

阅读更多

变量未初始化这个问题,相信是几乎所有编程者都遇到过的一个编译期异常

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就是,何必整个变量,因此才会有变量未初始化这么一个编译期的异常,导致了有的人认为基础数据类型不初始化无值的情况

0
1
分享到:
评论

相关推荐

    C++全局变量初始化的一点总结

    C++中的全局变量初始化是一个重要的话题,涉及到程序的正确性和可预测性。全局变量,即具有静态存储期的变量,其生命周期始于程序开始,终于程序结束。本文将深入探讨全局变量初始化的时机、方式以及一些处理特殊...

    全局变量初始化导致的dll加载失败工程

    标题中的“全局变量初始化导致的dll加载失败工程”是一个典型的C++编程问题,涉及到动态链接库(DLL)的加载机制以及全局变量的初始化顺序。在C++编程中,全局变量的初始化顺序是一个需要深入理解的概念,尤其是在...

    易语言静态变量初始化

    总的来说,易语言中的静态变量初始化是程序设计中的一个重要概念,尤其是在需要保存函数间状态或者实现某种计数功能时。理解并恰当使用静态变量,可以极大地提高代码的效率和可读性。在实际编程过程中,应根据需求...

    Java变量初始化

    Java 变量初始化详解 Java 变量初始化是 Java 语言的基础知识点之一,但也往往被学习者所忽略。 Java 变量初始化的时机是指在 Java 语言中变量的初始化过程,包括变量的声明、初始化和赋值的步骤。 Java 变量声明 ...

    VC++全局变量初始化-16.09.26

    ### VC++全局变量初始化详解 #### 一、程序启动与全局变量初始化 在VC++环境中,当一个程序启动时,其加载过程与全局变量的初始化紧密相关。在本篇文章中,我们将详细介绍VC++中全局变量的初始化过程,尤其是动态...

    易语言静态变量初始化源码.zip

    在这个“易语言静态变量初始化源码.zip”压缩包中,我们可以预见到它包含了一个或多个示例程序,这些程序主要展示了如何在易语言中使用静态变量进行初始化。 在编程中,变量是存储数据的容器,而静态变量有别于普通...

    Qt变量初始化,为何要与声明的次序保持一致?-CSDN论坛1

    在编程语言中,特别是在C++和Qt框架下,变量初始化的顺序确实是一个重要的概念,它与成员变量在类中的声明顺序密切相关。这个问题涉及到C++的构造函数和成员初始化列表。 在C++中,当创建一个类的对象时,构造函数...

    探究java的ClassLoader及类变量初始化顺序

    理解ClassLoader的工作机制以及类变量初始化的顺序对于深入理解Java运行时环境至关重要。这篇博文将探讨这两个主题。 首先,让我们深入了解Java的ClassLoader。ClassLoader是一个抽象类,它是Java中的一个关键组件...

    Java类加载器:静态变量初始化.docx

    Java 类加载器静态变量初始化机制详解 Java 类加载器是 Java 语言的核心组件之一,负责将 Java 字节码文件加载到内存中,以便 JVM 可以执行它们。在 Java 中,类加载器是通过委派机制来实现的,即一个类加载器可以...

    java类变量初始化顺序

    详细讲解java类中静态变量,普通标量,对象、基本类型的初始化顺序。

    易语言源码易语言静态变量初始化源码.rar

    易语言源码易语言静态变量初始化源码.rar 易语言源码易语言静态变量初始化源码.rar 易语言源码易语言静态变量初始化源码.rar 易语言源码易语言静态变量初始化源码.rar 易语言源码易语言静态变量初始化源码.rar ...

    解决C++全局变量只能初始化不能赋值的问题

    C++中,全局变量只能声明、初始化,而不能赋值 也就是说,下面这样是不被允许的: #include using namespace std; int a; a = 2; int main() { return 0; } 错误提示是: C++ requires a type specifier for all...

    debug release混用导致的全局变量初始化异常对应的转储文件及调试符号

    在IT行业中,尤其是在软件开发和调试领域,"debug release混用导致的全局变量初始化异常"是一个常见的问题。本文将深入探讨这一主题,并提供如何利用转储文件(dump)和调试工具,如Windbg,来诊断和解决问题的方法...

    又一次被C99给坑了之结构体变量初始化问题

    "C99 结构体变量初始化问题详解" C99 标准中引入了标记化结构初始化语法,使得结构体变量的初始化变得更加灵活和方便。这种语法使用点运算符和成员名来标识具体的元素,可以按照任意的顺序使用指定初始化项目。这...

    MDK下怎样才能让变量在复位时不被初始化

    在MDK(Keil)开发环境下,为了在单片机,如STM32,复位时保持变量的值不变,我们需要解决一个关键问题,即如何防止变量在复位时被自动初始化。通常,MDK会将全局变量和静态变量默认初始化为零。然而,根据项目需求...

    对Tensorflow中的变量初始化函数详解

    TensorFlow提供了多种变量初始化方法,以下将详细介绍这些初始化函数的用法和特点。 1. tf.constant_initializer(value) 这个函数用于将变量初始化为一个常量值。在构建模型时,有时候我们需要将变量直接设置为特定...

    浅谈js中变量初始化

    在JavaScript中,变量初始化是一个重要的概念,指的是在变量被使用之前为其赋予一个初始值。JavaScript 是一种弱类型语言,意味着变量在声明时不一定要指定数据类型,而且在使用时也不需要初始化。然而,不进行初始...

    Java变量初始化的时机

    以下是对java变量初始化的时机的分析。  【java变量执行初始化的步骤】  java是一门强类型语言,因此java语言规定每个变量必须先声明,然后才能使用,声明变量时必须指定该变量的数据类型。首先看下面这条语句的...

    类的static,const,static const,const static成员的初始化

    因此,static 成员变量不能在定义对象时对变量初始化,用构造函数来初始化。其正确的初始化方式是: ```cpp class Foo { private: static int i; }; int Foo::i = 100; // 在类体外初始化 ``` 这表明: * 初始化...

    Keil MDK下如何设置非零初始化变量

    一些工控产品,当系统复位后(非上电复位),可能要求保持住复位前RAM中的数据,用来快速恢复现场,或者不至于因瞬间复位而重启现场设备。...如何设置非初始化数据变量不被零初始化,这是本篇文章所要探讨的。

Global site tag (gtag.js) - Google Analytics