前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java 语言基础 (初识Java语言, 变量和数据类型, 运算符, 流程控制语句, 数组)

Java 语言基础 (初识Java语言, 变量和数据类型, 运算符, 流程控制语句, 数组)

作者头像
RendaZhang
发布2020-09-08 15:05:22
4230
发布2020-09-08 15:05:22
举报
文章被收录于专栏:RendaRenda
开篇
达成入门级软件开发工程师
  • 语言基础: 比较杂, 记忆为主
  • 面向对象编程: 是核心, 理解为主
  • 核心类库: 内容多, 实用练习为主
初始 Java 语言
Java SE -- Java Platform, Standard Edition 是 Java 平台的基础
  • Java SE 以前称为 J2SE, 可以编写桌面应用和基于 web 的应用程序
  • JDK > JRE > JVM
  • Javac.exe -- 编译器, 主要用于将高级 Java 源代码翻译成字节码文件
  • Java.exe -- 解释器, 主要用于启动 JVM 对字节码文件进行解释并执行
  • 不同的操作系统提供了 JVM 规范的实现, 达成跨平台的目的
  • JVM 解释 Java 字节码文件为具体平台能够执行的机器指令
Java EE -- Java Platform, Enterprise Edition
  • J2EE 是 1999 年到 2003 年 Java EE 的抽象规范的版本名称
  • Java EE 构建在 Java SE 基础之上, 用于构建企业级应用
  • Java EE 是一个抽象的规范, 具体实现称为应用服务器
  • EJB 遵循 Java EE 的规范, 所以 EJB 属于 Java EE
Java ME -- Java Platform, Micro Edition 已经被 Android 平台淘汰了
Java 语言的注释
  • // 单行注释
  • /* 多行注释 */
  • /** 多行或文档注释, 支持提取的注释 */
变量和数据类型
变量
  • Java 是强类型语言, 变量在使用前必须声明来指明其数据类型
  • 变量在使用之前必须初始化
  • 变量不能重复声明
  • 尽量随用随声明, 尽量减少重复的代码
标识符命名
  • 由数字, 字母, 下划线以及$等等组成, 不能数字开头
  • 不能使用 Java 语言的关键字
  • 区分大小写, 长度没有限制但不宜过长
  • 支持中文, 但不推荐使用
  • 标识符可以给 类/变量/属性/方法/包 起名字
数据类型
  • 基本类型: byte, short, int, long, float, double, boolean, char
  • 引用类型: 数组, 类, 接口, 枚举, 标注
进制转换
  • 负十进制转换为二进制: 1.十进制绝对值转化为二进制; 2.按位取反; 3.再加一
  • 负二进制转换为十进制: 1.先减一; 2.按位取反; 3.转为十进制并加负号
单个字节
  • 非负数所能表示的整数范围: 0000 0000 ~ 0111 1111 => 0 ~ 127
  • 负数所能表示的整数范围: 1000 0000 ~ 1111 1111 => -128 ~ -1
  • 单个字节表示的整数范围: -128 ~ 127
整数类型
  • byte, short, int, long, 默认int 类型
  • byte 类型在内存占 1 个字节, 表示范围 -2^7 ~ 2^7-1
  • short 类型在内存占 2 个字节, 表示范围 -2^15 ~ 2^15-1
  • int 类型在内存占 4 个字节, 表示范围 -2^31 ~ 2^31-1
  • long 类型在内存占 8 个字节, 表示范围 -2^63 ~ 2^63-1
  • 需要表达比 int 更大的量, 在直接量后面加上 lL
浮点类型
  • float, double, 默认 double
  • float 类型在内存占 4 个字节, 单精度浮点数, 可以表示 7 位有效数字
  • double 类型在内存占 8 个字节, 双精度浮点数, 可以表示 15 位有效数字
  • 需要表达比 double 精度小的量, 在直接量后面加上 f 或者 F
  • 浮点类型基本运算可能会有误差, 若需要精确计算, 使用 java.math.BigDecimal
布尔类型
  • boolean, 只有 truefalse, 赋别的值会报错
  • 布尔类型在内存空间所占大小没有明确规定, 可以认为是一个字节
字符类型
  • 描述单个字符的数据类型 char, 如: 'a', '人'
  • 占 2 个字节并且没有符号位, 表示范围 0 ~ 65535
  • 开发中更多的使用由多个字符串起来的字符串, 使用 String 类型加以描述
    • 需要掌握的 ASCII: '\n'-10 SPACE-32 '0'-48 'A'-65 'a'-97
  • Java 字符类型采用 Unicode 字符集编码, 为定长字符集, 所有字符都是 16 位
    • 需要掌握的转义字符: {'\0', '\t', '\n', '\r', '\"', '\'', '\\'}
