Java基础02—数据类型、运算符、流程控制和数组

本文是学习Java时所记录的学习笔记,本节包含了Java数据类型、基本运算、流程控制和数组的使用,是从《疯狂Java讲义第四版》中学习,提取了部分我觉得是重点的内容。欢迎留言、私信交流~~

文章目录

      • 数据类型和运算符
        • 数据处理常用的语法
          • 注释
          • 提取开发程序的注释生成API文档:
          • 标识符和关键字
          • 数据类型
            • 数据类型原则
          • 基本运算语句
        • 数据处理概念
      • 流程控制
        • 顺序结构
        • 分支结构
        • 循环结构
          • 控制循环结构
      • 数组
        • 数组概念
        • 定义数组
        • 内存中的数组
      • 相关知识
        • 当初学习时懵逼的问题
        • 参考资料

数据类型和运算符

Java是一门强类型语言。强类型包含两方面的含义:

  • 所有变量必须先声明、后使用
  • 指定类型的变量只能接受类型与之匹配的值

数据处理常用的语法

注释

Java语言的注释一共有三种:

  • 单行注释:在需要注释的内容前面加上//
  • 多行注释:以/*开始,到*/结尾,中间内容就是注释
  • 文档注释:以斜线后紧跟两个星号/**开始,到*/结尾,中间内容就是文档注释

API文档下载

  1. 访问 http://www.oracle.com/technetwork/java/javase/downloads/index.html
  2. 找到“Additional Resources”,在里面下载。
提取开发程序的注释生成API文档:
  1. 新建xxxTest.java类(xxx为自定义名字),增加文档注释
  2. 在xxxTest.java类所在的文件目录下,执行cmd命令:
//这一条只会提取文档注释
javadoc -d apidoc -windowstilte 测试 -doctitle 学习javadoc工具的测试API文档 -header 我的类 *Test.java
//使用-version和-author后,会提取“@”的注解
javadoc -d apidoc -windowstilte 测试 -doctitle 学习javadoc工具的测试API文档 -header 我的类 -version -author *Test.java
//指定对lee包和yeeku包生成API文档(包里面可以有package.html包描述文件)
javadoc -d apidoc -windowstilte 测试 -doctitle 学习API文档 -header 我的类 lee yeeku
  1. 此时java文件所在目录下,会新生成一个apidoc文件夹,文件夹里的内容就是生成的API文档。
javadoc常用标记 说明
@author 指定Java程序的作者
@version 指定源文件的版本
@deprecated 不推荐使用的方法
@param 方法的参数说明信息
@return 方法的返回值说明信息
@see “参见”,用于交叉参考的内容
@exception 抛出异常的类型
@throws 抛出的异常,和exception相同

注意:标记使用的位置有限制

标识符和关键字
名称 说明
分号 语句结尾采用分号“;”。
花括号 作用是定义一个代码块“{}”,成对出现。
方括号 主要作用是访问数组元素“[]”。
圆括号 定义方法、调用方法时会用到,用途很多“()”。
空格 分隔一条语句的不同部分。
圆点 通常作为类/对象和他的成员之间的分隔符“.”。
  • Java语言区分大小写。
  • Java一共50个关键字。
数据类型

Java语言支持的变量类型有两种

  • 基本类型(Primitive Type)
  • 引用类型(Reference Type)

基本类型包括

  • boolean类型
  • 数值类型
    • 整数类型(byte、short、int、long、char)
    • 浮点类型(float和double)

引用类型包括:

  • 接口
  • 数组类型
  • 特殊的null类型(空类型(null type):特殊直接量。可以转换为任何引用类型。)

基础数据类型

基础数据类型 说明
整数类型 byte(1个字节)/short(2个字节)/int(4个字节)/long(8个字节)
字符类型 char(2个字节)
浮点类型 float(4个字节)/double(8个字节)
布尔类型 boolean
数据类型原则
  • 二进制转换为十进制:补码-反补-原码
  • 字符型必须使用单引号“’”括起来。
  • char是单引号,单字符。String是字符串双引号,字符串。
  • 如字符串中包含特殊字符,应使用转义字符的表示形式,比如“\”写成“\”。
  • double类型数值占8字节64位
  • float类型数值占4字节32位
  • 浮点数除以0可以得到正无穷大或负无穷大。
  • 除以0异常:ArithmeticException:/by zero
  • JAVA7中引入了新功能:可以在数值中使用下划线。
  • boolean类型数值只有两个:true和false
  • 数值类型转换方式有两种:
    • 自动类型转换
    • 强制类型转换:(targetType)value
  • 二进制最左边的1位是符号位,1就是负数,0就是正数。
  • ASCII(American Standard Code for Information Interchange,美国信息互换标准代码,ASCⅡ)
