一、注释
java注释用来解释代码的作用,可以增强代码的可读性。在javac编译的时候,不会编译注释。
单行注释:// 注释一行
多行注释:/* */ 可以注释多行
文档注释:/** */可以注释多行,一般写在类、方法、成员变量上方,通过javadoc命令,可以将注释内容生成文档。
注意:多行注释可以嵌套单行注释,不能嵌套多行注释,单行注释不能嵌套多行注释。
二、标识符
标识符就是给类、方法、变量等取的名字。
规则:
- 只能由 数字、字母、_(下划线)、$(美元符)组成,但是数字不能开头。(其实中文、日文也可以,但是不要用)
- 不能使用java关键字(已经被赋予特殊含义)、保留字(将来可能被赋予特殊含义)作为标识符
- 不建议使用java中已经定义好的类作为我们的类名
- 建议:使用驼峰式写法;类名首字母大写、方法名变量名首字母小写。如:类UserName;方法getUserName();变量userName
三、变量
变量即是一个容器,可以保存数据,在同一时间只能保存一个数据。
步骤:
- 声明变量 :数据类型 变量名;如 int age;
- 给变量赋值:可以先定义在赋值;也可以声明的同时赋值 ;
- 使用数据:可以打印;赋给另一个变量;参与运算;作为参数传递
注意:
class Demo { static int a; a=2;//报错,在声明成员变量时,要么声明的同时赋值,要么在方法中赋值,在类中不能这样操作 public static void main(String[] args) { System.out.println(a); } }
分类:成员变量:声明在类中,如果没有初始化,系统会分配默认值,作用范围是整个类
局部变量:声明在方法、形参、代码块中,使用前必须初始化,作用范围是局部区域(如:方法内部),且只能声明的变量下方使用
四、基本数据类型
8种基本数据类:byte、short、int、long、float、double、char、boolean
整数型:
byte:1byte
short:2byte
int:4byte(默认类型)
long:8byte;定义时在数字后方加L,否则是默认的int类型通过隐式类型转换成long型
浮点型:
float:4byte;定时时在数字后加F,否则是默认的double类型,将报错无法从高精度赋值给低精度类型
double:8byte(默认类型)
字符型:char 2byte (没有负数,0~到65535,默认字符空,即u0000,注意转义字符的使用“ ”表示回车换行)
布尔型:1bit,true 和 false(默认),注意:不能当做0和1参与运算
注意:a+b做某种运算,如果a、b中有double,结果类型就是double;如果有float,结果类型就是float;如果有long,结果类型就是long,除此之外都是int(byte、short、char、int)
五、数据类型转换
byte short (char) int long float double
------从左到右,精度由低到高------------>
隐式类型转换:精度低的类型将值赋给精度高的类型,如double dou=10;int型的值赋给byte,short,char,并且不超过他们的范围时,如:byte b=10;char c=99;
强制类型转换:将精度高的类型的值赋给精度低的,有溢出风险,溢出时不断进位,直到该类型能容纳该数据。如:int a=10;byte b=(byte)a;
六、运算符
赋值运算符:= += -= *= /= %=
注意:
class Demo { public static void main(String[] args) { //byte by=1; //by=by+1;//报错,不能将高精度int,赋给低精度byte by+=1;//这种方式会自动的强制类型转换,有点像自增自减也不会报错 System.out.println(by); } }
算数运算符:+ - * / %(取余) 注意:“+”两边至少有一边出现字符串时,“+”将作连接符使用,左边有运算会进行运算,右边不会参加运算,直接连接(除非使用()提升优先级)
自增自减运算符:++ --
a++:第一步:将a的值取出赋给a++这个整体;第二步:将a的值加1
++a:第一步:将a的值加1;第二步将a的值取出赋给++a这个整体
注意:
class Demo2 { //这是考题,但是实际开发中不能这样写 public static void main(String[] args) { int a = 3; a = a++; System.out.println("a="+a); //3 int b = 3; b = ++b; System.out.println("b="+b); // 4 byte c=1; c=c++;//没有报错,按理说不能由高精度int,赋给低精度byte, //所以推测这里应该是自动进行了强制类型转换 System.out.println(c); } }
比较运算符:== 、!=、>、<、>=、<=、instanceof(判断一个对象是否是某种类型);比较出来的结果是布尔类型
注意:“==”比较基本数据类型比较的是值,比较引用数据类型时比较两个对象的地址
instanceof不能用来判断基本数据类型
逻辑运算符:&、 &&(左边为false短路)、 |、 ||(左边为true短路)、 !
位运算符:&、|、~(取反)、 ^(异或)、 >>、 <<
注意:~(取反)公式是:-(值+1),例如~3=4、~-4=3
n<<m --> n*2^m:如果是整数,右边补0;如果是负数右边补1
n>>m --> n/2^m:如果是正数,左边补0,;如果是负数左补1;
n>>>m --> n/2^m:无符号右移,左边永远补0,所以n为负数没有意义
三元运算符:语法格式:X ? Y : Z
注意:X为布尔值或布尔表达式,只有YZ类型相同时,结果才能被接收;YZ可以是不同类型,但只可以被打印输出;
三目运算符可以嵌套使用:如(a<b?a:b)?c(a<b?a:b):c;//求三个数的最小值
//求三个数的最小值
public static int getMin(int a,int b,int c){ int min=a<b?a:b;//获取a、b最小值 min=min<c?min:c;//将a、b中最小值和c比较 return min; }