基本数据类型之间的转换
  • 自动类型转换
    • 从小到大类型的转换byte->short,char->int->long->float->double
  • 强制类型转换
    • 从大到小类型的转换target_type variable_name = (target_type) source_varable_name
运算符
算术运算符
  • + - * / %
    • 若希望保留小数部分
    • 使用强制类型转换将其中一个操作数转换为 double
    • 使用1.0乘以其中一个操作数
  • 异常
代码语言:javascript
复制
  5/0 -> 算数异常;

  5/0.0 -> Infinity;

  0/0.0 -> NaN, Not a Number;
字符串连接符
  • 只要 + 两边的操作数有一个是字符串类型, 则该 + 变为字符串连接符
代码语言:javascript
复制
a=1, b=1, c=1;
a+b+c->3;
a+b+c+""->3;
a+b+""+c->21;
a+""+b+c->111;
""+a+b+c->111;
""+(a+b+c)->3;
关系/比较运算符
  • > < >= <= == !=
    • 推荐格式: 常量 == 变量
自增减运算符
  • ++ --
    • 只能用于变量, 常数不可以
  • a++: 先让 a 的数值作为整个表达式的最终结果, 然后让 a 自增
  • ++a: 先让 a 自增, 然后让 a 的新值作为整个表达式的最终结果
  • a++ + ++a; -> x+y where x=a, y=a+1+1 -> 2a+2
逻辑运算符
  • && || !
  • 短路特性: 前面的不成立, 后面的判断会跳过执行
代码语言:javascript
复制
(false) && (++a == 5); -> (++a == 5) will not be executed
(true)  || (++b == 5); -> (++b == 5) will not be executed
条件/三目运算符
  • variable = Expression1 ? Expression2 : Expression3;
赋值运算符
  • = += -= *= /=
    • a=b=1 -> b=1, a=b; a+=3 -> a=a+3; a-=3 -> a=a-3;
  • 复合赋值运算符与简单赋值运算符有区别
代码语言:javascript
复制
byte b = 1;
b = b + 3         -> error: incompatible type;
b = b + (byte)3   -> 报错, 编译器优化导致最终还是 int;
b = (byte)(b + 3) -> 4;
b += 3            -> b = (byte)(b + 3) -> 4;
移位运算符 -- 了解即可
  • "<<" 左移运算符, 将数据的二进制位向左移动, 右边使用 0 补充
代码语言:javascript
复制
byte b1 = 13, byte b2 = (byte)(b1 << 1) -> 26;
13 << 1 -> 0000 1101 << 1 -> 0001 1010 -> 26;
-13 << 1 -> 1111 0011 << 1 -> 1110 0110‬ -> -26;
  • ">>" 右移运算符, 将数据的二进制位向右移动, 左边使用符号位补充
代码语言:javascript
复制
-13 >> 1 -> 1111 0011 >> 1 -> 1111 1001 -> -7;
  • ">>>" 逻辑右移运算符, 将数据的二进制位向右移动, 右边使用 0 补充
代码语言:javascript
复制
-13 >>> 1 -> 0111 ... 1111 1001 -> 2147483641‬ // 默认32位
位运算符 -- 了解即可
  • & 表示按位'与'运算符, 按照二进制位进行与运算, 同 1 为 1, 一 0 为 011 & 13 -> 0000 1011 & 0000 1101 -> 0000 1001 -> 9
  • | 表示按位'或'运算符, 按照二进制位进行或运算, 同 0 为 0, 一 1 为 111 | 13 -> 0000 1011 | 0000 1101 -> 0000 1111 -> 15
  • ^ 表示按位"异或"运算符, 按照二进制位进行异或运算, 同为 0, 不同为 111 ^ 13 -> 0000 1011 ^ 0000 1101 -> 0000 0110 -> 6-11 ^ -13 -> 1111 0101 ^ 1111 0011 -> 0000 0110 -> 6
  • ~ 表示按位"取反"运算符, 按照二进制位进行取反运算, 1 为 0, 0 为 1~ 11 -> ~ 0000 1011 -> 1111 0100 -> -12
运算符的优先级
  • "括号"的优先级最高, "等号"优先级最低
  • 只有"等号"的结合性 (Associativity) 是从右到左, 其他都是从左到右
流程控制语句
局部变量 -- 作用范围是从声明开始一直到方法体结束
块变量 -- 作用访问是从声明开始一直到当前语句块结束
顺序结构 -- sequential structure
分支结构 -- branch structure
代码语言:javascript
复制
if () {}
if () {} else {}
if () {} else if () {} else {}
switch (Type) {
    // Type 支持的数据类型:
    // byte, short, char, int,
    // jdk 1.5 开始支持枚举类型,
    // jdk 1.7 开始支持 String 类型
    case 0:
    case 1:
        Statement1;
        break;
    case 2:
        statement2;
        break;
    default:
        statement;
        // 放在最后可以省略 break, 否则要加上
        // break;
}
循环结构 -- loop structure
代码语言:javascript
复制
    //适合于明确循环次数的场合, 也可以成为死循环
