`

java 基本数据类型 学习

阅读更多
boolean 类型
Java 虚拟机队boolean类型的处理比较特殊。
当Java编译器把java源代码编译为字节码时,会用int后byte来表示boolean。
在java虚拟机中,用证书零来表示false,用任意一个非零证书来表示true。
在java源程序中,不允许把证书或null赋值给boolean类型的变量。

byte short int long 类型
byte,short int long 都是整数类型,并且都有符号整数。
在java语言中,为了区分不同进制的数据,八进制数以"0"开头,十六进制数以"0x"开头。

选择合适的整数类型
例如月份的取值是1和12之间的整数,因此把代表月份的month变量定义为byte类型:
byte month;


当month变量为byte类型时,Java虚拟机只需为month变量分配1个字节的内存。如果把month变量定义为long类型,尽管是可行的,但是会占用更多的内存空间,影响程序的性能。不过在内存资源充足的情况下,对于整数变量,通常都把它定义为int类型,这样可以简化数学运算时强制类型转换操作。

在java语言中,如果数学表达式中都是整数,那么表达式的返回值只可能是int或long类型,如果把返回值赋给byte类型的变量,就必须进行强制类型的转换,例如
byte month = 1;
month = month + 2 ;//编译错误,month+2 的结果为int类型
month = (byte)(month+2) ;//合法


2 给整数类型变量赋值[size=medium][/size]
如果一个整数值在某种整数类型的取值范围内,就可以把它直接赋给这种类型的变量,否则必须进行强制类型的转换。
例如整数13 在byte类型的取值范围(-128~127)内,因此可以把它直接赋给byte类型变量。
byte b = 13;

再例如129不在byte类型的取值范围,则必须进行强制转换。
byte b = (byte)129 ;//变量b的取值为-127


java 语言允许把八进制(以0开头),十六进制(以0x开头)赋值给整数类型变量:
 int a1 = 012;
 int a2 = 0x12;
 int a3 = 12;
 
 int a4 = 0xF1;
 byte b = (byte)0xF1; //;十六进制 ,b的十进制的取值为-15 



引用

在这里先温习下计算机基础理论

byte是一个字节保存的,有8个位,即8个0、1。
8位的第一个位是符号位,
也就是说 0000 0001代表的是数字1
1000 0000代表的就是-1
所以正数最大位0111 1111,也就是数字127
负数最大为1111 1111,也就是数字-128

上面说的是二进制原码,但是在java中采用的是补码的形式,下面介绍下什么是补码

1、反码:
        一个数如果是正,则它的反码与原码相同;
        一个数如果是负,则符号位为1,其余各位是对原码取反;

2、补码:利用溢出,我们可以将减法变成加法
       对于十进制数,从9得到5可用减法:
       9-4=5    因为4+6=10,我们可以将6作为4的补数
       改写为加法:
       9+6=15(去掉高位1,也就是减10)得到5.

       对于十六进制数,从c到5可用减法:
       c-7=5    因为7+9=16 将9作为7的补数
       改写为加法:
       c+9=15(去掉高位1,也就是减16)得到5.

    在计算机中,如果我们用1个字节表示一个数,一个字节有8位,超过8位就进1,在内存中情况为(100000000),进位1被丢弃。

    ⑴一个数为正,则它的原码、反码、补码相同
    ⑵一个数为负,刚符号位为1,其余各位是对原码取反,然后整个数加1
  
- 1的原码为                10000001
- 1的反码为                11111110
                                                   + 1
- 1的补码为                11111111

0的原码为                 00000000
0的反码为                 11111111(正零和负零的反码相同)
                                          +1
0的补码为               100000000(舍掉打头的1,正零和负零的补码相同)

Integer.toHexString 的参数是int,如果不进行&0xff,那么当一个byte会转换成int时,由于int是32位,而byte只有8位这时会进行补位,
例如补码11111111的十进制数为-1转换为int时变为11111111111111111111111111111111好多1啊,呵呵!即 0xffffffff但是这个数是不对的,这种补位就会造成误差。
和0xff相与后,高24比特就会被清0了,结果就对了。

----
Java 中的一个byte,其范围是-128~127的,而Integer.toHexString的参数本来是int,如果不进行&0xff,那么当一个byte会转换成int时,对于负数,会做位扩展,举例来说,一个byte的-1(即0xff),会被转换成int的-1(即0xffffffff),那么转化出的结果就不是我们想要的了。

而0xff默认是整形,所以,一个byte跟0xff相与会先将那个byte转化成整形运算,这样,结果中的高的24个比特就总会被清0,于是结果总是我们想要的。




Char 字符与字符编码
char是字符类型,java语言对字符采用Unicode字符编码。由于计算机的内存之能存储二进制数据,因此必须为各个字符进行编码。字符编码,是指一串二进制数据来表示特定的字符。
常见的字符编码包括:

1 ASCII 字符编码
  ASCII编码实际上只用了一个字节的7位,一共能表示128个字符。例如“a”的编码是01100001 相当于十进制的97.
2 UNICODE
收录了全世界所有语言文字的字符,是一种夸平台的字符编码。
3 GBK gb2312 utf-8

引用变量在java虚拟机中所处于数据区的哪个区呢?
这取决于变量的作用域,如果是局部变量,则位于java栈区;如果是某个类的静态成员变量,则位于方法区,如果是某个类的成员变量,则位于堆区。

2 float 和 double 类型
float :占用4个字节 共32位
double : 占用8个字节,共64位


java类的成员变量有俩种:
引用
一种是被static关键字修饰的变量,叫类变量或者静态变量
另一种没有static修饰,为实例变量

类的静态变量在内存中只有一个,java虚拟机在加载类的过程中为静态变量分配内存,静态变量位于方法区,被类的所有实例共享。静态变量可以直接通过类名进行访问,其生命周期取决于类的生命周期。

而实例变量取决于类的实例。每创建一个实例,java虚拟机就会为实例变量分配一次内存,实例变量位于堆区中,其生命周期取决于实例的生命周期。


成员变量的初始化
整数型(byte,short,int long)的基本类型变量的默认值是 0
单精度浮点型float的基本类型变量的默认值是0.0f
双精度浮点型double的基本数据类型是0.0d
字符型char的基本类型变量的默认值是"\0000"

局部变量的声明周期[size=medium][/size]
当Java虚拟机(更确切的说,是Java虚拟机中的某个线程)调用一个方法时,会为这个方法的局部变量分配内存。
当Java虚拟机(更确切的说,是Java虚拟机中的某个线程)结束调用一个方法时,会结束找个方法中的局部变量的声明周期.
以下是Sample类中定义的4个变量: var1 var2 var3 var4
 public class Sample {
    int var1 = 1; //var1是实例变量
    static int var2 = 2;// var2是静态变量
     
    public int add() {
         int var3 = var1 + var2 ; //var3 是局部变量
         return var3 ;
    }

    public int delete() {
          int var4 = var1 - var2 ;//var4 是局部变量 
          return var4; 
    }

    public static void main(String args[]) {
         new Sample().add();
    }

    
}



当执行“java Sample”命令时,Java虚拟机执行以下流程:
(1) 加载Sample类,开始讲台变量var2的声明周期,var2位于方法区
(2) 创建Sample实例 ,开始实例便令var1的声明周期,var1位于堆区
(3) 调用Sample实例的add()方法,开始局部变量的声明周期,var3位于Java栈区。
(4) 执行完毕Sample实例的add()方法,结束局部变量的var3的声明周期,退回到main()方法。
(5) 执行完毕后main方法,结束sample实例何它的实例变量var1的生命周期。
       卸载Sample类,结束静态变量var2的生命周期,java虚拟机运行结束。
  由于main方法没有调用Sample实例的delete方法,所以var4变量在java虚拟机的运行过程从没有创建过.

引用

将局域变量的范围最小化
notes:
在需要使用某个局部变量的时候,才定义它
使方法小而集中,如果一个方法包含多个操作,尽可能把这个方法分解为多个小方法,每个方法负责一项操作,这写小方法在java源文件中可集中放在一起。

分享到:
评论
1 楼 wpf523 2012-04-23  
先搜藏起来,回头好好看

相关推荐

    Java基本数据类型-学习笔记.docx

    基本数据类型是 Java 语言的基础,理解基本数据类型是学习 Java 的关键。 Java 基本数据类型有八种,它们分别是 byte、short、int、long、float、double、boolean 和 char。这八种基本数据类型可以分为四类:整数...

    JAVA数据类型思维导图

    本资源“JAVA数据类型思维导图”提供了一种直观的方式来理解和记忆Java中的数据类型,包括基本数据类型和引用数据类型。下面将对这两个主要的数据类型进行详细解释。 1. 基本数据类型(Primitive Data Types) - ...

    java教程课件5基本数据类型与引用类型

    Java教程中的核心知识点主要涉及Java的基本数据类型、引用类型、常用包、对象的内存分配以及字符串操作。下面将对这些内容进行详细的阐述。 1. **基本数据类型与引用类型** - Java的基本数据类型包括布尔型`...

    java基本数据类型与数组

    这些基本数据类型是 Java 语言的基础,理解它们对于学习 Java 语言非常重要。 2.1 标识符与关键字 在 Java 中,标识符是指变量名、方法名、类名等名称。Java 中的标识符可以由字母、下划线、美元符号、数字构成,...

    java数据类型汇总

    Java的数据类型主要分为两大类:基本数据类型(Primitive Data Types)和引用数据类型(Reference Data Types)。基本数据类型包括布尔型(boolean)、字符型(char)、整型(byte, short, int, long)和浮点型...

    Java基本数据类型

    ### Java基本数据类型知识点 #### 一、Java标识符语法规则 在Java中,标识符是用来命名变量、方法、类等的名称。Java对标识符的定义有一些基本的语法规则: 1. **首字符**:必须是字母、美元符号 `$` 或下划线 `_...

    Java大学实用教程 实验二 基本数据类型和数组 实验报告

    通过这个实验,学生不仅能学习到Java的基本数据类型和类型转换,还能掌握如何从键盘读取数据,并理解Unicode字符集的工作原理。这些基础知识对于进一步学习Java编程至关重要,也是后续学习面向对象编程、类和对象等...

    java程序设计项目化教程\技术文章\java基本数据类型

    ### Java基本数据类型及其封装类 Java是一种广泛使用的面向对象编程语言,支持多种数据类型来满足不同的编程需求。其中,基本数据类型是最基础且最常用的元素之一。它们直接存储值而不是对象引用,因此效率较高。...

    Java基本数据类型转换-学习笔记.docx

    在Java编程语言中,了解和掌握基本数据类型的转换至关重要,因为这是编写高效、无错代码的基础。本篇学习笔记将详细解析Java中的数据类型转换及其相关的知识点。 首先,我们需要了解Java的基本数据类型,它们分为两...

    java基本数据类型PPT教案学习.pptx

    在Java中,数据类型分为两大类:基本数据类型和引用数据类型。本教程主要讲解了Java的基本数据类型,包括标识符、关键字、数据类型、常量和变量等核心概念。 1. **标识符**: - 标识符是程序员为变量、类、方法等...

    java基本数据类型和数组PPT教案学习.pptx

    java基本数据类型和数组PPT教案学习.pptx

    JAVA基本数据类型的学习[定义].pdf

    Java是一种强类型语言,它的基本数据类型是编程的基础,包括整型、浮点型、字符型和布尔型。在Java中,每个变量必须声明其类型,这些基本类型不能由程序员自定义,它们的大小和取值范围是固定的,这有助于Java程序在...

    java基本类型数据

    通过对Java基本数据类型的深入探讨,我们不仅了解了各种基本数据类型的定义、取值范围,还学习了不同数据类型之间如何进行转换。这些基础知识对于理解和编写高质量的Java程序至关重要。希望本文能帮助读者更好地掌握...

    java中基本数据类型的取值范围

    在本节中,我们将学习 Java 语言的基本数据类型。它包括布尔型、字符型、整型、浮点型等。 布尔型(Boolean) 布尔型是 Java 语言中的基本数据类型,它只有两个值:true 和 false。布尔型变量的声明格式为:boolean...

    Java基本数据类型---数据类型之间的转换.pdf

    Java基本数据类型---数据类型之间的转换.pdf 学习资料 复习资料 教学资源

    Java数据类型操作包含转换代码实例.rar

    在Java编程语言中,数据类型是程序设计的基础,它们分为两大类:基本数据类型和引用数据类型。这个压缩包“Java数据类型操作包含转换代码实例.rar”提供了丰富的代码示例,帮助初学者理解和掌握Java中数据类型的转换...

    Java基本数据类型.pdf

    Java语言中的基本数据类型是编程时最基础的元素,...了解Java的基本数据类型及其用法是学习Java编程的基础,它们在处理各种计算和逻辑控制中发挥着核心作用。熟练掌握这些类型及其特点,有助于编写高效、准确的代码。

    Java期末复习资料_第2章_基本数据类型与数组.pdf

    Java是一种广泛使用的编程语言,其数据类型系统中包含基本数据类型和引用类型两大类。基本数据类型变量存储的是数据本身,而引用类型变量存储的是指向数据的空间地址。本资料针对Java期末复习,深入讲解了基本数据...

    Java4Android 05_Java的基本数据类型

    通过深入学习“Java4Android 05_Java的基本数据类型”,初学者将能够更好地理解和运用这些基础概念,为后续的Java和Android编程打下坚实的基础。这个视频课程详细解释了这些知识点,是学习Java数据类型的好资源。

    java基本数据类型习题(选择24).doc

    Java是一种广泛使用的面向对象的编程语言,其基本数据类型是编程的基础。以下是对题目中涉及的知识点的详细解释: 1. **标识符**:在Java中,标识符用于命名变量、类、方法等。合法的标识符必须以字母、美元符号($)...

Global site tag (gtag.js) - Google Analytics