【Java学习笔记(一)】数据类型、变量与常量、数组以及注释

引言:不断更新完善的Java学习笔记,你可以当成字典使用,请善用搜索和查找功能。

目录

  1. 数据类型、变量与常量
  2. 运算符
  3. 流程控制语句
  4. 数组
  5. 注释

1.数据类型、变量与常量

数据类型(由数据的存储方式和运算方式决定)

  • 基本数据类型 Primitive Type
    • 数值型
      • 整数类型:byte(1),short(2),int(4),long(8)
        • 整数值的4种表示方式
          • 二进制:0b(0B)开头
          • 八进制:0:开头
          • 十进制:任意数字开头
          • 十六进制:0x(0X)开头
      • 浮点类型:float(4),double(8)
        • 三个特殊的浮点数值
          • 正无穷大:POSTIVE_INFINITY
          • 负无穷大:NEGATIVE_INFINITY
          • 非数(不与任何数值相等的数字,包括NaN本身):NaN
      • 类型长度不受操作系统影响
      • 数值可以使用下划线分割,以增强可读性(Java7)
    • 字符型:char
      • 采用Unicode编码,每个字符占两个字节
      • 实际上字符型也是一种整数数据,相当于无符号整数类型,范围是’\u0000’~’\uFFFF’,一共用65536种字符,因此可以表示0~65535种无符号整数,前256个(’\u0000’~’\u00FF’)字符和ASCII码中的字符完全重合
      • String,字符串(Java6)
      • char类型使用单引号扩起来,字符串使用双引号扩起来
      • 常用的转义字符
        • \b:退格符
        • \n:换行符
        • \r:回车符
        • \t:制表符
        • \”:双引号
        • \’:单引号
        • \:反斜杠
    • 布尔型:boolean
      • 不可以用0或非0的整数代替
      • true
      • false
    • 基本类型的类型转换
      • 从右往左
        • double←float←long←int←short
    • 当把一个表数范围小的数值或变量直接赋给另一个表数范围大的变量时,系统可以进行自动类型转换;否则就要进行强制转换。
    • 在进行强制类型转换的时候,如果被转换的的数据类型值超出了转换的数据类型表数范围,则会发生数据丢失。语法:(target)value
      • 表示式类型的自动提升
        • 当一个算数表达式中包含多个基本类型的值时,整个算是表达式的数据类型将发生自动提升
        • 自动提升的规则
          • 所有的Byte类型、short类型和char类型将被提升到与表达式中最高等级操作数同样的类型
          • 例如:
            • short sValue=5;
              sValue=sVaule-2;
            • 第一行定义了一个short类型变量,赋初值为5。第二行表达式中2位int类型,则sValue将自动提升到int类型,则第二行右边的表达式类型为int,将一个int类型值符给short类型变量将发生错误
  • 引用类型 Reference Type
    • 接口
    • 数组
  • 直接量
    • 即程序中通过源代码直接给出的值,如 int a=5;5就是一个直接量
    • 直接量的类型
      • 基本类型
        • int类型的直接量:在程序中直接给出的整形数值可以是二进制、十进制、八进制和十六进制
        • long类型的直接量:在整形数值后添加l或L后就成了long类型的直接量
        • float类型的直接量:在一个浮点数后添加f或F就变成了float类型的直接量,这个浮点数可以是标准小数形式,也可以是科学计数形式
        • double类型的直接量:直接给出一个标准小数形式或者科学计数法形式的浮点数就是doule类型的直接量
        • boolean类型的直接量:只有true和false
      • 字符串类型
        • char类型的直接量:单引号扩起来的字符、转义字符和Unicode值表示的字符
        • String类型的直接量:一个用双引号扩起来的字符序列就是String类型的直接量
      • null类型
        • null类型的直接量:这个类型的直接量只有一个值,即null
  • 名字就是标识符
    • 可以由字母、数字、下划线和美元符组成,不可以由数字开头
    • 可以包含Java关键字和保留字
    • 不能包含空格
  • Java是大小写敏感的语言
    • 类名首字母用大写,其余首字母都小写
    • 变量随定义随用

