eg:
public class Hello{
public static void main(String[] args){
String name="fd";
}
}
这里的class就是类名,main就是方法名。(class类,main方法)
所有的标识符都是以字母(A-Z或者a-z),美元符$,或者下划线(_)开始
首字母之后可以使字母(A-Z或者a-z),美元符$,下划线(_)或者任何字符组合
不能使用关键字作为作为变量名或者方法名
标识符是大小写敏感的
可以使用中文作为方法名或者变量名,但是不建议
数据类型
-
基本数据类型(Primitive type)
public class datatype{
public static void main(String[] args){
//八大基本数据类型
//整数
int num01=10;//int的范围是正负20亿
byte num02=20;//byte的范围是-128-127
short num03=30;
long num04=40L;//long类型的数字要在末尾加上L,和short类型的数字区分
//小数:浮点数
float num05=3.14F;//单精度浮点数要在末尾加上F,和double类型进行区分
double num06=6.28;
//字符
char name='a';//字符类型只能是单个字符
char name='国';//字符类型可以是单个中文字符
char name='ab';//错误,不是单个
//布尔值,只能表示是非
boolean flag01=true;
boolean flag02=false;
}
}
-
字节
类型转换
运算中,不同类型的数据先转化为同一类型,然后才能进行运算
低------------------------------------------------------------->高(优先级)
byte,short,char < int < long < float < double
public class demo{
public static void main(String[] args){
int i=128;
%byte b=i;%此处会报错,高级不能直接赋给低级,需要进行强制类型转换
%更需要注意的是int i=128已经超出了byte的数据类型的内存长度(-128-127),强制类型转换后会产生内存溢出
byte b=(byte)i;
double c=i;%此处没有问题,低级的可以直接赋值给更高的优先级的数据类型
%总结上面内容就是,数据类型优先级:高赋值给低要强制转换,低赋值给高可自动转换
/*注意:
1.不能对布尔值与其他数据类型进行转换
2.不能把对象数据类型转换为不相干的数据类型
3.高优先级转换到低优先级使用强制类型转换,反之则自动转换
4.转换时可能存在内存溢出或者精度问题
*/
system.out.ptintln((int)3.14f);%输出结果是3,损失了精度
char d='a';%字符变量d存的是'a',这个'a'并不只是一个字符,在内存中它对应着一个ASCII码,是可以进行加减运算的
int e=d+1;%低优先级向高优先级可进行自动类型转换
system.out.ptintln(e);%打印a+1的ASCII码,98,因为e就是int类型的
system.out.ptintln((char)e);%高向低强制转换
}
}
public class demo{
public static void main(String[] args){
//操作比较大的数的时候,注意溢出问题
//JDK7以后的新特性,数字之间可以用下划线分割
int money=1_000_000_000;
int years=20;
int total01=money*years;//output:-1474936480,计算的时候产生了溢出,int类型的范围大致是±21亿
long total02=money*years;//output:-1474936480,仍产生溢出,
/*
两个int类型的数据先计算,然后赋值给total02(long),但是仍然溢出,对比上一句发现是计算就出问题了,也就是说int*int结果已经溢出了int类型的 范围,再赋值也是把错误的数据(溢出的数据)给了total02,所以出错。
*/
long total03=money*((long)years);//先把其中一个变量转换成long数据类型,会把整个表达式的数据范围都提升,计算之前就已经达到精度
}
}
注意:小写的“l”很容易看成数字“1”,所以使用的时候尽量使用大写的L。