基本运算语句
算数运算符 说明
+ 加法运算符也可作为字符串的连接运算符。
- 减法运算符也可可作为求负运算符。
* 乘法运算符。
/ 除法运算符。
% 求余运算符。
++ 自加1。放在左边表示先参与运算再自加1,放在右边表示先自加1再参与运算。
自减1。和自加效果相似。
其他复杂运算符例如乘方、开方等运算 可以借助java.lang.Math类的工具方法完成。
赋值运算符 说明
= 将一个直接量值赋给变量。
位运算符 说明
& 按位与。同时为1返回1。
| 按位或。一位是1返回1。
~ 按位非。全不取反(包括符号位)。
^ 按位异或。相同返回0,不同返回1。
<< 左移运算符。例如5<<2表示5的二进制左移两位,右边用0填充。
>> 右移运算符。右移制定位数,多出的部分用符号位填充。和左移运算符相似。
>>> 无符号右移运算符。和右移运算符相似,只不过多出的部分用0填充。
逻辑运算符 说明
&& 与。前后两个操作数必须都是true才返回true,否则是false。
& 不短路与。
|| 或。只要有一个是true,就可以返回true。
| 不短路或。
非。取相反。
^ 异或。两个不相同才返回true,相同返回false。
三目运算符 说明 示例
?: 先执行expression求值,如果为true,则返回“:”前面部分。如果为false,则返回“:”后面部分。三目运算符是作为if else的精简写法 (expression)?if-true-statement:if-false-statement;

数据处理概念

  • 表达式类型自动提升
    • 一个表达式中包含多个基本类型值时,会自动提升到表达式中最高等级的类型。等级高低如下:
      char>int>long>float>double
      byte>short>int>long>float>double
      
  • 强制转换类型
    • 从高等级转向低等级时需要使用强制类型转换。可以直接加(int),或者通过基本类型对应的包装类转换字符串parseXxx(String str)。
  • 移位运算遵循规则
    • 低于int类型的自动转换为int类型/int类型移位数大于32时,先与32求余,结果才是真正移位的位数/long类型和int类型相似,大于64时。
  • 单目运算符、赋值运算符和三目运算符是从右到左运算。
  • 运算符优先级可以参考“运算符优先级表”,上一行优先于下一行
    Java基础02—数据类型、运算符、流程控制和数组_第1张图片

流程控制

两种基本的流程控制结构:分支结构和循环结构。

顺序结构

从上往下逐行执行。

分支结构

两种常见语句分别为“if”语句和“switch”语句

  • if语句

    • 如果if、else if和else后面代码块只有一行语句时,可以省略花括号。
    • 如果if括号中的表达式为真,则执行if下方的代码块
    if(logic expression){
    	statement...
    }
    
  • if…else语句

    • 如果if括号中的表达式为真,则执行if下方的代码块,否则执行else下方的代码块
    if(logic expression){
    	statement...
    }else{
    	statement...
    }
    
  • if…else if…else语句

    • 如果第一个if括号中的表达式为真,则执行第一个if下方的代码块。如果为假则执行第一个else后面的if语句。这时相当于进入了一个新的if判断逻辑
    if(logic expression){
    	statement...
    }else if(logic expression){
    	statement...
    }else{
    	statement...
    }
    
  • switch语句

    • case后面的花括号可以省略。
    • 必须要有break;,否则后面的语句会不进行判断,强制执行。
    • JAVA7,控制表达式只能是java.lang.String类型,不能是StringBuffer或StringBuilder。
    • 先对expression求值,然后匹配conditon,匹配的话执行对应代码块,不匹配则执行default的代码块。
    switch(expression)
    {
    	case condition1:
    	{
    		statement(s)
    		break;
    	}
    	case condition2:
    	{
    		statement(s)
    		break;
    	}
    	default:
    	{
    		statement(s)
    	}
    }
    

循环结构

