程序中加号的使用
- 左右两边都是数值型时,做加法运算
- 左右两边有一方为字符串,做拼接运算
数据类型
强数据类型语言
基本数据类型
数值型
- 整数类型 byte short int long
- 浮点类型 float double
字符型
- 字符 char
布尔型
- boolean
引用数据类型
类(class)
string是一个类,不属于基本数据类型
接口(interface)
数组([])
整数类型
- java 的整型有固定的范围和字段长度,不受具体的OS影响
- java 的整型常量默认为 int 类型,声明 long 型常量需要加上 l 或 L 后缀
浮点类型
-
浮点数在机器中存放的形式为 浮点数 = 符号位 + 指数位 + 尾数位
-
尾数部分可能丢失,造成精度损失( 小数都是近似值 )
-
java 的浮点类型常数默认为 double 类型, 声明 float 类型常量要加上 f 或 F 后缀
-
科学计数法表示方法 5.12e2(5.12*10^2) 5.12E-2 (5.12/10^2)
-
小数运算陷阱 2.7 与 8.1/3 的比较,8.1/3 会算出一个接近 2 = 2.7的一个浮点数
(浮点数相等的比较时需要使用两数差值的绝对值在某个精度的范围内判断)
Java API 文档(Application Programming Interface 应用程序接口)
https://www.matools.com
Java 的组织形式
以包 package 的形式组织,关系如下:
包
接口
类
字段
构造器(构造方法)
成员方法(方法)
异常
查找方法
- 包–>类–>方法
- 直接索引
字符类型
- 字符类型赋值只能使用单引号
- Java 中 char 本质是一个整数
- 使用 unicode 码(使用两个字节表示字符),可以表示几乎所有语言字符
- ASCII 码(使用一个字节表示字符),一共128个字符
- utf-8 码(编码表,大小可变的编码,字母使用1个字节,汉字使用3个字节)
- gbk(可以表示汉字,范围广,字母使用1个字节,汉字使用2个字节)
- gb2312(可以表示汉字,gb2312 < gbk)
- big5 码(繁体字)
布尔类型
- boolean 使用在逻辑运算中
- 不可以使用0或者非0的整数代替false和true
基本数据类型转换
自动类型转换
精度小的类型自动转换为精度大的数据类型
char - int - long - float - double
byte - short - int - long - float - double
注意事项
- 多种类型数据混合运算时,系统首先自动将所有数据转换成容量最大的数据类型,然后计算(注意在混合运算赋值中常量为double类型,需要用double变量接受或者加后缀F)
- char 和 byte, short 之间不发生自动转换
强制类型转换
自动类型转换的逆过程,将容量大的数据类型转换为容量小的数据类型,使用时要加上强制转换符(),但可能造成精度降低或溢出
public class ForceConvert{
//编写一个main方法
public class void main(String[] args){
//精度损失
int n1 = (int)1.9;
System.out.println("n1=" + n1);
//精度溢出
int n2 = 2000;
byte b1 = (byte)n2;
System.out.println("b1=" + b1);
}
}
注意:
- 强制转换符号只对最近的数作用,需要注意小括号的使用;
- char 类型可以保存int的常量值,但不能保存int变量值,需要强制转换;
- byte, short, char类型在进行运算时,当作int类型处理
基本数据类型和String类型的转换
public class StrintToBasic{
//编写一个mian方法
public static void main (String[] args){
//Basic -> String
int n1 = 100;
float f1 = 1.1F;
double d1 = 4.6;
boolean b1 = true;
String s1 = n1 + "";
String s2 = f1 + "";
String s3 = d1 + "";
String s4 = b1 + "";
System.out.println(s1 + " " + s2 + " " + s3 + " " + s4);
//String -> Basic 通过基本类型的包装类
String s5 = "123";
//OOP
int num1 = Integer.parseInt(s5);
double num2 = Double.parseDouble(s5);
float num3 = Float.parseFloat(s5);
long num4 = Long.parseLong(s5);
byte num5 = Byte.parseByte(s5);
boolean b = Boolean.parseBoolean("true");
short num6 = Short.parseShort(s5);
System.out.println(num1);//123
System.out.println(num2);//123.0
System.out.println(num3);//123.0
System.out.println(num4);//123
System.out.println(num5);//123
System.out.println(num6);//123
System.out.println(b);//true
//String -> char 把String的第一个字符转为char
System.out.println(s5.charAt(0));
}
}
注意:
- 基本类型和String互相转换格式必须正确 如:可以将”123“转换为整型,但不能把”hello“转换为整型 否则会发生异常
运算符
算术运算符
关系运算符(比较运算符)
- == 相等
- != 不等于
- < 小于
- > 大于
- <= 小于等于
- >= 大于等于
- instanceof 检查是否是类的对象
关系运算符结果是 true or false
boolean a = "hsp" instanceof String;
System.out.println(a);// a = true
逻辑运算符
逻辑运算符结果是 ture or false
短路与、或,取反
boolean x1 = a&&b;//短路与
boolean x2 = a||b;//短路或
boolean x3 = !a;//取反运算
逻辑与、或、异或
boolean x1 = a&b;//逻辑与
boolean x2 = a|b;//逻辑或
boolean x3 = a^b;//异或运算
注意区别
短路与:第一个条件不满足时,第二个条件不会判断,效率高
逻辑与:不管第一个条件是否满足,第二个条件都要判断,效率低
短路或:第一个条件满足时,第二个条件不会判断,效率高
逻辑或:不管第一个条件是否满足,第二个条件都要判断,效率低
赋值运算符
三元运算符
int a = 10;
int b = 99;
int result = a>b ? a++ : b--;
如果条件表达式为true, 运算后的结果为表达式1;
如果条件表达式为false, 运算后的结果为表达式2。
Java 标识符的命名规则和规范
规则
同C
规范
- 包名:多单词组成时均用小写字母 如:aaa.bbb.ccc
- 类名、接口名:用大驼峰法,所有首字母大写 如:XxxYyyZzz
- 变量名:用小驼峰法,只有第一个单词首字母小写 如:xxxYyyZzz
- 常量名:所有字母都大写,用下划线连接 如:XXX_YYY_ZZZ
键盘输入语句
扫描器(Scanner)
-
导入Scanner类所在包
import java.util.Scanner;//简单的文本扫描器
-
创建Scanner对象,new创建一个对象
-
使用相关方法接收输入
Scanner myScanner = new Scanner(System.in); System.out.println("请输入名字"); //接收用户输入,查找并返回扫描器的下一个完整标记 String name = myScanner.next();//还有.nextInt() .nextDouble()等方法
进制
进制类型
- 二进制: 0b或0B开头
- 八进制:0开头
- 十六进制:0-9及A(a)-F(f),0x或0X开头