Java基本语法2
类型转换
- 运算时,若数据类型不同则需转换为同类型再进行运算
- 强制转换
- 格式;(类型)变量名
- 用于高容量转到低容量
- 自动转换
- 低范围转为高容量,自己转换就行
package basics; public class Grammar { public static void main(String[] args) { //类型转换 int i = 2; byte b = (byte)i; double d1 = i; } }
- 强制转换
- 转换规则与注意项
-
由低到高容量排列为:byte,short,char->int->long->float->double
-
byte、short和char类型数据参与运算均会自动转换为int类型
byte b1 = 10; byte b2 = 20; byte b3 = b1 + b2; // 第三行代码会报错,b1和b2会自动转换为int类型,计算结果为int,int赋值给byte需要强制类型转换。 // 修改为: int num = b1 + b2; // 或者: byte b3 = (byte) (b1 + b2); //另外,常量优化机制:常量则不会转换。如: byte d = 3 + 4; //正确。常量优化机制
-
不能对布尔值转换
-
不能把对象类型转为不相干类型
-
转换过程可能存在内存溢出或精度问题
- 操作大数时注意溢出
- 浮点数转整数会丢失小数点后的数字
-
变量
- 变量即可以变化的量
- Java是强类型语言,每个变量都必须声明其类型
-
变量是程序中最基本的存储单位
-
变量要素包括:
- 变量名
- 变量类型
- 作用域
-
声明格式:
type varName [=value][{,varName[=value]}]; //数据类型 变量名 = 值;可以使用逗号隔开来声明多个同类型变量
-
- 作用域:
- 分3种:类变量、实例变量、局部变量
//变量作用域 public class Varible{ static int allClicks = 0; //类变量 String str = "hellow world"; //实例变量 public void method() { int i = 0; //局部变量 } }
- 局部变量必须声明和初始化值
- 实例变量从属于对象
- 若不进行初始化,默认值为0或0.0
- 布尔值默认值则为false
- 基本类型外的默认值都为null
- 若不进行初始化,默认值为0或0.0
- 类变量 static
- 分3种:类变量、实例变量、局部变量
- 变量相关命名规范
- 所有变量、方法、类名尽可能见名知意
- 类成员变量、局部变量和方法名:首字母小写,使用驼峰原则
- 即除了第一个单词外,后面的单词首字母大写
- 例:monthSalary、lastName
- 常量:仅使用大写字母和下划线
- 下划线用于区分单词
- 类名:首字母大写且遵循驼峰原则
- 注意事项
- 每个变量都有类型,可以是基本类型也可以是引用类型
- 变量名必须是合法标识符
- 变量声明是一条完整语句,因此每个声明必以分号结束
常量
- 常量是初始化后不能再修改的值,不会再变动
- 可理解为一种特殊的变量
- 格式:
//常量 //final 常量名 = 值; final int I = 1;
- 常量名一般用大写字符
运算符
-
算术运算符:+,-,*,/,%,++,–
-
赋值运算符:=
-
关系运算符:>,<,>=,<=,==,!=instanceof
-
逻辑运算符:&&,||,!
-
位运算符:&,|,^,~,>>,<<,>>>
-
条件运算符:?:
-
扩展赋值运算符:+=,-=,*=,/=
-
字符串连接符:+
-
【拓展】
-
++/- -
- 即自增自减
// 运算符拓展 // ++、-- int x = 1; // x++与++x都是x+1 int y = ++x; // x先加1再赋值给y,即y为2 // 此时x由原先的1自增为2 int z = x++; // 再将为2的x值赋值给z,即z为,然后x再进行自增 // 即,为z赋值后x已由2自增为3 System.out.println(y); System.out.println(z); System.out.println(x);
- 即自增自减
-
+/-
- a = a + b等价于a += b
- 理解就好,不建议
- 幂运算
- 无幂运算,需使用工具类
// 幂运算 double pow = Math.pow(2, 10); // 计算2的10次方 System.out.println(pow);
- 位运算:>>,<<(右移与左移)
- 与计算机底层相关,效率极高
- 条件运算符:
- 是三元运算符
- x?y:z
- 若x == true,则结果为y
- 否则结果为z
- 重要!
- char类型参与算术运算,使用的是计算机底层对应的十进制数值。
- 需要我们记住三个字符对应的数值:
- ‘a’ – 97 a-z是连续的,所以’b’对应的数值是98,'c’是99,依次递加
- ‘A’ – 65 A-Z是连续的,所以’B’对应的数值是66,'C’是67,依次递加
- ‘0’ – 48 0-9是连续的,所以’1’对应的数值是49,'2’是50,依次递加
- 需要我们记住三个字符对应的数值:
- 当“+”操作中出现字符串时,这个”+”是字符串连接符,而不是算术运算
System.out.println("深圳"+ 666); // 输出:深圳666
- a = a + b等价于a += b
-
逻辑运算符:短路原则
- 对于A&&B,若A为false,则整个式子值确定为false,且不管B是否成立都不执行
- 对于A||B,若A为true,则整个式子值确定为true,且不管B是否成立都不执行
- 优先级
-
包机制
- 包,即文件夹,是区别类名的命名空间
- 是指向类或接口的一条路径,可利用其访问任意包中的类
- 作用
- 划分类名空间:确保不同包类名和接口名不冲突
- 同个包的类与接口不能重名
- 对类分类管理:将功能相似的类、接口或某模块的类组织在同一个包中
- 控制类和接口间的访问关系
- 拥有包访问权的类才能被其他包中都类访问
- 划分类名空间:确保不同包类名和接口名不冲突
packag
关键字:package [包名]- 是源程序文件的第一条有效语句
- 一个源程序文件只能有一条packag语句
package basc;
- 若文件无包,则是存于默认包,无需使用package关键字
- 命名规则:一般l利用公司域名倒置做包名
- 个人项目命名
- 单人项目onem:个人发起,但非自己独立完成的项目
- 格式:onem.发起者名.项目名.模块名…
- 个人项目pers:个人发起,且独立完成
- 格式:pers.个人名.项目名.模块名
- 私有项目priv:个人发起,独立完成,非公开使用的项目,copyright属于个人
- 格式:priv.个人名.项目名.模块名
- 单人项目onem:个人发起,但非自己独立完成的项目
- 团队项目命名
- 团队项目:团队发起,该团队开发,copyright属于该团队
- 格式:team.团队名.项目名.模块名…
- 公司项目:由公司发起,并由公司开发,copyright属于公司
- 格式:公司域名反写.项目名.模块名
- 互联网域名不重复,故常用此方式命名
- 团队项目:团队发起,该团队开发,copyright属于该团队
- 个人项目命名
- 注意规范:
- 包名要求字符均小写,不能含有特殊字符
- 包可有多层,用符号
.
分隔 - 对包编译后,包中类和接口产生字节码文件,目录为:项目空间名\项目名\bin\包名
- 程序中导入包需使用import
- 格式:
import 包名.类名;
import 包名.*;
//导入该包中所有类,但不包括其子包中都类
import java.util.*;
- 格式:
Java Doc
- javadoc命令是用于生成API文档
- 参数信息:
- @author 作者名
- @version 版本号
- @since 指明需要最早使用的jdk版本
- @param 参数名
- @return 返回情况
- @throws 异常抛出情况
- 生成javadoc文件