JavaSE——数据类型与运算符

时间:2019-01-18
本文章向大家介绍JavaSE——数据类型与运算符,主要包括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中有两个未使用的保留字:gotoconst
  • Java中有三个特殊含义的单词:nulltruefalse
  • 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)