java基础2---属性
第一节、变量(属性的组成一)
一、变量的概念:
变量是一个代名词,指代在内存中开辟的存储空间,
注:存储空间用于存放运算过程中需要用到的数据
注:方便理解,变量是山西省这个名字;存储空间就是山西省这个占用空间;值就是山西省的人、植物等;
二、变量的使用
1、变量的声明
(1)声明内容
变量的声明包含两点:变量名和数据类型;
(2)声明效果
声明后,JVM会为该变量在内存中开辟存储空间,不同的变量类型决定了存储空间的结构;
(3)注意事项
(a)未经声明的变量不能使用,否则会报编译异常
(b)一条语句可以声明多个同类型变量
int a=1, b=2;
int c, d=3;
(c)变量的值和类型必须对应;
2、变量的命名规范
(1)能:由字母、数字、“_”或“$”符组成
(2)不能:
不能以数字开头;
不能是java保留字(一些Java语言规定好的,有特殊含义的字符),如:int、if、else、for、break等
(3)建议:中文可以作为变量名,但不提倡使用。
(3)注意:Java大小写敏感,即:严格区分大小写,在给变量声明和使用保持一致。
3、变量的初始化
(1)初始化方式
(a)在声明时候初始化(注:局部变量一定是需要这样的)
(b)在声明后,第一次使用前初始化
(c)类加载的时候,给与默认初始化值
int类型变量默认初始值为0
float类型变量默认初始值为0.0f
double类型变量默认初始值为0.0
boolean类型变量默认初始值为false
char类型变量默认初始值为0(ASCII码)
long类型变量默认初始值为0
所有对象引用类型变量默认初始值为null
成员有两种特殊的类型,static属性与instance属性,初始化的时机是不同的。instance属性在创建实例的时候初始化,static属性在类加载,也就是第一次用到这个类的时候初始化,对于后来的实例的创建,不再次进行初始化
(2)初始化注意事项
(a)未经初始化的变量的使用(局部的不能,成员的可以)
4、变量的操作
(1)概述
变量的操作就是对所存储数的操作;
(2)种类
(a)运算操作:注意值必须和类型匹配
(b)输出操作:
(c)初始化:
(d)声明
第二节、基本数据类型(属性的组成二.1)
一、数据类型简介
1、概念
JVM会为该变量在内存中开辟存储空间,不同的数据类型决定了该存储空间的结构和存储大小;从而有效管理存储空间;
数据类型就相当于省---市---县—乡等不同类型;
2、种类
基本数据类型和引用数据类型两种;
3、数据类型和数据结构的区别(为了记忆自己想的,没有验证)
基本数据类型是原子
数据结构是分子
二、基本数据类型简介
1、种类
基本数据类型主要分为4大类 (整数类型、浮点类型、char、boolean);
整数类型又分为了4小类(byte、short、int、long);
浮点类型也分了2小类(float、double),
最常用的有5种,分别为int、long、double、char、boolean
2、boolean类型
2.1概述
boolean类型适用于关系、逻辑运算, 表示某个条件是否成立;true表示条件成立, 而false表示条件不成立。
2.2使用
2.2.1使用一:赋值
(1)直接用英文字母true或false
(2)关系运算的结果,所谓关系运算就是比较两个变量的大小相等等关系
2.2.2使用二:输出
(1)输出变量的结果是false或者true
3、int
3.1、概述
int是最常用的整数类型,一个int类型的变量占用4个字节,即32位的内存空间。Int的最大表示范围为:-231~231-1,即-2147483648 ~2147483647,大约正负21个亿多些
3.2、整数直接量是int类型
3.2.1概述
所谓整数直接量(literal)就是直接写出的整数,例如:下面的语句中,100就是直接量。 int a=100;
3.3、使用
3.3.1使用一(赋值)
(1)超出范围:
整数的直接量的类型默认为int类型,如果直接写出的整数超过了int的表达范围,将会出现编译错误,下面的语句,就是因为超出了整数的范围而导致的编译错误。 copytextpop-up
int d = 10000000000; // 编译错误10000000000这个数值写出来就是错误的,因为Java认为所有直接写出的整数都是int类型,而这个数值超过了int的表达范围。
(2)直接量类型:
除了通常的十进制数字形式,整数直接量也可以写成16进制的形式(以0X或0x开头)或8进制的形式(以0开头)或者一个字符,请看如下直接量四种表现形式:copytextpop-up
int a = 100000; // 10进制
int b = 0x186a0; // 16进制
int c = 0303240; // 8进制
int d = ‘d’;//字符:输出是字符对于的unicode编码的十进制;
3.3.2使用二:除法取整
若对两个整数相除,会舍弃小数的部分(注意:不是四舍五入),结果也是整数。
3.3.3使用三:运算溢出
当两个整数进行运算时, 其结果可能会超过整数的范围而发生溢出,正数过大而产生的溢出,结果为负数;负数过大而产生的溢出,结果为正数
3.3.4使用四:sysout输出
不管值是什么,输出都是int类型的10进制;
4、Long类型
4.1概述
在表示整数时,如果int类型的范围不够,可以使用long类型,一个long型的变量占用8个字节(即64位),最大表示范围为:-263 ~ 263-1,即 -9223372036854775808 ~ 9223372036854775807
4.2使用
对于较大的整数运算(超过int的表达范围),可以使用long型
4.2.1赋值
值后面必须加l或者L,不能虽然类型是long,但是值是int;
值超过int类型,会报溢出;
4.3应用
JDK提供 System.currentTimeMillis() 方法,返回1970年1月1日零点到此时此刻所经历的毫秒数,数据太大,故其数据类型为long
long time = System.currentTimeMillis();
5、Double类型
5.1概述
double类型的精度值是float类型的两倍,因此而得名双精度;大多数场合使用double表示浮点数
5.2使用
5.2.1赋值---浮点数直接量是double类型
书写方式:浮点数的直接量有两种写法:
1)通常写法,如:3.14、314、0.1、.5。
2)科学计数法,如:1.25E2、1.25e2、1.25E-2。其中,1.25E2表示1.25乘以10的2次方。
注:如果类型是float:如果需要表示float类型的直接量,需要加“f”或“F”后缀;
例如float f1 = 3.14 //编译错误,应该写成3.14f;
5.2.2运算
问题:double运算时会出现舍入误差
原因:2进制系统中无法精确的表示1/10,就好像十进制系统中无法精确的表示1/3一样
解决方案:如果需要精确的运算可以考虑放弃使用double或float而采用BigDecimal 类来实现;
6、Char
6.1概述
字符类型char:事实上是一个16位无符号整数(short类型的正数)
char型变量存放的值:其实就是这个两字节的short类型的编号
char显示的内容:这个编码类似于字符点阵的身份证号;对应这个编码找到字符点阵去显示这个点阵,显示出来后即这个字符
注:Java字符类型采用Unicode字符集编码(通用码、统一码、万国码),而Unicode是世界通用的定长字符集,所有的字符都是16位来表示
注:字符点阵:字符是字母、数字、汉字图形、特殊符号这样的字符,计算机显示字符是用点阵的形式显示的,每一个字符都对应一个自己的点阵,所有字符的点阵数据都存放在字库中;
6.2使用
6.2.1使用一:赋值
(1)字符直接量:形如‘A’或者’中’,变量中实际存储的是该字符的Unicode编码(无符号整数值),一个char型变量只能存储一个字符;
注:空白字符:空白字符包括:空格、tab键、换行
注:特殊字符:想表示回车、换行符时、单引号等?对于不方便输出的字符可以采用转义字符来表示;char c = '\\'; System.out.println(c); //输出的结果为:\
(2)整型直接量:范围在0~65535之间的整数,变量中实际存储的即该整数值,但表示的是该整数值所对应的Unicode字符。
(3)Unicode形式:形如‘\u0041’,Unicode字符的16进制形式
6.2.2使用二:运算
对char类型字符运行时,实际上将他的Unicode转换为十进制做运算;
运算类型:
(1)字符和字符
(2)字符和整数
(3)整数和整数
注:不能是字符和字符串,不然会报类型错误;字符串无法转换为字符;
注:运算结果值需要在0~65535范围内
6.2.3使用三:输出sysout
(单个字符) 结果是单个字符
(Unicode) 结果是单个字符
(运算) 结果是int类型的整数;因为运算让short会转换为int类型;
(运算后的变量) 结果是字符;
三、基本类型间转换
1、转换方式
(1)自动类型转化(隐式类型转换):从小类型到大类型可以自动完成。
Byte—short---int---long---float---double
Char---int;
应用:在一个表达式中出现了多种数据类型,则运算结果会自动的向较大的类型进行转化
注意:int直接量可以直接赋值给byte、char和short,只要不超过其表示范围;
(2)强制类型转换
从大类型到小类型需要强制转换符
语法:(需要转换成的类型)变量
注:有可能会造成精度的损失或者溢出;为大类型的精度值大于小类型,取值范围大于小类型,所以,在使用强制转化时要求显式的告诉编译器,正在进行强制转换。
四、Java数据类型在内存中的存储:面向对象的内存管理
五、基本类型和引用类型作为参数传递:java基础里面的方法;