# zb_java0718 **Repository Path**: climpeaker/zb_java0718 ## Basic Information - **Project Name**: zb_java0718 - **Description**: 数据类型与运算符 - **Primary Language**: Java - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 5 - **Forks**: 7 - **Created**: 2018-07-18 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # zb_java0718 # 教学目标 1.HelloWorld解析 2.数据类型与运算符 # 课堂笔记 ## HelloWorld程序解析 ### 1、HelloWorld语法知识 java语言是大小写敏感语言; JAVA语言的一条语句以分号;结束,一条语句可以分多行书写; 一个java文件至多只能有一个public类型的类; 如果一个Java文件中有public类,则该文件名必须和该类名保持一致; main方法是固定写法;main方法是jvm执行该类的程序入口; 也就是一个java文件是从main方法开始执行的; java文件只执行main方法,其他的方法如果想被执行,需要在main方法进行方法调用(后续内容); 一个public的类中至多有一个main方法; 一个java文件中可以写多个class类;但是只能有一个public类; 编程规范要求:一个java文件只写一个类; #### 代码[com.yuw.hello.HelloWorld] ```java public class HelloWorld { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("HelloWorld!"); } } ``` ## HelloWorld程序解析 ### 0、补充内容 计算机基础 计算机中只有0/1二进制; 一个0或一个1称作1bit;叫做1位代表一个0或一个1; 8bit叫做1byte;叫做1字节;一个字节中有8位0或1; 从byte开始进制就是1024(2的10次方) 1024byte = 1kb 1024kb = 1mb 1024mb = 1gb 1024gb = 1tb 1024tb = 1pb 1024pb = 1eb ### 1、变量 可以变化的量就是变量; 变量的声明: 语法: 数据类型 变量名; 变量的初始化: 语法: 变量名 = 初始值; 声明和初始化可以合并: 语法: 数据类型 变量名 = 初始值; 解析: 当前的变量主要指局部变量; 布局变量在一个方法不能重复声明;但是可以重复引用使用; ### 2、数据类型 java数据类型分为: 对象类型(引用类型):Object子类、数组 基本类型:8种 2.1 8种基本类型的字节长度和范围大写 整型:不带小数; byte 1字节 short 2字节 int 4字节(默认类型) long 8byte(使用后缀L或l表示long类型的数值常量) 浮点型:带小数; float 4byte(使用后缀F或f表示float类型的数值常量) double 8byte(默认类型) 字符型: char 2byte 字符型表示一个字符,使用但引号''引出,单引号中只能有一个字符,可以是英文、中文、Unicode编码都可以; 布尔类型: boolean 取值为true或false 注意: (1)整型的数值常量默认类型为int类型;浮点型的数值常量默认类型为double类型; (2)long类型的数值常量,可以使用后缀L或l表示long类型的数值常量; double类型数值常量,使用后缀F或f表示float类型的数值常量 代码[com.yuw.datatype.Test01]: ``` java // 数据类型的使用 // 变量声明和初始化 int iAge = 20; // 声明 int iAge2; iAge2 = 20; iAge2 = 21; // 声明byte类型 byte bAge = 20; // 声明long类型 long lAge = 2000000000000L; // 整型的数值常量默认类型为int // 字符型 char ch0 = 'a'; // 英文 char ch1 = '小'; // 中文 char ch3 = '1'; // 数字 char ch2 = '\uAF45'; // Unicode编码的形式表示一个字符 System.out.println("小明年龄为:"+iAge2); ``` 2.2 8种基本数据类型之间的相互转换 数据类型的转换有两种方式: 默认转换; 强制转换; 数据类型的默认转换: 数据类型从低级(范围小)默认向高级(范围大)的进行自动转换; byte-->short-->int-->long-->float-->double; char-->int-->long-->float-->double float-->double 类型之间的转换关系: 字符类型-->整型--->浮点型 注意: 在给byte、short、char进行赋值时,如果所给的数值常量没有超出该类型的表示范围,则可以直接进行赋值。 超出范围则不可以直接进行赋值,需要进行强制类型转换处理; 例如: byte bVal0 = 127; byte bVal1 = 128;// 因为128超出了byte的表示范围,所有不能直接使用数值常量进行赋值 代码[com.yuw.datatype.Test01]: ```java ////////////////// 基本类型之间的///////////////////////// // 整型之间从高到低的默认转换 byte bVal0 = 127; //byte bVal1 = 128;// 因为128超出了byte的表示范围,所有不能直接使用数值常量进行赋值 short sVal0 = bVal0; int iVal0 = sVal0; // short默认转换为long long lVal0 = sVal0; // 浮点型之间默认转换 float fVal0 = 3.14F; double dVal0 = fVal0; // char类型默认转换整型 char chVal0 = 'a'; // char类型可以默认转换整型的 int long // short sVal1 = chVal0; int iVal1 = chVal0; ``` 表达式中的数据类型之间的默认转换: 如果一个表达式中有多种数据类型,表达式中所有的数据类型默认向最高数据类型进行默认转换; 则该表达式的最终的数据类型取决于表达式中最高的数据类型; 也就是,表达式结果的数据类型就是最高数据类型; 注意: 如果表达式中含由byte、char、short类型组成的表达式的结果类型是int类型; 代码[com.yuw.datatype.Test01]: ```java ///////////////表达式中的数据类型之间的默认转换/////////////////// byte bVal20 = 20; char chVal20 = 'a'; short sVal20 = 31; int iVal20 = 21; // byte、char、short类型的表达式的结果是int类型; int chVal30 = bVal20+chVal20+sVal20; int iVal31 = sVal20 + iVal20; ``` 数据类型的强制转换: 强制转换一般是从高级(范围大)向低级(范围小)进行数据转换; 强制类型转换可能会引起溢出(数据丢失); 语法: 目标类型 变量名 = (目标类型)被转化类型的变量; 注意: 目标类型还是java数据类型; ()是强制转换的运算符; 代码[com.yuw.datatype.Test01]: ```java /////////////// 表达式中的数据类型之间的强制转换/////////////////// int iVal30 = 20000000; // 将int类型强制转换为 short类型 short sVal30 = (short) iVal30;// 会产生溢出 System.out.println("强制转换:" + sVal30); int iVal41 = (int) (iVal30 * 1.2); // double 类型 ``` ### 3、运算符 运算符根据参与运算的操作数可以分为:一元运算符、二元运算符、三元运算符 #### 3.1 算术运算符 运算符:+ - * / % ++ -- / 除法运算,注意:整数除法的结果还是整数,如果结果中含有小数部分,则将小数部分舍弃; % 求余运算,两个数相除的余数作为结果; + - * / % 都是二元运算符; ++、--运算:是一元运算符; 自增、自减运算,在当前变量值的基础之上进行自动+1或-1操作; 语法: 变量++; 变量--; ++变量; --变量; 自增自减的表达式可以单独进行运算; 解析: 在自增、自减运算中有两种值: 表达式的值; ( 自增自减表达式运算之后的值) 变量自身的值; (自增自减表达式运算之后,在表达式中的变量自己的值) 运算规律: 自增运算: 表达式值 变量i的值 先增运算(++i) i+1 i+1 后增运算(i++) i i+1 自减运算: 表达式值 变量i的值 先增运算(--i) i-1 i-1 后增运算(i--) i i-1 总结: 无论是先增还是后增变量自身的值永远是+1; 表达式的值,先增+1,后增不变; 代码[com.yuw.datatype.Test02]: ```java /** * 算术运算符 */ private static void test01() { // 除法运算 int iVal0 = 10; int iVal1 = 3; int iVal2 = iVal0/iVal1; System.out.println("iVal2="+iVal2);// 结果为整数,舍弃小数部分 double iVal3 = iVal0/3.0; // 3.0默认类型是double类型 System.out.println("iVal3="+iVal3); // 求余运算 int iVal10 = 0 % 2;// 余数为0 System.out.println("0%2=" + iVal10); // 先增表达式运算 System.out.println("========================="); int iVal21 = 1; System.out.println("先增运算之前:iVal21="+iVal21); int iVal31 = ++iVal21; // 先增运算 System.out.println("先增运算之后:iVal21 = "+iVal21); System.out.println("先增运算之后:iVal31="+iVal31); System.out.println("========================="); // 自增自减运算 int iVal20 = 1; System.out.println("后增运算之前:iVal20="+iVal20); // 自增表达式 int iVal30 = iVal20++; // 后增运算表达式 System.out.println("后增运算之后:iVal20 = "+iVal20); System.out.println("后增运算之后:iVal30="+iVal30); } ``` #### 3.2 关系运算符【比较运算】 两个操作数之间的对比关系。是两元运算符。 主要的操作符:> < >= <= == != 关系运算符运算结果是boolean类型; 代码[com.yuw.datatype.Test02]: ```java /** * 关系运算符 */ private static void test02() { int iVal1 = 10; int iVal2 = 11; boolean isResult0 = ++iVal1 > iVal2++; // false System.out.println("运算结果:"+isResult0); } ``` #### 3.3 赋值运算符 将一个表达式或数值常量的值赋值给指定变量;两元运算符; 运算符: = += -= *= /= %= +=运算符: i+=j; 等价于:i=i+j; i%=j; 等价于:i=i%j; 注意: += -= *= /= %=不能和变量声明一起使用;例如: int i+=j; 代码[com.yuw.datatype.Test02]: ```java /** * 赋值运算符 */ private static void test03() { int iVal0 = 10; int iVal1 = 0; iVal1 += iVal0; // += 和 + 区别 byte bVal0 = 1; // += bVal0 += 1; // 1表示的是位移增量单位 // 等价于 bVal0 = (byte) (bVal0 + 1); } ``` #### 3.4 位运算符 是对二进制的数的每一位进行运算;(参与运算的数是二进制中的位bit) 运算符: ~ & | ^ >> << >>> 语法: ~:取反运算,一元运算符; 0变1,1变0; &:与运算,二元运算符 1&1=1 1&0=0 0&1=0 0&0=0 都为1时为1,其他请为0 |:或运算,二元运算符 1|1=1 1|0=1 0|1=1 0|0=0 都为0时为0,其他情况为1; ^:异或运算,二元运算符 1^1=0 1^0=1 0^1=1 0^0=0 相同为0,不同为1; 代码[com.yuw.datatype.Test02]: ```java /** * 位运算符 */ private static void test04() { int iVal10 = 3; int iVal11 = 4; ////以下代码不做掌握要求//// // 按位取反 int iVal20 = ~iVal10; // 4 -4 0000 0011(补码) --- 1111 1100(补码)---1000 0100(原码) // 与、或、异或 int iVal21 = iVal10 & iVal11; // 0 0011 0100 0000 int iVal22 = iVal10 | iVal11; // 7 0111 int iVal23 = iVal10 ^ iVal11; // 7 0111 System.out.println("iVal20=" + iVal20); System.out.println("iVal21=" + iVal21); System.out.println("iVal22=" + iVal22); System.out.println("iVal23=" + iVal23); } ``` ###### 位运算知识补充 计算机基础:原码、反码、补码;(后面补充讲解) 原则:计算机中所有的数都是以补码的形式存储;【计算机中负数是以补码的形式存储】 #### 参与贡献 1. Fork 本项目 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 码云特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目 5. 码云官方提供的使用手册 [http://git.mydoc.io/](http://git.mydoc.io/) 6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)