复习:
- JAVA的跨平台:JVM是跨平台的前提,针对不同 *** 作系统,有不同的JVM,JAVA语言是跨平台的但是JVM不是JAVA的技术结构:JAVASE,JAVAEE,JAVAME入门程序:JAVA程序必须放在JAVA文件(后缀名是.java);一个JAVA文件中可以存放多个JAVA类,但只能有一个是公共类,用public修饰,要求java文件名和类名一致,每个java类在编译完成之后都会产生一个class文件编译:javac -d 存放位置 要编译的java文件java命令,用于运行:java 包名.类名关键字:java中有特殊含义的单词,一共有53个关键字(2个保留字,goto,const),所有的关键字都是小写的。标识符:在java中自定义的名称----字母数字下划线
,
数
字
不
能
开
头
,
字
母
常
见
语
言
基
本
字
符
,
尽
量
避
免
使
用
,数字不能开头,字母常见语言基本字符,尽量避免使用
,数字不能开头,字母常见语言基本字符,尽量避免使用,大小写敏感,见名知意
代码中用于解释说明的文字:注释
注释格式:
- 单行注释: //注释文字多行注释:文档注释:
int i = 7; long l = i;
float f = 3.57f; double d = f;
//byte 1B, short 2B, int 4B, long 8B, float 4B, double 8B, char 2B, bool;
long l = 10; // java 中整数默认为int,10为int类型,int一定可以自动转化为long类型
//一个整数在int的范围内,赋值给long类型可以不加l
long l = 23456782; //正确
long l = 3348723982; //错误,超过了int 范围
long l = 3348723982L; //正确
规律二:整数可以自动转化为小数(但可能产生精度损失)
int i = 123456789; float f = i; // 正确,但是会输出精度损失,例如:1.23456792E8 float f = 500; //正确,500是整数,默认为int,可以直接赋值给浮点类型f float f = 400L; //正确
规律三:字符类型可以自动转化为整数
char c = 'd'; int i = c; //没有问题 short s = 'a'; System.out.println(s); char c = 97; System.out.println(c); //没有问题 short s = 'a';//a是一个字面量,确定的量,代码在编译的时候可以确定'a'的值是否在short的取值范围内,所以允许转化 char c = 97;//97是一个字面量,代码在编译的时候可以确定97的值是否在char的取值范围内,所以允许转化 char c = 'a'; short s = c;//c不是一个字面量,并不是一个确定的量,是一个变量,可能允许的范围在s允许的范围以外。在编译期间只能确定c是一个char类型的值,而不能确定具体指,在编译期间比对两个类型能否完全转化,发现char与short取值范围不完全重合,所以认为c会有超过short类型值得风险,因此不允许转化。 System.out.println(s); //有问题!同理,char c = s;也会报错。
short 类型 2B char 类型 2B
short:-32768~32767
char:0~65535
并不是包含关系或完全重合。
无精度损失:
char -> int
byte -> short -> int -> long
float -> double
有精度损失:
long ->float
2. 强制类型转换/显示转换
int i = 5; byte b = (byte)i; //表示将变量i强制转换为byte类型之后再赋值给变量b System.out.println(b); //正确,输出5 int i = 300; byte b = (byte)i; System.out.println(b);
大类型可以强制转化为小类型,但是转化时由于字节的损失所以数据可能不准确。
JAVA在CMD下中文报错信息出现乱码解决方案:https://blog.csdn.net/qq_43710979/article/details/100784050
开始-> 右键计算机 ->属性 -> 高级系统设置 ->环境变量 -> 系统变量的部分点击新建
输入变量名:“JAVA_TOOL_OPTIONS”
输出变量值:"-Dfile.encoding=UTF-8"
public class OperatorDemo{ public static void main(String[] args){ //这片代码没问题,输出7 int i = 3; int j = 4; int k = i + j; System.out.println(k); //这段代码有问题,提示如下: byte i = 3; byte j = 4; byte k = i + j; System.out.println(k); } }
从int转换到byte可能会有损失
1. byte short char 在参与运算时会自动提升为int
//正确代码: public class OperatorDemo{ public static void main(String[] args){ byte i = 3; byte j = 4; byte k = (byte)(i + j); System.out.println(k); } }
同理,以下代码也需要强制转换
public class OperatorDemo{ public static void main(String[] args){ byte i = 3; i = i + 4 System.out.println(i); //编译报错 } }
public class OperatorDemo{ public static void main(String[] args){ int i = 3 + 5; System.out.println(i); //打印输出8,并不报错 } }
public class OperatorDemo{ public static void main(String[] args){ byte i = 3 + 5; System.out.println(i); //打印输出8,也不报错,因为3和5是两个字面量 //两个字面量参与运算的时候,JAVA为了提高效率在编译的时候会进行自动的计算过程。 //编译完成后是 byte i = 3 + 5 ====== byte i = 8; } }
2. java 是一门强类型语言,同一类型运算完成后结果是同一类型
小类型与大类型同时运算的时候,结果一定是大类型!
int / double = double
public class OperatorDemo{ public static void main(String[] args){ int i = 4500; i = i / 1000 * 1000; System.out.println(i); //输出4000 } }
public class OperatorDemo{ public static void main(String[] args){ int i = 4500; i = i / 1000.0 * 1000; System.out.println(i); //输出4500 } }
3. JAVA中小数是浮点数,并不能精确存储
public class OperatorDemo{ public static void main(String[] args){ double d1 = 3.29; double d2 = 2.98; double d = d1 - d2; System.out.println(d); } }
编译的时候检查的是语法,例如下面的代码:
public class OperatorDemo{ public static void main(String[] args){ System.out.println(3/0); } }
编译通过,但是运行会报错:
ArithmeticException
public class OperatorDemo{ public static void main(String[] args){ System.out.println(3.0/0); } }
非零小数除以整数零:得到infinity或 -infinity
3.0/0 3/0.0
0/0.0 0.0/0 0.0/0.0 --NaN
%取模运算(取余运算)
89 % 7 = 5
5 % 7 = 5
但是:
-89 % 7 = -5
-5 % 7 = -5
89 % -7 = 5
5 % -7 = 5
-89 % -7 = -5
-5 % -7 = -5
结果的符号和%左边数字有关:%左边为正,则结果为正
JAVA中还可以小数取余
3.2 % 2 = 1.2
5 % 1.4 = 0.8
5.2 % 1.7 = 0.1
自增++ / 自减–
public class OperatorDemo{ public static void main(String[] args){ int i = 5; ++i;//i++ System.out.println(i);//输出6 --i;//i-- System.out.println(i);//输出5 } }
++在前:先自增再参与后续运算
++灾后:先取值再自增
int i = 5; int j = ++i;//i先自增为6,再赋值给J int i = 5; int j = i++;//现将i的值(5)取值,i自增为6,然后将5赋值给j
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)