黑马程序员-----Java基础知识---常量---进制----变量---运算符(算术--赋值--比较--逻辑--位--三元)----if语句---switch语句

时间:2020-12-05 19:59:32

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

 

1常量:
 常量概述
           在程序执行的过程中其值不可以发生改变
 常量的分类:
    字面值常量
    字符串常量  用双引号括起来的内容
                         "hello"  "你好"
   整数常量 所有整数
                          111 123 -128
   小数常量 所有小数
                          3.5 -2.2
   字符常量 用单引号括起来的内容
                         'a' 'b' 'A' '0'
   布尔常量
                         true(真) false(假)
   空常量  null(数组部分讲解)

   自定义常量

2进制: 就是进位制,是人们规定的一种进位方法

进制分为:二进制    八进制      十进制      十六进制

 其他进制转换到十进制:
  规则: 系数 * 基数^权次幂
  
 十进制转换到其他进制:
  规则: 除基取余,除到商为0结束,然后余数倒过来取

 快速的进制转换法(8421):
  1 1  1 1 1 1 1 1
  2^7 2^6 2^5 2^4 2^3 2^2 2^1 2^0
  128 64 32 16 8 4 2 1

原码反码补码:
    把一个二进制数,分成分成符号位,和数值位
   
  原码:
   正数: 符号位0, 其他为数值位
   负数: 符号位1, 其他为数值位
   
  反码:
   正数: 和原码一样
   负数: 符号位1, 数值位按位取反
  
  补码:
   正数: 和原码一样
   负数: 反码+1
   
3变量:   
 变量概述
              在程序执行的过程中,在某个范围内其值可以发生改变的量
 定义变量的格式:
             方式1: 数据类型 变量名 = 初始化值;
             方式2: 数据类型 变量名;
     变量名 = 初始化值;
    
数据类型:
 基本数据类型:
  整数类型:
   byte   1(字节) -128---127
   short  2(字节)  
   int  4(字节)
   long 8(字节)
  浮点类型:
   float 4(字节)
   double  8
  字符类型:
   char  2 0---65535
  布尔类型:
   boolean 1


  Java 各整数类型有固定的表数范围和字段长度,其不受具体操作系统的影响,以保证Java程序的可移植性。
Java语言的整型常量默认为int型,声明long型常量可以后加‘ l ’或‘ L ’ ,如:
       int i1 = 600; //正确     long l1 = 88888888888L; //必须加l否则会出错 

与整数类型类似,Java浮点类型有固定的表数范围和字段长度,不受平台影响。
Java 浮点类型常量有两种表示形式
      十进制数形式,如: 3.14       314.0
科学记数法形式,如 3.14e2 3.14*10^2
Java 浮点型常量默认为 double 型,如要声明一个常量为 float 型,则需在数字后面加 f 或 F ,如:
double d = 12345.6; //正确   float f = 12.3f; //必须加f否则会出错

char 型数据用来表示通常意义上的“字符”
字符常量为用单引号括起来的单个字符,例如:char ch1= 'a'; char ch2='中';
Java 字符采用 Unicode 编码,每个字符占两个字节,因而可用十六进制编码形式表示。注:Unicode是全球语言统一编码

boolean 类型适于逻辑运算,一般用于程序流程控制 。
boolean 类型数据只允许取值 true 或 false ,不可以 0 或非 0 的整数替代 true 和 false ,这点和C语言不同。

 


  注意:
   整数默认使用int类型
   小数默认使用的 double 类型
 
 引用数据类型:
  类 class
  接口 interface
  数组 []

使用变量的注意事项
 1: 作用域
  变量定义在哪一级大括号中,哪个大括号的范围就是这个变量的作用域
  相同的作用域中不能定义两个同名变量
 2: 初始化值
  没有初始化值不能直接使用
 3: 在一行上建议只定义一个变量
  int a,b,c,d,e; 不建议
  int a;//建议
  int b;//建议

数据类型转换

 隐式转换: 小的数据类型 向 大的数据类型转换
  这个转换的操作会默认自己完成,不需要我们处理
  byte,short,char—int—long—float—double
  byte,short,char相互之间不转换,他们参与运算首先转换为int类型

  
 强制转换:大的数据类型 向 小的数据类型转换
  手动完成
  格式:目标类型 变量名=(目标类型)(被转换的数据);
  例如: byte b = 3;
      b = (byte)(b + 3);

 

 一般建议,最好不要随意使用强制类型转换,容易造成数据精度的损失。
 (1)容量大的数据类型转换为容量小的数据类型时,要加上强制转换符,但可能造成精度降低或溢出;使用时要格外注意。
 (2)有多种类型的数据混合运算时,系统首先自动的将所有数据转换成容量最大的那一种数据类型,然后再进行计算。

 Java语言中的字符char可以存储一个中文汉字吗?为什么呢?
 可以。因为Java语言采用的是Unicode编码。
 Unicode编码中的每个字符占用两个字节。所以,Java中的字符可以存储一个中文汉字

字符和字符串参与运算: 
 字符串和其他类型的数据 使用 + 号运算的时候,
 会把字符串与其他类型的数据相连接,返回连接后的新字符串

4:算术运算符:

