Java基础语法
- 注释、标识符、关键字
- 数据类型
- 类型转换
- 变量常量
- 运算符
- 包机制、JavaDoc
注释、标识符、关键字
1.注释(注释不会被执行)
- 单行注释:用"//“表示
- 多行注释:”/* */“表示
- JavaDoc文档注释:用/** */表示
2.标识符
- 标识符以字母、美元符($)、下划线(_)开头
- 首字符之后可以是字母、美元符($)、下划线(_)或数字的任何字符组合
- 不能使用关键字作为变量名或方法名
- 标识符是大小写敏感的
- String不是关键字,是一个类
Java数据类型
-
整数类型
- Byte占1个字节范围-128-127
- short占2个字节范围
- int占四个字节范围
- long占8个字节范围(Long类型要在数字后面加个L)
-
浮点类型
- float占4个字节范围(float类型要在数字后面加个F)
- double占8个字节
-
字符类型:char占2个字节
-
Boolean类型:占一位 其真值只有true和Flase两个
-
浮点数拓展
float a1 = 0.1f;//0.1 double a2 = 1.0/10;//0.1 System.out.println(a1==a2);//此处输出为false System.out.println(a1); System.out.println(a2); float a3 = 2121213121212f; float a4 = a3+1; System.out.println(a3==a4);//此处输出为true
因为float的有限性、离散性、舍入误差,所以以上代码比较结果如下
-
避免使用浮点数进行比较
-
字符拓展
//字符拓展 char a1 = 'a'; char a2 = '中'; System.out.println(a1); System.out.println((int)a1);//强制转换 System.out.println(a2); System.out.println((int)a2);//强制转换
-
输出结果为
-
所有字符的本质都是数字,所有所有字符都有对应的Unicode编码
-
Unicode的编码方式:
char a3 = '\u0061'; System.out.println(a3);
类型转换
-
Java是强类型转换语言,所以在进行运算时,需要把不同类型的数据转换成同一类型再进行运算
-
类型优先级
int i = 128;
double d = i;//自动转换
byte b = (byte)i;//强制转换,注意数据溢出
System.out.println(i);
System.out.println(d);
System.out.println(b);
/**
* 注意点:
* 不能对布尔型进行转换
* 不能把对象类型转换为不相干的类型
* 在把高容量转换成低容量的时候,强制转换
* 转换的时候可能存在内存1溢出,或者是精度问题*/
输出结果:
!
- 因为Byte类型取值范围为-128-127所以数据溢出了。
- “强制转换"时需要注意数据溢出; 转换方式: (类型)变量名 优先级高–低时使用
- 自动转换:优先级低–高时自动使用
数据溢出问题:
//操作比较大的数据时 注意溢出问题
//JDK7新特性 数字之间可以用下划线_分割
int money = 10_0000_0000;//新特性
int years = 20;
int total1 = money*years;//-1474836480,计算的时候已经溢出
System.out.println(money);
System.out.println(years);
System.out.println(total1);
long total2 = money*years;//先计算再赋值,所以数据转换前已经溢出了
System.out.println(total2);
long total3 = money*((long)years);//先把一个数转换成long 计算后的结果的类型即为long类型
System.out.println(total3);
输出结果:
变量、常量、作用域
-
类变量
-
静态代码块(static)
- 静态代码块只会被执行一次
- 静态类可以被局部对象调用
- 静态变量可以被执行多次
public class demo5 { static int i=1; static { System.out.println("a"); i++; } public demo5(){ System.out.println("b"); i++; } //在此之前i已被调用两次,i的值为2 public static void main(String[] args) { demo5 d1 = new demo5();//i在次被调用,i+1,此时i=3 System.out.println(d1.i); demo5 d2 = new demo5();//i在次被调用,i+1,此时i=4 System.out.println(d2.i); } }
输出结果:
-
实例变量:从属于对象,如果不自动化初始化,这个类型的默认值为0/0.0
-
布尔值:默认是false
-
除了基本类型,其余的默认值都是null;
-
-
常量
- 常量定义通过final实现 一般使用大写字母表示
- 修饰符不存在先后顺序
-
变量命名规则
基本运算符
- Java语言支持如下运算符
-
当java进行除法运算时,需要进行类型强转换
package JavaSEbase; public class demo6 { public static void main(String[] args) { int a = 10; int b = 20; int c = 25; int d = 25; System.out.println(a+b); System.out.println(a-b); System.out.println(a*b); System.out.println(a/b);//结果为0.5 System.out.println(a/(double)b); } }
显然加了强转double的表达式输出了正确的结果
-
在整数的运算过程中,有long类型则结果为long类型,其余都为int类型
package JavaSEbase; public class demo7 { public static void main(String[] args) { long a = 123132132132132L; int b = 123; short c = 10; byte d =8; System.out.println(a+b+c+d);//long System.out.println(b+c+d);//int System.out.println(c+d);//int } }
-
一元运算符:自增与自减
package JavaSEbase; public class demo8 { public static void main(String[] args) { int a = 3; int b = a++;//先把a赋值给b再自增 //a=a+1 System.out.println(a);//此时a=4 //a=a+1 int c = ++a;//先自增再把a赋值给c System.out.println(a);//此时a=5 System.out.println(b); System.out.println(c); } }
-
逻辑运算符
-
逻辑与&&:有假就假,全真才真
-
逻辑或||:有真就真,全假才假
-
逻辑与的短路运算
package JavaSEbase; public class demo9 { public static void main(String[] args) { //短路运算:即使用逻辑与运算时,假设前面的值为假,则运算符后面的运算不会执行 int c = 5; boolean d = (c<4)&&(c++<4);//因为c<4为假,所以后面c++不会被执行 System.out.println(d); System.out.println(c); } }
-
-
位运算:针对二进制数据进行的运算
- &:同位比较,全1才1,有0则0
- |:同位比较,全0才0,有1则1
- ^:同位比较,相同为0,不同位1
- ~:取反符号。
package JavaSEbase; public class demo10 { public static void main(String[] args) { /* * A = 0011 1100 * B = 0000 1101 * ----------------------- * A&B = 0000 1100 * A|B = 0011 1101 * A^B = 0011 0001 * ~B = 1111 0010 * ----------------------- * */ } }
-
三元运算符
package JavaSEbase; public class demo11 { public static void main(String[] args) { //x ? y : z //如果x为真,则结果为y,否则结果为z int score = 50; String type = score < 60 ? "不及格":"及格"; } }
-
+号运算符的特殊之处(运算符)
package JavaSEbase; public class demo10 { public static void main(String[] args) { int a = 10; int b = 20; a+=b;//相当于a = a+b a-=b;//相当于a = a-b System.out.println(a); //当+号前面有String 则自动把后面的运算也转换成String、 System.out.println(""+a+b); System.out.println(a+b+""); } }
包机制
- 命名规范