您的位置:首页 > 编程语言 > Java开发

java学习笔记三(Java数据类型)

2009-10-14 21:32 555 查看
数据类型

Java的数据类型主要分为2种:
Ⅰ 基本数据类型:(不能简化的、内置的数据类型、由编程语言本身定义,它表示了真实的数字、字符和整数)
1 数值型
1整数型:byte short int long
2 小数型:float double
2 字符型 char
3 boolean型 取值只有true 或 false
Ⅱ复杂数据类型
1 数组
2 类
3 接口
复杂类型和基本类型的内存模型本质上不一样,简单数据类型的存储原理:所有的简单数据类型不存在引用概念,简单数据类型直接存储在内存中的内存栈上,数据本身的值存储在栈空间里面,而Java语言里面只有这八种数据类型是这种存储模型;而其他的只要是继承于Object类的复杂数据类型都是按照Java里面存储对象的内存模型来进行数据存储的,使用Java内存堆和内存栈来进行这种类型的数据存储,简单地讲,“引用”是存储在有序的内存栈上的,而对象本身的值存储在内存堆上的。

intint为整数类型,在存储的时候,用4个字节存储,范围为-2,147,483,6482,147,483,647,在变量初始化的时候,int类型的默认值为0

  shortshort也属于整数类型,在存储的时候,用2个字节存储,范围为-32,76832,767,在变量初始化的时候,short类型的默认值为0,一般情况下,因为Java本身转型的原因,可以直接写为0

  longlong也属于整数类型,在存储的时候,用8个字节存储,范围为-9,223,372,036,854,775,8089,223,372,036, 854,775,807,在变量初始化的时候,long类型的默认值为0L0l,也可直接写为0

  bytebyte同样属于整数类型,在存储的时候,用1个字节来存储,范围为-128127,在变量初始化的时候,byte类型的默认值也为0

  floatfloat属于实数类型,在存储的时候,用4个字节来存储,范围为32IEEEE 754单精度范围,在变量初始化的时候,float的默认值为0.0f0.0F,在初始化的时候可以写0.0

  doubledouble同样属于实数类型,在存储的时候,用8个字节来存储,范围为64IEEE 754双精度范围,在变量初始化的时候,double的默认值为0.0

  charchar属于字符类型,在存储的时候用2个字节来存储,因为Java本身的字符集不是用ASCII码来进行存储,是使用的16位Unicode字符集,它的字符范围即是Unicode的字符范围,在变量初始化的时候,char类型的默认值为'u0000'

booleanboolean属于布尔类型,在存储的时候不使用字节,仅仅使用1来存储,范围仅仅为01,其字面量为truefalse,而boolean变量在初始化的时候变量的默认值为false

Java里面,每一种原始类型都对应着相应的包装类型,在JDK1.5之前(不包含JDK1.5),当包装类和原始类型进行相互转换的时候,需要调用包装类型的方法进行转换,不能通过操作符进行直接的计算。

基本数据类型转换:

1
自动转换

条件A.这两种类型是兼容的;B.目的类型数的范围(位数)比来源类型的大

2 强制转换(不同类型之间的转换,大范围向小范围转)

强制转换过程,唯独可能特殊的是char和int是可以转换的,不过会使用char的ASCII码值比如:

int
a = (int)'a';a的值在转换过后输出的话,值为97;

强制转换过程中不会考虑精度的丢失,直接将多余部分舍弃掉。

3 类型的自动提升

所有的byte、short、char类型的值将提升为int类型;
   如果有一个操作数是long类型,计算结果是long类型;
   如果有一个操作数是float类型,计算结果是float类型;
   如果有一个操作数是double类型,计算结果是double类型;
   自动类型转换图如下:
   byte->short(char)->int->long->float->double