for (initialization; condition; iteration) {
    body;
}

//do while 循环格式: 最后要加分号
//do while 循环主要用于至少执行一次循环体的场合
do {
    body;
} while (condition);

// while循环适合于明确循环条件, 但不明确循环次数的场合
while (condition) {
    body;
}

continue // 语句, 结束本次循环开始下次循环

break // 关键字, 退出当前语句块, 在循环体中用于退出循环

//如果要退出外层循环, 使用标号
outer: for(...) {
       for(...) {
              break outer;
   }
}
数组
常见异常

ArrayIndexOutOfBoundsException 数组下标越界异常ArithmeticException 算术异常

内存结构之栈区

用于存放程序运行过程中所有的局部变量

内存结构之堆区

用于存储使用 new 关键字创建的数组和对象

一维数组
  • DataType[] array = new DataType[array.length]
  • 数组名的内存空间中存放的是数据在堆区中的内存地址信息
  • 通过下标访问数组每一个元素, 从 0 开始 到 array.length - 1
  • 初始化方式
    • DataType[] array = new DataType[]{value0, value1, value2}
    • DataType[] array = {value0, value1, value2} // simplified
    • byte, short, char, int, long 为 0;
    • float, double 为 0.0; booleanfalse;
    • 基本类型数组初始值:
    • 可以在数组声明的同时进行初始化:
  • 是相同数据类型的多个元素的容器
    • 本质上是在空间中申请一段连续的存储单元
    • 在 Java 语言中体现为一种引用数据类型
  • 优缺点
    • 可以通过下标快速访问指定位置的元素
    • 要求所有元素的类型相同
    • 要求内存空间连续, 并且长度一旦确定就不能修改
    • 增加和删除效率低
  • 变长数组: 主要指变量可以作为数组的长度, 但绝不是数组的长度可以改变
数据工具类
  • java.util.Arrays 类可以实现对数组中元素的遍历, 查找, 排序等操作
  • 常用方法
    • Arrays.toString(array);
    • Arrays.fill(array, val);
    • Arrays.equals(array1, array2);
    • Arrays.sort(array);
    • Arrays.binarySearch(array, val);
二维数组
  • DataType[][] array = new DataType[row][col];
  • 本质上由多个一维数组摞在一起的数组
  • 每个元素都是一维数组, 而一维数组中的每个元素才是数据内容
  • 初始化方式
代码语言:javascript
复制
DataType[][] array = {{element0, element1, ...}, ...};
int[][] arr = new int[3][]; // 每一行列数不一样
    arr[0] = new int[3];
    arr[1] = new int[4];
    arr[2] = new int[5];
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-06-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Renda 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 开篇
    • 达成入门级软件开发工程师
    • 初始 Java 语言
      • Java SE -- Java Platform, Standard Edition 是 Java 平台的基础
        • Java EE -- Java Platform, Enterprise Edition
          • Java ME -- Java Platform, Micro Edition 已经被 Android 平台淘汰了
            • Java 语言的注释
            • 变量和数据类型
              • 变量
                • 标识符命名
                  • 数据类型
                    • 进制转换
                      • 单个字节
                        • 整数类型
                          • 浮点类型
                            • 布尔类型
                              • 字符类型
                                • 基本数据类型之间的转换
                                • 运算符
                                  • 算术运算符
                                    • 字符串连接符
                                      • 关系/比较运算符
                                        • 自增减运算符
                                          • 逻辑运算符
                                            • 条件/三目运算符
                                              • 赋值运算符
                                                • 移位运算符 -- 了解即可
                                                  • 位运算符 -- 了解即可
                                                    • 运算符的优先级
                                                    • 流程控制语句
                                                      • 局部变量 -- 作用范围是从声明开始一直到方法体结束
                                                        • 块变量 -- 作用访问是从声明开始一直到当前语句块结束
                                                          • 顺序结构 -- sequential structure
                                                            • 分支结构 -- branch structure
                                                              • 循环结构 -- loop structure
                                                              • 数组
                                                                • 常见异常
                                                                  • 内存结构之栈区
                                                                    • 内存结构之堆区
                                                                      • 一维数组
                                                                        • 数据工具类
                                                                          • 二维数组
                                                                          相关产品与服务
                                                                          容器服务
                                                                          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                                                                          领券
                                                                          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档