循环语句包含初始化语句、循环条件、循环体和迭代语句。

  • while
    • 先判断条件,为真时执行循环体。为假则退出循环。
    • 先对test_expression条件求值,如果为true,则运行循环体部分。
    while(test_expression)
    {
    	//具体业务代码
    }
    
  • do while
    • 先执行循环体,执行后判断条件,为真重复执行,为假退出循环。
    • do while的循环条件处必须有分号,这是和while不同的地方。
    do
    {
    	statement;
    	[iteration_statement]
    }while (test_statement);
    
  • for
    • 先执行初始化语句,再判断循环条件,若为真执行循环体,若为假结束本次循环。若为真则在执行完循环体后执行循环迭代语句,接着开始循环。
    • 循环迭代语句会执行一遍,并不会因为循环体中有结束本次次循环的命令而不执行。
    • 建议不要在循环体内修改循环变量的值,容易造成死循环。
    • 选择循环变量时,习惯选择i、j、k来做循环变量。
    • [init_statement]代表初始化一个变量,[test_expression]代表表达式,如果这个表达式为真,则继续循环,如果为假则退出循环,[iteration_statement]代表初始化的变量每次循环后进行自增或自减操作
    for([init_statement];[test_expression];[iteration_statement])
    {
    	statement;
    }
    
  • foreach循环
    • foreach中的循环变量相当于一个临时变量。
    • 循环遍历数组和集合。type是数组元素或集合元素的类型,variableName是一个形参名,foreach循环自动将数组元素一次赋给该变量。
    for(type variableName : array | colection)
    {
    	//variableName自动迭代访问每个元素...
    }
    
控制循环结构
关键字 说明 详细说明
break 终止所在的循环,跳出循环体。 可以增加标签来指定结束到某个外层标签。例如:在最外层循环之前添加“outer:”,然后在内循环中添加“break outer;”,就表示跳出最外层循环。
continue 结束本单次循环后面部分的语句,接着下一次循环。 和break一样,可以增加标签,如果增加在最外层循环的开始处,则表示结束外层循环的本次循环。
return 结束方法

数组

数组概念

  • 所有的数组元素都需要具有相同的数据类型。
  • 通常使用type[] arrayName;这种语法来定义数组。
  • 定义数组时不能指定数组的长度。
  • 数组的初始化有两种方式:
    • 静态初始化
    • 动态初始化
  • 数组索引是从0开始的。
  • 数组初始化内容:
    • 整数类型(byte、short、int和long):0
    • 浮点类型(float、double):0.0
    • 字符类型(char):’\u0000’
    • 布尔类型(boolean):false
    • 应用类型(类、接口和数组):null

定义数组

定义数组类型

定义数组
type[] arrayName;
type arrayName[];
arrayName = new type[length];

二维数组

type[][] arrayName; //定义二维数组
arrayName = new type[length][]; //初始化
//静态初始化二维数组
String[][] str1 = new String[][]{new String[3],new String[]{"hello"}};
String[][] str2 = {new String[3],new String[]{"hello"}};

内存中的数组

  • 实际的数组对象被存储在堆内存中。

  • 数组应用变量如果是局部变量,那么它被存储在栈内存中。

    • 堆内存:程序中创建一个对象时,会把对象保存到运行时数据区中,这个运行时数据区就是堆内存。该区的对象不会随着方法结束而销毁。
    • 栈内存:随着方法结束被销毁。
  • 数组运行机制

    • 数组分为两个部分,一个部分是数组引用,存储在内存中。还有一部分是实际的数组对象,这部分存储在堆内存中,只能通过数组引用变量来访问。
  • 引用类型数组,引用类型的数组元素是引用。数组引用相当于是指针。

  • 二维数组

    • 二维数组的第一个括号中是引用类型,指向第二个括号中的存储空间。如果需要三维或更多维,则可以定义Object[]类型,便可以实现N维数组。
    String[][]
    
  • 二维数组初始化

    • 因为二维数组的第二维是一维数组,所以需要指定多个一维数组来初始化。
    int[][] a;
    a = new int[4][];
    a[0] = new int[2];
    a[0][1] = 6;
    

相关知识

当初学习时懵逼的问题

  • p44 从哪里获得标记信息?
    • 答:常用的javadoc标记信息可以从官方文档中获取。
  • p50 较小整数值赋给byte或short变量,系统会自动把这个整数当成byte或者short类型来处理。
    • 答:这就是自动类型转换的概念,整数、byte和short是相似的,只是长短不一样,所以他们之间可以互相转换,短一点的可以转换到长一点的,并且不会丢失内容。

参考资料

  • 《疯狂Java讲义(第4版)》 李刚 第三章、第四章

你可能感兴趣的:(Java基础)