2.运算符

算数运算符

  • +
    • 除了作为算术运算符,还可以作为字符串的连接运算符
    • 还可以作为求负的运算符,即相反数
  • *
  • /
    • 整数/整数,则是整除忽略小数;
    • 如果两个操作数中有一个或者两个是浮点类型的数据,第二个操作数为0或者0.0的话,则结果为正或者负无穷大
  • %
    • 求余运算的结果不一定总是整数,它的计算结果是使用第一个操作数除以第二个操作数,得到一个整除的结果后剩下的值就是余数。如果两个操作数有一个或者两个是浮点类型的数据,第二个操作数是0或者0.0的话,结果为非树NaN
  • ++
    • ++在左边,则是把操作数+1,在放入表达式中运算
    • ++在右边,则先把操作数放入表达式中运算,再把操作数+1
    • 同++
  • 如果要完成乘方、开方等其他更复杂的运算,可以借助于java.lang.Math类的工具完成

赋值运算符

  • =
    • 通过赋值将一个直接量赋值给变量,或者一个变量的值赋给另一个变量,或者一个表达式的值赋给变量
    • 赋值表达式是有值的,其值为=右边的表达式的值。如String str2=str表达式的值就是str。因此复制运算符支持连续赋值,例如a=b=c=7
  • 扩展后的赋值运算符
    • 赋值运算符可与算术运算符、位移运算符结合,扩展成功能更加强大的运算符
    • 例如 +=、-=、*=和/=等

比较运算符

  • >
  • >=
  • <
  • <=
  • ==
    • 如果用来比较两个引用类型,那么只有当两个引用变量的类型就有父子关系时才可以进行比较,而且必须指向同一个对象才能返回true
  • !=

逻辑运算符

  • &
  • |
  • 短路逻辑运算符
    • && 第一个操作为假则不判断第二个操作数
    • || 第一个操作数为真则不判断第二个操作数
  • !
  • ^ 异或

位运算符

  • &:按位与
  • |:按位或
  • ~:按位非,单目运算符
  • ^:按位异或,两位相同时返回0,不同时返回1
  • <<:左移运算符,最高位空出来的以原来的符号位补充
  • >>:右移运算符
  • >>>:a>>>b 将二进制形式的a逐位右移b位,最高位空出的b位补0

三目运算符

  • ?:
    • (expression)?if-ture-statement:if-flase-statement
    • 先对expression进行判读true or false,然后再执行后面对应的操作数的值
    • 三目运算符是作为if else的精简写法。区别在于if代码块可以多个语句,但是三目运算符不支持

运算符的顺序

  • 可以查询网络或者JDK文档,不要过于依赖运算符的顺序来控制表达式的执行顺序,可读性太差,尽量使用括号(),如过表达式过于复杂可以分步执行

3.流程控制语句

三种基本流程

  • 顺序
  • 分支
    • 分支语句
      • if
        • if(logic expression)
          {
          }
        • if(logic expression)
          {
          }
          else
          {
          }
        • if(logic expression)
          {
          }
          else if(logic expression)
          {
          }
          ...
          else
          {
          }

          • 如果只有一个语句时可以省略花括号{},但是不建议,不利于可读性
          • 优先处理包含范围更小的情况
      • switch
        • switch(expression)
          {
          case conditional1:
          {
          statement(s);
          break;
          }
          case conditional2:
          {
          statement(s);
          break;
          }
          case conditionalN:
          {
          statement(s);
          }
          default:
          {
          statement(s)
          }
          }
        • 对expression求值,然后依次匹配conditionN等值,遇到匹配的值即执行对应的执行体;如果没有匹配的值,则执行default对应的代码块
        • expression的值可以是byte、shor、char、int以及String(Java7之后)
  • 循环
    • 循环语句
      • for
        • for([init_statement];[test_expression]; [iteration_statement])
          {
          statement;
          }
      • while
        • while(test_expression)
          {
          statement;
          }
      • do/while
        • do
          {
          statement;
          }while(test_expression);
    • 嵌套循环
      • 把一个循环放在另一个循环体内,那么就可以形成嵌套循环
    • 控制循环结构
      • break
        • 跳出当前的循环体
      • continue
        • 停止当次循环,进行当前循环体的下一次循环
      • return
        • 用于结束一个方法,如果位于循环体内,则可以结束整个循环——不论当前循环体之上还有多少个循环体

