zoukankan      html  css  js  c++  java
  • java中的数据类型

    java中的数据类型

    java语言的数据类型包括两种,基本数据类型和引用数据类型。

    定义

    基本数据类型:变量名指向具体的数值。

    引用数据类型:变量名指向存数据对象的内存地址,即变量名指向hash值。

    基本数据类型:整数类型(byte,short,int,long);浮点类型(float,double);字符型(char);布尔型(boolean)。

    引用数据类型:类(class),接口(interface),数组([])。引用数据类型的类都是Object类的子类。

    内存分配

    基本数据类型:在被创建时,在栈上给其划分一块内存,将数值直接存储在上。

    引用数据类型:在被创建时,首先要在上给其引用(句柄)分配一块内存,而对象的具体信息都存储在内存上,然后由栈上面的引用指向堆中对象的地址。

    例如,有一个类Person,有属性name,age,带有参的构造方法,

    Person p = new Person("zhangsan",20);

    在内存中的具体创建过程是:

    1.首先在栈内存中位其p分配一块空间;

    2.在堆内存中为Person对象分配一块空间,并为其三个属性设初值"",0;

    3.根据类Person中对属性的定义,为该对象的两个属性进行赋值操作;

    4.调用构造方法,为两个属性赋值为"Tom",20;(注意这个时候p与Person对象之间还没有建立联系);

    5.将Person对象在堆内存中的地址,赋值给栈中的p;通过引用(句柄)p可以找到堆中对象的具体信息。

    相关知识:

    静态区: 保存自动全局变量和 static 变量(包括 static 全局和局部变量)。静态区的内容在总个程序的生命周期内都存在,由编译器在编译的时候分配。

    堆区:  一般由程序员分配释放,由 malloc 系列函数或 new 操作符分配的内存,其生命周期由 free 或 delete 决定。在没有释放之前一直存在,直到程序结束,由OS释放。其特点是使用灵活,空间比较大,但容易出错。

    栈区: 由编译器自动分配释放,保存局部变量,栈上的内容只在函数的范围内存在,当函数运行结束,这些内容也会自动被销毁,其特点是效率高,但空间大小有限。

    文字常量区: 常量字符串就是放在这里的, 程序结束后由系统释放。

    程序代码区:存放函数体的二进制代码。

    参考:https://www.cnblogs.com/fxust/p/4622105.html

    Java中的Null是什么?

    正如我说过的那样,null是Java中一个很重要的概念。null设计初衷是为了表示一些缺失的东西,例如缺失的用户、资源或其他东西。但是,一年后,令人头疼的空指针异常给Java程序员带来不少的骚扰。在这份材料中,我们将学习到Java中null关键字的基本细节,并且探索一些技术来尽可能的减少null的检查以及如何避免恶心的空指针异常。

    1)首先,null是Java中的关键字,像public、static、final。它是大小写敏感的,你不能将null写成Null或NULL,编译器将不能识别它们然后报错。

    Object obj = NULL; // Not Ok
    Object obj1 = null  //Ok

    使用其他语言的程序员可能会有这个问题,但是现在IDE的使用已经使得这个问题变得微不足道。现在,当你敲代码的时候,IDE像Eclipse、Netbeans可以纠正这个错误。但是使用其他工具像notepad、Vim、Emacs,这个问题却会浪费你宝贵时间的。

    2)就像每种原始类型都有默认值一样,如int默认值为0,boolean的默认值为false,null是任何引用类型的默认值,不严格的说是所有object类型的默认值。就像你创建了一个布尔类型的变量,它将false作为自己的默认值,Java中的任何引用变量都将null作为默认值。这对所有变量都是适用的,如成员变量、局部变量、实例变量、静态变量(但当你使用一个没有初始化的局部变量,编译器会警告你)。为了证明这个事实,你可以通过创建一个变量然后打印它的值来观察这个引用变量,如下图代码所示:

    private static Object myObj;
    public static void main(String args[]){
        System.out.println("What is value of myObjc : " + myObj);
    }
    
    What is value of myObjc : null

    这对静态和非静态的object来说都是正确的。就像你在这里看到的这样,我将myObj定义为静态引用,所以我可以在主方法里直接使用它。注意主方法是静态方法,不可使用非静态变量。

     转自:http://www.importnew.com/14229.html

  • 相关阅读:
    SSM项目搭建(提供源码)
    U盘启动安装linux时卡在“starting dracut initqueue hook”
    nginx 中只能访问根目录,无法访问路由(404)
    在多GPU情况下TensorFlow如何指定在哪些GPU上运行程序
    TensorFlow只训练部分参数
    python中的随机数函数
    Python中读取、显示和保存图片的方法
    神经网络中参数数量的计算
    排序算法
    window Linux 双系统安装
  • 原文地址:https://www.cnblogs.com/xdyixia/p/8137898.html
Copyright © 2011-2022 走看看