说明:
1 长整数字有一个后缀为“L”或者“l”
2 默认的基本浮点类型为double
3 float数据类型有一个后缀为“F”或“f”
4 char类型可以使用通用的转义字符,但是不是ASCII码,应该是Unicode格式的如'/u0000'
5 数据操作中 最大值加1就会变成最小值,反之最小值减1就会变成最大值。
Java数组
1)
一维数组(声明、创建、初始化)
声明方式: type var[] 或 type[] var 声明数组时不能指定其长度(数组中元素的个数)
创建:Java中使用关键字new创建数组对象,格式为:数组名 = new 数组元素的类型 [数组元素的个数]
初始化:
1 package com.lxb.array;

/**
* 数组动态初始化
* 数组定义与为数组分配空间和赋值的操作分开进行
* @author lxb
*
*/
public class TestD {
public static void main(String[]
args) {
int[] a;
a = new int[2];
a[0] = 0;
a[1] = 1;
}
}

2 package com.lxb.array;

/**
* 数组静态初始化
* 在定义数组的同时就为数组元素分配空间并赋值
* @author lxb
*
*/
public class TestS {

public static void main(String[] args) {
int a[] = {0,1,2};

}
}

3 package com.lxb.array;

/**
* 默认初始化
* 数组是引用类型,它的元素相当于类的成员变量,
* 因此数组分配空间后,每个元素也被按照成员变量的规则被隐士初始化
* @author lxb
*
*/
public class TestDefault {
public static void main(String[] args) {
int a[] = new int[5];
System.out.println(a[3]);

}
}

2)
多维数组

Java里面不仅仅可以定义一纬数组,还可以定义多维数组,多维数组的定义如下:
   int[][] arrays1 = new int[3][2];
   int[][] arrays2 = new int[3][];
   不合法的定义方式为:
   int[][] arrays3 = new int[][2];

操作符
操作
优先级
结合性
后缀运算符
[] . () 函数调用
从左到右
单目运算符
! ~ ++ -- +(单操作符) -(单操作符)
从右到左
创建
new
从左到右
乘除
* / %
从左到右
加减
+ -
从左到右
移位
<< >> >>>
从左到右
关系
< <= > >= instanceof
从左到右
相等
== !=
从左到右
按位与
&
从左到右
按位异或
^
从左到右
按位或
|
从左到右
逻辑与
&&
从左到右
逻辑或
||
从左到右
条件
? :
从右到左
赋值
= += -= *= /= %= ^= <<= >>= >>>=
从右到左
几乎所有运算符都只能操作“基本类型”(Primitives),只是=、==、!=可以操作所有对象,除此String类型可以支持+、+=操作符:

java 的除法运算就是就是将被除数分成多个完整的除数。特例 当最小值去除以-1时 仍然是它本身。

[1]针对原始类型的=操作符而言,比如a=b【a和b为两个变量】,在赋值的过程里面,这句话进行了下边的操作:JVM在内存里面为b保存一个栈地址用来存储真实的b的值,然后在赋值过程中,JVM创建一个b的副本,然后把b的副本的值赋值到a里面,也就是说在这种情况下如果a的值发生了变化的话,b本身的值是不会受到影响的,而b在赋值过程的副本也是瞬间的,当a一旦接受到b的值过后,b的副本就从内存里面清除掉,就使得a和b各自有了自己的栈地址
[2]如果是非原始类型:比如有两个对象的引用a和b,如果进行了a=b的操作,这句话就进行了下边的操作:JVM会拷贝一个b的引用,然后把引用副本赋值到a,使得a引用和b引用指向同一个对象,a引用的对象发生改变的时候,b引用指向的对象也会发生同样的改变

java存在前递增和前递减(++A和--A),这种情况先进行运算,再生成值;后递增和后递减(A++和A--),会先生成值,再执行运算
[1]前递增(递减)和后递增(递减)就是上边表达的那种情况,但是有一点特殊就是前递增(递减)是先改变变量的值,而后递增(递减)是在进行运算过后修改变量的值
[2]而且在Java里面,自动递增递减是支持浮点类型

