JavaSE——数据类型与运算符
1.Java标识符与关键字
1.1.Java注释
注释分为以下三种:
- 单行注释://注释内容(使用最多)
- 多行注释:/* 注释内容 */(不推荐)
- 文档注释:/** 文档注释 */(常见于
方法和类
之上,描述方法和类的作用,可用于生成自动文档
)
1.2.Java标识符
Java中,对于变量、常量、函数、语句块等的名字,我们称之为标识符。
1.2.1.标识符基本要求
对于Java标识符,有三点基本要求:
- 标识符由
字母
、数字
、下划线_
、美元符号$
组成,其中不能以数字开头
,不能使用Java中的保留字
(关键字) - 标识符要采用
有意义
的简单名字 $不要出现在代码中
1.2.2.驼峰命名方法
小驼峰
变量
、方法
命名:标识符由多个单词组成,第一个单词首字母小写,第二个之后的单词首字母大写
eg:myFun();myFirstInt
大驼峰
类
命名:类名是以大写字母开头的名词,如果由多个单词组成,则每个单词首字母大写。Java源文件文件名必须与公共类(public class)的名称相同
eg:class FirstDemo
1.2.3.阿里编码规范
- 代码中的命名均
不能以下划线或美元符号开始
,也不能以下划线和美元符号结束
- 代码命名
严禁使用拼音和英文混合
方式,更不允许直接用中文
- 类名使用
UpperCamelCase
风格,方法名、参数名、成员变量、局部变量统一使用LowerCamelCase
风格 - 常量名
全部大写
,单词间用下划线隔开
eg:MY_STRING
1.3.Java关键字
关键字:在所有程序中有特殊意义的文字标记,Java关键字如下
用于定义访问权限修饰符的关键字 | 用于定义类、函数、变量修饰符的关键字 | 用于定义类与类之间关系的关键字 | 用于定义建立实例及引用实例的关键字 | 用于异常处理的关键字 | 用于包的关键字 | 其他修饰符关键字 |
---|---|---|---|---|---|---|
private、protected、public | abstract、final、static、synchronized | extends、implements | new、this、super、instanceOf | try、catch、finally、throw、throws | package、import | native、strictfp、transient、volatile、assert |
有关Java关键字的几点说明:
- Java中有两个未使用的保留字:
goto
、const
- Java中有三个特殊含义的单词:
null
、true
、false
- JDK1.4后追加了
assert
关键字;JDK1.5以后追加了enum
关键字
2.Java数据类型划分及使用
2.1.数据类型划分
2.2.数据类型的使用
在数据类型的选择上有如下建议:
- 在程序开发中,
整数就用int
,描述小数用double
- long一般用于描述日期、时间、内存或文件大小(字节)
- 如果要进行
编码转换
或者进行二进制流的操作
,使用byte(-127~128) - char一般在描述中文中会用到(基本忽略)
2.2.1.整型
在进行整型数据操作的过程之中也会存在数据溢出问题,指的是当已经达到了整型的最大最小值继续进行数学运算而可能产生的错误数据问题,如下
int maxValue = Integer.MAX_VALUE;
int minValue = Integer.MIN_VALUE;
System.out.println(maxValue+1);
System.out.println(minValue-1);
解决方案只要一个:更换数据类型
int maxValue = Integer.MAX_VALUE;
long num = maxValue+1;
System.out.println(num);
如上改进输出还是不对,因为所有程序的执行顺序是从右边到左边
,所以应该
int maxValue = Integer.MAX_VALUE;
long num = maxValue+1L;
System.out.println(num);
大的数据类型转为小的类型,必须强转,但有时会丢失内容
,如下
long num = 2147483648L;
int result = (int) num;//-2147483648
- 范围小的数据类型可以自动变为数据范围大的数据类型(在数学计算时)
- 数据范围大的数据类型只有强制转换才能转为数据类型小的数据类型
!!!!数据的默认值在主方法中无效
,如下
public static void main(String[] args) {
int num ; // 定义一个整型变量但并未赋值
System.out.println(num) ;
}
这时有两种解决方案:
- 在使用前进行赋值
- 在定义变量时赋值
2.2.2.byte
byte类型保存的范围是:-128~127
public static void main(String[] args) {
//10是int,int范围大于byte范围,理论上要进行强转,可是这里没有,因为数据在byte保存范围内
byte data = 10;//10是int型,在byte范围内
System.out.println(data);//10
//同时必须注意,如果要将int变量赋值给byte类型,必须强转
int num = 10;
byte t = (byte)num;
System.out.println(t);//10
//注意如下代码输出
byte d = (byte)300;
System.out.println(d);//44
}
2.2.3.浮点型
描述小数默认为double
//double定义小数
double num = 10.2;//这是一个小数
System.out.println(num * 2);//num是double型,2是int型
//输出
//20.4
注意
:float保存范围小于double,如果要使用float,必须强制类型转换,在后面加“F”或者“f”
//定义float变量
float f1 = 1.1f;
System.out.println(f1);//1.1
//注意如下代码
System.out.println(1.1*1.1);//精度不够导致输出1.2100000000000002
int numA = 10 ;
int numB = 4 ;
// int/int型还是int型
System.out.println(numA/numB) ;//2
// 如果要想准确计算,必须将其中一个变量变为double类型
System.out.println(numA/(double) numB) ;//2.5
2.2.4.字符型
字符型使用char来表示,并且使用’ '来表示字符变量内容,并且可以与int相互转换
char c = 'A' ;
int num = c ;
System.out.println(num);//65
- 大写字母(A ~ Z):65(A)~90(Z)
- 小写字母(a ~ z):97(a)~122(z)
int型转为char型需要强制类型转换
char c = 'A';
int num = c + 32;
char x = (char)num;
System.out.println(x);//a
!!!!注意
:字符型数字(‘0’ ~ ‘9’)与int数字(0~9)不同, if('0'== 0)结果一定是false
Java中使用Unicode
编码(一般其他语言采用ASC II编码),使用16进制编码,可以保存任何文字信息(包含中文),因此Java对字符的特性支持的比较好
。
2.2.5.布尔型
在其他语言中,没有提供布尔类型,因此用’0’表示false,非0表示true。但在java中拥有布尔型。
2.2.6.初见String类
char可以描述的只是单一的字符,现在要想描述多个字符,就必须利用字符串这一概念。String并不是基本数据类型,String是一个引用数据类型
,它的默认值为null
。
String name = "邹大炮" ;
String note = "学生" ;
System.out.println(name);//邹大炮
System.out.println(note);//学生
String类可以使用“+
”表示两个字符串的连接
。
int numA = 10 ;
double numB = 10.5 ;
String result = "计算结果:" +numA + numB ; // 此时“+”不是数学运算而是字符连接。
System.out.println(result) ;//1010.5
通过上述代码我们发现,只要使用了“+”出现了字符串,则所有的数据类型(包含引用类型)都变为String。如果要想得到正确的运算结果,必须使用"()"来解决问题
,如下
int numA = 10 ;
double numB = 10.5 ;
String result = "计算结果:" + (numA + numB ) ;
System.out.println(result) ;//20.5
在程序里还存在转义字符的概念,有如下几个常用转义字符:
- 换行:\n
- 制表符(tab):\t
- 一个双引号:
\"
- 一个单引号:
\'
System.out.println("邹大炮\n\t是我的\"小可爱\"啦啦啦啦");
//输出
//邹大炮
// 是我的"小可爱"啦啦啦啦
3.运算符
3.1.基础运算符
自增和自减运算
注:x++ 先运算后自增;++x 先自增后运算
3.2.三目运算符
三目是一种赋值运算,根据条件来判断赋哪个值,使用三目运算符可以简化代码
,语法如下:
数据类型 变量 = 布尔表达式?满足时赋值:不满足时赋值
int x = 3;
int y = 4;
int z = 3>4?x+y:x-y;
System.out.println(z);//-1
3.3.关系运算符(>、<、>=、<=、==)
所有关系运算符返回类型均为布尔型(true,false)
,可以与逻辑判断语句一起使用
char a = 'a';
int num = 100;
System.out.println(a>num);//false
3.4.逻辑运算符
逻辑运算符为:与(&、&&)、或(|、||)、非(!)
if(1<2||(10/0==0)){
System.out.println("条件满足");
}else{
System.out.println("条件不满足");
}
//此时程序报错
if(1<2||(10/0==0)){
System.out.println("条件满足");
}else{
System.out.println("条件不满足");
}
//此时输出条件满足
总结如下
- 当使用"&“时,明确的表示多个条件都判断了,如果在多个表达式中有条件返回了false,
剩余的条件也要判断
;而如果使用”&&"(短路与
),只要有条件返回false,剩余条件不再判断
,返回false。 - 当使用"|“时,明确的表示多个条件都判断了,如果在多个表达式中有条件返回了true,
剩余的条件也要判 断
;而如果使用”||"(短路非
),只要有条件返回true,剩余条件不再判断
,返回true。
综上,逻辑判断中尽量使用短路与和短路非
3.5.位运算符(&、|、^、~)
位运算的关键在于二进制与十进制的转换
- 使用&(有一个0就是0)
- 使用|(有一个1就是1)
- HTML5离线缓存攻击测试
- IE的BHO通过IHTMLDocument2接口获得网页源代码
- 【C++】小心使用文件读写模式:回车('r') 换行('n')问题的一次纠结经历
- 【C】用C语言提取bmp图片像素,并进行K-means聚类分析——容易遇到的问题
- SEED缓冲区溢出实验笔记
- HTTP严格安全传输(HTTP Strict Transport Security, HSTS)chromuim实现源码分析(一)
- Linux下ls命令显示符号链接权限为777的探索
- Django form表单
- Django ORM那些相关操作
- 使用mitmproxy嗅探双向认证ssl链接——嗅探AWS IoT SDK的mqtts
- Django中ORM介绍和字段及其参数
- 几个实现分页的方法
- 如何识别IDA反汇编中动态链接库中的函数
- Kali Linux安装TL-WN821N USB无线网卡驱动(make失败)
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 你对排序算法了解多少
- 【大数据架构】大数据数据仓库与数据中台架构
- JavaScript中的内置对象、面向对象与原型
- Java.lang.Illegalaccessexception 或 java.lang.NoSuchMethodError
- Python 爬虫进阶必备 | 关于某电商 token 参数加密逻辑分析
- Python 爬虫进阶必备 | 某直播数据分析平台加密参数 sign 分析
- Python 爬虫进阶必备 | 某指数分析平台解密逻辑分析
- SpringBoot开发秘籍 - 事件异步处理
- Hive on Spark参数调优姿势小结
- 想跨端开发小程序?这个最流行的跨端框架一定要学习!
- 1分钟搞定 Nginx 版本的平滑升级与回滚
- 详解:如何在uni-app中选择一个合适的UI组件库
- Python处理HTTP请求之requests指北
- 习题 3: 数字和数学计算
- Python桌面图形程序美化的方法论