算术运算符(+、— 、* 、/ 、%,++,--)


 / 和 % 的区别?
  / 除法操作, 结果是商
  % 取余数操作,结果是余数
  
 ++,--运算符:
  ++,--运算符在操作数的前面, 先操作数自增1或者自减1, 然后再参与赋值运算
   例如: a = ++b;
  ++,--运算符在操作数的后面, 先参与赋值运算,然后操作数自增1或者自减1
   例如: a = b++;
 
赋值运算符 := , +=, -=, *=, /=, %=
 1: +=,-=等这样的操作符自带一个强制转换功能
 2: 赋值运算符的左边必须是一个变量
 
比较运算符:(>>=、<、<=、!=,==)
 1: = 与 == 的区别?
 
  = : 赋值运算符, 把右边的结果 赋值给左边变量
  ==:  比较运算符, 判断左右两边的数据是否相等,返回的结果是boolean 类型(true\false)


 

 

逻辑运算符:&,|,^,!,&&,||
 & 逻辑与运算符 : 有false则假
 | 逻辑或运算符 :  有true则真
 ^ 逻辑异或运算符:相同则false,不同则true
 ! 逻辑非运算符:  true变假, false变真
 
 && 和 || 的使用:
  他们的使用的结果与 (& | )的结果相同
  它们具备短路功能(如果左边条件能确定结果,不执行右边的判断)

位运算符:&,|,^,~,<<,>>,>>>
 & 位与运算符: 有0则0
 | 位或运算符: 有1则1
 ^ 位异或运算符:相同则0,不同则1
 ~ 位反码运算符:按位取反(包含符号位)
 << 左移运算符: 空位补0,被移除的高位丢弃
 >> 右移运算符: 被移位的二进制最高位是0,右移后,空缺位补0;
最高位是1,最高位补1。
 >>> 无符号右移运算符:被移位二进制最高位无论是0或者是1,空缺位都用0补。

三元运算符[三目运算符]
 格式:
  (条件表达式)?表达式1:表达式2;
 执行流程:
  如果条件为true,运算后的结果是表达式1;
  如果条件为false,运算后的结果是表达式2;
 注意: 条件表达式最终的运算结果是 boolean 类型 (true,false)

键盘录入: 
 导包(位置放到class定义的上面)
  import java.util.Scanner;
 创建对象(写在main方法的里面)
  Scanner sc = new Scanner(System.in);
 接收数据
  int x = sc.nextInt();

流程控制语句: 指定程序的执行方式
 流程控制语句分类
  顺序结构
  选择结构
   if(重点)
   switch(理解)
  循环结构
   (后面学习)

选择结构if语句: 
 if语句第一种格式:
  if(条件表达式) {
   语句体
  }
 执行流程
  首先判断关系表达式看其结果是true还是false
  如果是true就执行语句体
  如果是false就不执行语句体
 
 if语句第二种格式:
  if(条件表达式) {
      语句体1;
   }else {
      语句体2;
   }
 执行流程
  首先判断关系表达式看其结果是true还是false
  如果是true就执行语句体1
  如果是false就执行语句体2
 
 if语句第三种格式:
  if(关系表达式1) {
      语句体1;
   }else  if (关系表达式2) {
      语句体2;
   }
   …
   else {
      语句体n+1;
   }
 执行流程:
  哪一个关系表达式成立,执行对应的语句体,然后结束if选择结构
  要是所有的关系表达式都不成立,执行最后的else中的语句体
  
 注意事项:
  关系表达式无论简单还是复杂,结果必须是boolean类型
  if语句控制的语句体如果是一条语句,大括号可以省略;如果是多条语句,就不能省略。建议永远不要省略。
  一般来说:有左大括号就没有分号,有分号就没有左大括号

(了解)if语句结构与三目运算符的区别?
 if(3>4){
  SOP(3);
 } else {
  SOP(4);
 }
 向上面这种输出语句的时候,不能用三目运算符改写
 下面的方式可以使用三目运算符改写
 int max;
 if(3<4) {
  max = 4;
 } else {
     max = 3;
 }
 
选择结构switch语句
 switch语句格式:
  switch(表达式) {
   case 值1:
    语句体1;
    break;
      case 值2:
    语句体2;
    break;
      …
      default: 
    语句体n+1;
    break;
  }
 格式解释
  switch表示这是switch语句
  表达式的取值:byte,short,int,char
  JDK5以后可以是枚举
  JDK7以后可以是String
  case后面跟的是要和表达式进行比较的值
  语句体部分可以是一条或多条语句
  break表示中断,结束的意思,可以结束switch语句
  default语句表示所有情况都不匹配的时候,就执行该处的内容,和if语句的else相似。

 执行流程
  首先计算出表达式的值
  其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
  最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。

 注意事项
  case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的
  default可以省略吗?
   可以省略。一般不建议。除非判断的值是固定的。
  break可以省略吗?
   可以省略,一般不建议。否则结果可能不是你想要的
  default的位置一定要在最后吗?
   可以出现在switch语句任意位置。
  switch语句的结束条件
   遇到break
   执行到程序的末尾
 
 if语句使用场景:
  针对结果是boolean类型的判断
  针对一个范围的判断
  针对几个常量值的判断
 switch语句使用场景:
  针对几个常量值的判断