最简单的语句

  • 方法调用语句
  • 赋值语句

表达式语句是不合法的,如:x+y;

特殊控制语句

  • break
  • continue

4.数组

数组的定义与使用

  • 声明方式
    • 类型[] 数组名
    • 类型 数组名[]
      • 可读性差,不建议使用
    • 要对数组分配空间才能使用
      • 静态初始化
        • int[] a = new int[]{3,9,8};
      • 动态初始化
        • int[] a = new int[5];
  • 数组是引用类型,数组一经分配空间,每个元素会隐式初始化
  • 声明后,长度固定,有一个属性length指明它的长度
  • 有一个增强的for语句用于只读式遍历数组
    • for(type variableName:array | collection)
      {
      //variableName自动迭代遍历数组array的元素
      }

多维数组

  • 它是数组的数组,和C不太一样,从数组低层的运行机制来看,Java实际上是没有多维数组的
  • 语法:type[][] arrName

Java8增强的工具类:Arrays

  • Java提供的Arrays类里包含了一些static修饰的方法可以直接操作数组,可以通过类名.方法名()调用
  • 常用的方法,具体用法以及其他Java8中增强的工具方法可以查询网络或者API文档,,位于java.tuil包下
    • int binarySearch(type[] a,type key)
    • Int binarySearch(typep[ a,int fromIndex,int toIndex,type key0
    • type[] copyOf(typep[] original,int length)
    • type[] copyOfRange(type[] original ,int from,int to)
    • boolean equlas(type[]a,type[] a2)
    • void fill(type[] a,type val)
    • void fille(type[] a,int fromIndex,int toIndex,type val)
    • void sort(type[] a)
    • void sort(type[] a,int fromIndex,int toIndex)
    • String toString(type[] a)
  • System类中也包含了一个static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length)方法,该方法可以将src数组里的元素赋给dest数组的元素,其中srcPos指定从src数组的第几个元素开始赋值,length参数指定将src数组的多少个元素赋给dest数组的元素

5.注释

为什么要添加程序注释?

  • 永远不要相信自己的理解力
  • 可读性第一,效率第二
  • 代码即文档

Java的注释类型

  • 单行注释
    • //
  • 多行注释
    • /……/
  • 文档注释
    • Java提供的一种功能强大的注释形式,在编写Java源代码时添加了合适的文档注释,然后通过JDK提供的javadoc工具可以直接将源代码里的文档注释提取成一份系统的API文档
    • Javadoc工具默认处理以public或protected修饰的类、接口、方法、成员变量、构造器和内部类之前的文档注释
    • /**……*/
    • 常用的Javadoc标记
      • @author
        • 指定Java程序的作者
          • 使用命令时需要增加-author选项
      • @version
        • 指定源文件的版本
          • 使用命令时需要增加-version选项
      • @deprecated
        • 不推荐使用的方法
      • @param
        • 方法的参数说明信息
      • @return
        • 方法的返回值说明信息
      • @see
        • “参见”,用于指定交叉参考的内容
      • @exception
        • 抛出异常的类型
      • @throws
        • 抛出的异常,和@exception同义

By:海洋飘飘

人已赞赏
Java编程语言

Sharding-JDBC踩坑记

2019-12-27 22:18:38

Java编程语言

【Java学习笔记(二)】类与对象&面向对象的三大特点

2020-2-21 18:14:58

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索