2.数据类型、方法、运算符
2.1 数据类型介绍
数据类型分为两种
- 简单数据类型(8种)
- 数值型
- 整数类型(byte,short,int,long)
- 浮点类型(float,double)
- 字符型(char)
- 布尔型(boolean)
- 数值型
- 引用数据类型(3种)
- 类(class)
- 接口(interface)
- 数组
8种简单数据类型的有效位
数据类型 | 占用存储空间(字节) | 有效范围(bits) |
---|---|---|
boolean | 1字节 | 1位 |
byte | 1字节 | 8位 |
char | 2字节 | 16位 |
short | 2字节 | 16位 |
int | 4字节 | 32位 |
float | 4字节 | 32位 |
long | 8字节 | 64位 |
double | 8字节 | 64位 |
数据类型存储问题
- 用char能否存储一个中文汉字?
- 能。Java中的char是采用unicode编码,占据2字节。一个中文汉字正号占据2字节
- 用Java编写的程序在与C语言编写的程序进行交互或通信时,C中使用char声明了一个变量,将这个变量的值传到Java中,Java中能不能使用char声明的变量来接收
- 不能。C中的char型变量占一个字节,Java中的char型占据两个字节,会导致两边的不一致,为了达到统一会选择byte
2.2 整数类型
-
整数类型用来存储整数数值,即没有小数部分的数值。可以是正数,也可以是负数。
-
4种整型数据的不同取值范围如下表:
-
类型 占用存储空间 表示数值范围 byte 1字节 -128~127 short 2字节 -215~215-1(-32768-32767) int 4字节 -231~231-1(-2147483648-2147483647) long 8字节 -263~263-1 -
Java语言整型常量的三种表示形式:
- 十进制整数
- 八进制整数,要求以0开头
- 十六进制整数,要求以0x或0X开头
-
Java语言的整型常量默认为int型
-
声明long型常量,可以在常量后面加‘l’或“L”
2.3 浮点类型
-
浮点类型表示有小数部分的数字,分为单精度浮点类型(float)和双精度浮点类型(double)。它们有不同的取值范围,如下表:
-
类型 占用存储空间 表示数值范围 float 4字节 -3.403E38~3.403E38 double 8字节 -1.798E308~1.798E308 -
Java浮点类型常量有两种表示形式
- 十进制数形式,必须含有小数点
- 例:double d =2.14;
- 科学记数法形式,字母e/E后必须为整数
- 例:double d =2.14e2;//2.14*10^2
- double d =2.14E10;//2.14*10^10
- 十进制数形式,必须含有小数点
-
Java浮点型常量默认为double型,如要声明一个常量为float型,则需在数字后面加f或F
2.4 字符类型
-
char型数据用来表示通常意义上“字符”,用来存储单个字符;
-
字符常量使用单引号括起来的单个字符
- 例:char c = ‘A’; //表示一个字母
- char c = ‘你’; //表示一个中文汉字
- char c = 20556; //通过下标值获取Unicode编码中的字符
-
Java字符采用Unicode编码,每个字符占两个字节,因而可用十六进制编码形式表示(前缀为u表示Unicode)
- 例:char c = ‘\u0061’; //通过Unicode编码得到一个字符
-
Java语言中还允许使用转义字符’\ '来将其后的字符转变为其它的含义
- 例:char c = ‘\n’; //代表换行符
-
转义符 含义 Unicode值 \b 退格 \u0008 \n 换行 \u000a \r 回车 \u000d \t 制表符 \u0009 \ " 双引号 \u0022 \ ’ 单引号 \u0027 \ \ 反斜杠 \u005c
2.5 布尔类型
-
boolean类型适用于逻辑运算,一般用于程序流程控制中作为条件判断。
-
boolean类型数据只允许取值true或false,不可以0或非0的整数替代true和false。
-
布尔值不能与整数类型进行转换
-
例:
-
boolean b = false; if(b){}
-
2.6 数据类型转换
有两种:
-
自动类型转换:将低数据类型的值赋给高数据类型的变量
-
两种类型兼容
-
目标类型表示的数值范围大于源类型
-
有可能会丢失精度(虚线之间)
-
例:
-
byte b = 100; short s = b; int i =b; int j =123; double d = j;
-
-
-
强制类型转换:将搞数据类型的值赋给低数据类型的变量
-
int m = 123; short m1 = (short)m; byte m2 = (byte)m; float f = 3.14f; int n = (int)f; System.our.println("n = " + n); // n = 3,丢失了精度
-
2.7 成员方法的定义
-
方法是类或对象行为特征的抽象。
-
Java中的方法不能独立存在,所有的方法必须定义在类里。
-
使用“类名.方法”或“对象.方法”的形式调用。
-
语法格式:
-
权限修饰符 返回值类型 方法名{ 方法体 return 返回值; }
-
-
方法各种形式:无参无返回值、无参有返回值、有参无返回值、有参有返回值
2.8 成员方法的参数
- 方法可有0到多个参数,参数类型可以是任意数据类型
- 参数为引用数据类型时:
- 当对象实例作为参数传递给方法时,传递的是对象的引用,为址传递,接受参数的方法中可以改变参数的值
- 参数为简单数据类型时:
- 传递的是参数的副本,为值传递,接受参数的方法中不会改变参数的值
- 参数为引用数据类型时:
- 方法参数也是局部变量
2.9 成员方法的返回值
-
方法可以有返回值类型声明,也可以没有,没有时使用void声明
-
方法返回值类型可以是任意类型
-
有返回值的方法体中必须有且仅有“一个return值“语句能被执行,执行后方法执行会立即结束
-
返回值与方法返回值类型可以相同或自动转换为方法返回值类型,或强制转换为方法返回值类型
-
调用有返回值的方法时,可以接收返回值,也可以不接收
-
例:
-
public class Demo{ int a = 1000; public Demo method(){ System.out.println("method"); return new Demo(); } public static void main(String[] args){ Demo d = new Demo(); d.method(); //没有接收方法的返回值 Demo d2 = new Demo(); //接收方法的返回值 System.out.println(d2.a); } } /*控制台显示为: method 1000 */
-
2.10 局部变量和成员变量
变量声明语法:
- 数据类型 标识符 = 值,…;
- 可以声明变量并初始化
- 也可先声明变量再初始化
局部变量:
- 定义在类的方法内或代码块内的变量,方法的参数也是局部变量
- 局部变量的作用域范围:只在定义它的方法体内或代码块内有效
- 局部变量在使用之前,必须先初始化
全局变量(成员变量):
-
一个类中既不在方法体内也不在程序块内定义的变量
-
作用域范围:类中所有的方法和代码块都可以访问成员变量
-
对于没有初始化的成员变量,系统会指定默认的值
-
成员变量的默认初始值:
-
数据类型 默认值 byte 0 short 0 int 0 long 0L float 0.0f double 0.0d char \u0000(空字符) boolean false object ref(引用数据类型) null
-
2.11 运算符介绍
- 分隔符:,,;,[],()
- 算术运算符:+,-,*,/,%,++,–
- 关系运算符:>,<,>=,<=,==,!=
- 逻辑运算符:!,&,|,^,&&,||
- 赋值运算符:=
- 扩展赋值运算符:+=,-=,*=,/=
- 三目运算符:?
- 字符串连接运算符:+
2.12 算术运算符
- Java中的算术运算符主要有+(加)、-(减)、*(乘)、/(除)、%(取余),它们都是二元运算符。
- 二元运算符:这个运算符左右两侧必须有两个操作数。
- “+”和“-”运算符还可以作为数据的正负符号。
- 自增和自减运算符
- 自增、自减运算符是单目运算符。
- 对于需要对操作数进行加1或减1操作时,可以使用递增或递减运算符
- 递增:++
- i++:先用i变量的值,然后再进行加1运算;先用后加
- ++i:先进行加1运算,再使用i变量的值;先加后用
- 递减:–
- i–:先用后减
- –i:先减后用
- 递增:++
2.13 关系运算符
- ==:判断相等
- !=:判断不等
- >:判断大于
- <:判断小于
- >=:判断大于等于
- <=:判断小于等于
2.14 逻辑运算符
- !:逻辑非
- 对结果取反
- &:逻辑与
- 只要其中一个位false,那么结果就为false
- |:逻辑或
- 只要其中一个变量为true,那么结果就为true
- ^:逻辑异或
- 两个逻辑变量相同则为false,相异则为true
- 两个逻辑变量相异,输出才为1
- &&:短路与
- 只要其中一个表达式或方法的返回值为false,那么结果就为false,且不执行之后的操作
- ||:短路或
- 只要其中一个表达式或方法的返回值为true,那么结果就为true,且不执行之后的操作
2.15 赋值运算符
- 赋值运算符“=”是最常用的一种运算符。它将等于号右边的表达式的值赋给左边的变量
- 赋值运算符的优先级很低
- 赋值运算符先计算右边,再计算左边
- 赋值表达式也有值
- 使用“+=,-=,*=,/=”时,会进行类型转换(含强转),转换成我们定义的变量类型
2.16 三目运算符
语法格式:
- x ? y : z
- 其中x为boolean类型表达式,先计算x的值,若为true,则整个三目运算的结果为表达式y的值,否则整个运算结果为表达式z的值
2.17 字符串连接符
- 运算符“+”用于数值类型数据,是加法运算符
- 用于字符串类型(String)数据中,是连接符
- 字符串+数值,Java会自动将数值转换成字符串,然后两个字符串相连生成一个新的字符串
- 只要+“加号”两边任意一边出现了字符串,那么+就被当成字符串连接符使用
2.18 运算符的优先级
表达式:
- 表达式是运算符和操作数的结合,它是任何一门编程语言的关键组成部分
- 表达式允许程序员进行数学计算、值的比较、逻辑操作以及在Java中进行对象的操作
运算符的优先级:
-
下面的表格说明了各个运算符的优先顺序,优先级高的运算符放置在表的上部,而在同一行的运算符拥有同样的优先顺序
-
除了单目运算符、赋值运算符以及条件运算符,其它的运算符都是从左到右结合的。
-
运算符优先级口诀:非、算、关、与或、赋
-
运算符说明 Java运算符 分隔符 . [] () , ; 单目运算符 + - ~ ! ++ – 创建或类型转换 New 乘法/除法 * / % 加法/减法 + - 关系 < <= >= > instanceof 等价 == != 按位与 & 按位异或 ^ 按位或 | 条件与 && 条件或 || 条件 ?: 赋值 =