Java: 数据类型
核心:对事物的某种规范
前提:
1.JAVA:JAVA程序的运行是以堆栈的操作来完成的
堆栈以帧为单位保存线程的状态。
JVM对堆栈只进行两种操作:以帧为单位的压栈和出栈操作。
理解:
2.数据类型:描述内存的一种机制(对内存位置的一个抽象表达方式)
内存抽象表现形式:
1.变量:计算机存储数据的容器
变量的要素:类型(数据类型决定了变量的大小)、名称、存数据
规范:
使用:
变量的使用:
步骤:声明、赋值、使用
int a; a=1;
类型 变量名 值
规则:
--变量要先赋值后使用
--变量名不能重复,不能以数字开头,不能出现非法字符
--变量名不能是关键字
--变量名中只能有_和$这两个特殊符号
--变量名中只能由_、$、字母、数字组成,不能以数字开头
--变量名是区分大小写的
--如果一个变量名是由两个单词组成的,那么第1个单词的第1个字母小写,第2个单词的第1个字母大写。
核心:变量是变化的
变量确定了数据类型,确定内存的大小
2.数据类型:基本类型和引用数据类型。
描述:
基本类型:简单数据类型是不能简化的、内置的数据类型、由编程语言本身定义,它表示了真实的数字、字符和整数。
引用数据类型:Java语言本身不支持C++中的结构(struct)或联合(union)数据类型,它的复合数据类型一般都是通过类或接口进行构造,类提供了捆绑数据和方法的方式,同时可以针对程序外部进行信息隐藏。
·数据存储的特征:
基本类型的变量和对象的引用变量都是在函数的栈内存中分配
基本类型只能用来存数据, 不能用来操作判断数据
内存的开辟:在我们定义这个变量的时候。
释放:
当超过变量的作用域后,java会自动释放掉为该变量分配的内存空间
特征:
存取速度比堆要快,仅次于寄存器,栈数据可以共享
存在栈中的数据大小与生存期必须是确定的,缺乏灵活性
引用类型:引用类型继承于Object类(也是引用类型)都是按照Java里面存储对象的内存模型来进行数据存储的,使用Java内存堆和内存栈来进行这种类型的数据存储,简单地讲,“引用”是存储在有序的内存栈上的,而对象本身的值存储在内存堆上的;
内存在什么时候开辟:在new的时候 开辟
释放:
数组和对象在没有引用变量指向它的时候,才变为垃圾,不能在被使用,但仍 然占据内存空间不放,在随后的一个不确定的时间被垃圾回收器收走
特点:
动态地分配内存大小,生存期也不必事先告诉编译器
在运行时动态分配内存,存取速度较慢
类别:
基本类型:布尔类型和数值类型
数值类型:定点类型和浮点类型
引用类型:类、接口、数组
概念:
定点:定点的意思是把小数点定在末尾,小数点后没有数字的数据,Java中通常把它们称为整数;
常量:就是直接的值;
变量:放置常量的容器,除了放置常量之外,也可以给变量一个运算式,变量中的值是可变的;
1) 基本类型:
>>定点类型:
byte(字节类型) 一个byte 8位,取值范围为-128~127,占用1个字节(-2的7次方到2的7次方-1)默认是0
short(短整型) 一个short 16位,取值范围为-32768~32767,占用2个字节(-2的15次方到2的15次方-1)默认是0
int(整型)一个int 32位,取值范围为(-2147483648~2147483647),占用4个字节(-2的31次方到2的31次方-1)默认是0
long(长整型) 一个long 64位,取值范围为(-9223372036854774808~9223372036854774807),占用8个字节(-2的63次方到2的63次方-1)默认是0L或0l推荐用大写;
描述:
我们希望它是byte型的,可以在数据 后加上大写的 B:35B,表示它是byte型的,同样的35S表示short型,35L表示long型的,表示int我们可以什么都不用加,但是如果要表示long型 的,就一定要在数据后面加“L”。
核心:数据类型确定的时候,数据的存储如果超出范围会编译出错
字符类型:char
Java中一个字符(char)表示Unicode字符集中的一个元素。Unicode字符由16位组成,因此,有(65535)个不同的字符可用,范围从’u0000’到’uFFFF’(u告诉编译器你在用两个字节[16位]字符信息表示一个Unicode字符)。用于存放字符的数据类型,占用2个字节,采用unicode编码,它的前128字节编码与ASCII兼容,字符的存储范围在\u0000~\uFFFF,在定义字符型的数据时候要注意加' ',比如 '1'表示字符'1'而不是数值1。
>>浮点类型:
float (单精度浮点型) 一个float 32位,占用4个字节, 例3.2F,默认是0.0f , 3.402823e+38 ~ 1.401298e-45(e+38表示是乘以10的38次方,同样,e-45表示乘以10的负45次方)。
double (双精度浮点型) 一个dobule 64位 占用8个字节, 例3.2, 默认是0.0, 1.797693e+308~ 4.9000000e-324 占用8个字节
注:double型比float型存储范围更大,精度更高,所以通常的浮点型的数据在不声明的情况下都是double型的。
如果要表示一个数据是float型的,可以在数据后面加上“F”。
浮点型的数据是不能完全精确的,所以有的时候在计算的时候可能会在小数点最后几位出现浮动,这是正常的。
基本类型赋值时的特性:
1.当整数类型的数据使用字面量赋值的时候,默认值为int类型,就是直接使用0或者其他数字的时候,值的类型为int类型,
所以当使用 longa = 0这种赋值方式的时候,JVM内部存在数据转换。
2.浮点类型的数据使用字面量赋值的时候,默认值为double类型,就是当字面两出现的时候,JVM会使用double类型的数据类型。
3.从JDK 5.0开始,Java里面出现了自动拆箱解箱的操作,基于这点需要做一定的说明:
2)引用类型:new出来的
Random、Scanner、集合、数组、自己定义的类、String等
Student s = new Student();
引用 对象
数据交换特征:
交换的本质
基本类型只在栈中开空间
引用类型既要在栈中开空间也要在堆中开空间
·默认值:
1.变量没有默认值 int a; System.out.print(a) //报错
2.数组有默认值:int[] 0 double[] 0.0 char[] AscII为0的字符3.类中的
3.属性:有默认值int 0 double 0.0 String null 自定义的类型:null
>>类型转换:
类型转换:
--自动类型转换(将小数据放入到大空间中,自动转换)
--强制转换:目标类型 变量名=(目标类型)其他类型的变量
int a=(int)5.0;
一、自动转换:
1.基本类型:类型相似 ,小的往的大
int a = 9;
double b = a;
String a ="123"
int b = (int)a;错误
2.引用类型:继承关系 子类转父类
子类:小的类型
父类:大的类型
Son son =new Son();
Father f = son;
总结:父类引用指向子类对象,父类引用
只能调用自己的属性和方法,不能调用子类
的属性和方法(子类的特征被隐藏了)
二、强制转换:
1.基本类型 :类型相似 大的往小的转
double a = 9.9;
int b = (int)a; //b=9
2.引用类型:继承关系 父类转子类
Father f =new Father();
Son son = (Son)f;
3.怎么样判断父类引用中的真实对象?
instanceof
Father f = new Son();
System.out.println(f instanceof
Son);//ture
System.out.println(f instanceof
Son1);//false
数据算法:
1. 运算符:
算术运算符:
1)赋值运算符=:它的作用是将右边的值复制一份到左边的空间中
去。
2) -,*,/,%(整除取余)-,*,/:运算数据只能是数字类型
的。
3) >>进行数字相加
5+6==11
1.1+2.1==3.2
3+1.5==4.5//一个穷人和一个富人的结果是富
人
int t=5.5+1;//错误
double c=5.5+2;//正确
>>+:当与字符串相加时,起连接作用
"abc"+1=="abc1"
"12"+3+5=="123"+5=="1235"
"12"+2*3=="12"+6=="126" 126
4)/:
5/2==2(穷人与穷人的结果还是穷人)
5.0/2==2.5(穷人与富人的结果是富人)
double a=5/2;//2.0(小数据可以放入大空间
内)
int b=5/2.0;//报错(大数据不能放入小空间
内)
5)%(取模,整除取余)
5%2==1
2.2%1==0.2
表达式:运算符与数据的组合就是一个表达式
a+b;
int a=5;
a>b;
关系运算符:主要是用来进行比较大小,或相等
>,>=,<,<=,==,!=
比较后的结果是:真(true),假(false)
--boolean flag=true
逻辑运算符:&& || !
优先级:
() ! 算术运算符 关系运算符 && || =
语法结构:顺序结构、条件结构、逻辑结构
条件结构:
1) if(表达式){
//代码
}
if(flag)
}else{
}
if-else if-...-else
嵌套条件结构:
特点:它既能做等值判断,又可以做区间判断
2)switch(变量){
case 值1:
代码块;
break;
case 值2:
代码块
break;
case 值3:
代码块;
break;
default:
代码块;
break;
}
循环结构:
要素: 循环变量初始化、条件判断、循环体内改变循环变量。
特征:重复着做相同或相似的事,并且有变化的地方一定要有规律
,否则不能使用循环。
一,while循环
循环变量初始化
while(条件判断){
循环体;
循环体内改变循环变量;
}
二,do-while循环
do{
循环体;
循环体内改变循环变量;
}while(条件判断);
如果第条件满足时,while和do-while执行的结果是一样的
但如果条件不满足时,while一次都不会执行,而do-while至少会
执行一次
while和do-while适合做无限次数的循环
三,for循环
for(循环变量初始化;条件判断;循环体内改变循环变
量){
循环体;
}
for适合做有限次数的循环
前提:在循环中
break中断循环
break一般都是和if一起来使用
continue关键字的使用
继续:中止本次循环体的执行,继续下一次循环
在使用时,一般都要和if结构一起使用。否则没有意义。
int b=a++;++放在后面,表示先使用a的值,a再加1
int d=++c;++放在前面,表示先将c+1,再将值赋给d
转义字符:
Java中的常用转义字符见表2-1
特点:只能做等值判断,它不能做区间判断
探测类型:int char
\r :回车
\n :换行
\t :TAB键
\t \n的用法:只可以在双引号中出现
\t 主要作用对齐格式 tab 8字符宽度