关于关系运算符需要说明的是:
·
==和!=是适合所有的基本类型(Primitives)的,但是其他关系运算符不能比较boolean
·
如果是针对两个引用指向的对象内容进行比较,必须用特殊的操作方法equals()
·
==!=在比较两个引用的时候,比较的是引用的指向,而不是对象的内容信息
逻辑运算符和按位运算符:
  逻辑运算符有&&||!能够结合表达式生成一个boolean返回值
按位运算符AND(&)OR(|)XOR(^)NOT(~)运算
下边是所有的逻辑关系表:
非关系表:
A
!A
true
false
false
true
逻辑与关系:
A
B
A && B
false
false
false
true
false
false
false
true
false
true
true
true
逻辑或关系:
A
B
A || B
false
false
false
true
false
true
false
true
true
true
true
true
下边是按位运算关系表:
非位运算符:
A
~A
1
0
0
1
与位运算符:
A
B
A & B
1
1
1
1
0
0
0
1
0
0
0
0
或位运算符:
A
B
A | B
1
1
1
1
0
1
0
1
1
0
0
0
异或运算符:
A
B
A ^ B
1
1
0
1
0
1
0
1
1
0
0
0
移位运算符:
移位运算符操作的对象是二进制位,可以单独用移位运算符来处理int类型的整数,下边是概念表:
运算符
含义
例子
<<
左移运算符,将运算符左边的对象向左异动运算符右边指定的位(在低位补0)
x << 3
>>
"有符号"右移运算 符,将运算符左边的对象向右移动运算符右边指定的位数。使用符号扩展机制,也就是说,如果值为正,则在高位补0,如果值为负,则在高位补1。
x >> 3
>>>
"无符号"右移运算 符,将运算符左边的对象向右移动运算符右边指定的位数。采用0扩展机制,也就是说,无论值的正负,都在高位补0。
x >>> 3
计算机里面的原码、反码、补码
只有有符号的整数才有原码、反码和补码 .正整数的原码、反码和补码相同
对于负整数在计算机内部是用补码表示补码是它的反码加1

Java 流程控制
java程序和普通程序运行流程一样,有三种运行顺序:顺序、循环和选择
1)
顺序: 最简单的。按顺序执行。
2)
选择:if语句;if’..else
语句;
switch 语句
if语句:
   if语句的语法有两种:
   if(boolean表达式) 语句1;
   if(boolean表达式){ 语句1;语句2;}
它所意味着的含义为如果boolean表达式的返回为true就执行语句1或者执行语句1所在的语句块{}内的内容:在使用if语句的时候,如果后边的语句块不带{},那么它能产生的效果只有紧跟着if的后边一句话(单条语句)。
Switch语句:后边的括号里面的输入因子有类型限制
[1]int类型的变量

[2]short类型的变量

[3]char类型的变量

[4]byte类型的变量

[5]enum的枚举类型的变量【JDK1.5过后支持】
对于switch语句所有的输入因子在进入switch语句过后只匹配一次
3)
循环:while和do-while循环;for循环
whiledo-while
while循环和do-while循环称为条件循环,也就是循环的终止条件为当判断语句为false的时候就终止循环,while和do-while的区别在于不论条件判断返回false还是true,do-while语句至少执行一次,而while语句必须是当条件返回true的时候才会一次次执行
   语法规则为:
   while(布尔表达式){执行语句块}
   do{执行语句块}while(布尔表达式);

for循环
   语法规则为:
   for(初始条件;判断条件;变化条件){执行语句块;}
   for(类型变量:列表)

·
一般情况下,whiledo-while循环主要用于无限循环,就是不知道循环次数,但是当终止条件满足的时候就退出循环
·
for循环一般是用于有限循环,就是已经知道了循环次数,当到达某种条件的时候退出

循环控制 break continue
break的特征为:当循环遇到了break语句的时候,直接跳出本循环
  continue的特征为:当循环遇到了continue语句的时候,直接跳出本轮循环,进入下一次循环
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: