Java 语言基础 (初识Java语言, 变量和数据类型, 运算符, 流程控制语句, 数组)
初始 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-1short类型在内存占 2 个字节, 表示范围 -2^15 ~ 2^15-1int类型在内存占 4 个字节, 表示范围 -2^31 ~ 2^31-1long类型在内存占 8 个字节, 表示范围 -2^63 ~ 2^63-1需要表达比
int更大的量, 在直接量后面加上l或L
浮点类型
float, double,默认doublefloat类型在内存占 4 个字节, 单精度浮点数, 可以表示 7 位有效数字double类型在内存占 8 个字节, 双精度浮点数, 可以表示 15 位有效数字需要表达比
double精度小的量, 在直接量后面加上 f 或者 F浮点类型基本运算可能会有误差, 若需要精确计算, 使用
java.math.BigDecimal
布尔类型
boolean, 只有true或false, 赋别的值会报错布尔类型在内存空间所占大小没有明确规定, 可以认为是一个字节
字符类型
描述单个字符的数据类型
char, 如:'a', '人'占 2 个字节并且没有符号位, 表示范围 0 ~ 65535
开发中更多的使用由多个字符串起来的字符串, 使用 String 类型加以描述
需要掌握的 ASCII:
'\n'-10SPACE-32'0'-48'A'-65'a'-97Java 字符类型采用 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乘以其中一个操作数
异常
5/0 -> 算数异常;
5/0.0 -> Infinity;
0/0.0 -> NaN, Not a Number;
字符串连接符
只要 + 两边的操作数有一个是字符串类型, 则该 + 变为字符串连接符
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
逻辑运算符
&& || !短路特性: 前面的不成立, 后面的判断会跳过执行
(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;
复合赋值运算符与简单赋值运算符有区别
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 补充
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;
">>"右移运算符, 将数据的二进制位向右移动, 左边使用符号位补充
-13 >> 1 -> 1111 0011 >> 1 -> 1111 1001 -> -7;
">>>"逻辑右移运算符, 将数据的二进制位向右移动, 右边使用 0 补充
-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
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
//适合于明确循环次数的场合, 也可以成为死循环
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}; // simplifiedbyte, short, char, int, long为 0;float, double为 0.0;boolean为false;基本类型数组初始值:
可以在数组声明的同时进行初始化:
是相同数据类型的多个元素的容器
本质上是在空间中申请一段连续的存储单元
在 Java 语言中体现为一种引用数据类型
优缺点
可以通过下标快速访问指定位置的元素
要求所有元素的类型相同
要求内存空间连续, 并且长度一旦确定就不能修改
增加和删除效率低
变长数组: 主要指变量可以作为数组的长度, 但绝不是数组的长度可以改变
数据工具类
java.util.Arrays类可以实现对数组中元素的遍历, 查找, 排序等操作常用方法
Arrays.toString(array); //把array数组解析成Sring类型的字符串Arrays.fill(array, val); //填充a1数组中的每个元素都是valArrays.equals(array1, array2);//比较两个数组元素是否相等Arrays.sort(array);//对array数组的所有元素进行排序,并且是按从小到大的顺序Arrays.binarySearch(array, val);//通过二分法在已经排好序的array数组中查找指定的元素val,并返回该元素的下标
二维数组
DataType[][] array = new DataType[row][col];本质上由多个一维数组摞在一起的数组
每个元素都是一维数组, 而一维数组中的每个元素才是数据内容
初始化方式
DataType[][] array = {{element0, element1, ...}, ...};
int[][] arr = new int[3][]; // 每一行列数不一样
arr[0] = new int[3];
arr[1] = new int[4];
arr[2] = new int[5];
Java 语言基础 (初识Java语言, 变量和数据类型, 运算符, 流程控制语句, 数组)的更多相关文章
- 第一章 python介绍、变量、数据类型、流程控制语句等
一.python介绍 1.python的诞生 python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum(龟叔)于1989年发明,第一个公开发行版发行于1991年. ...
- Swift语言指南(一)--语言基础之常量和变量
原文:Swift语言指南(一)--语言基础之常量和变量 Swift 是开发 iOS 及 OS X 应用的一门新编程语言,然而,它的开发体验与 C 或 Objective-C 有很多相似之处. Swif ...
- 变量和数据类型&运算符
变量和数据类型&运算符 变量 变量的作用:用来存储数据 变量命名的规范:字(字符串)下(_下划线)美($)人(¥) 数 (可以包括数字)骆驼 有意义(可以以字母,下划线,美元符号,人民币符号开 ...
- Java语言基础及java核心
一.Java语言特点 1. 简单 2. 面向对象 3. 分布式 4. 健壮 5. 安全 6. 中性架构跨平台 7. 超强的可移植性 8. 高性能 9. 多线程 二.java的环境变量 JAVA_HOM ...
- Java入门 - 语言基础 - 01.Java简介
原文地址:http://www.work100.net/training/java-intro.html 更多教程:光束云 - 免费课程 Java简介 序号 文内章节 视频 1 概述 2 主要特性 3 ...
- C语言基础:两个变量交换值的方法
学习任何语言基础时,两个数值得交换是必须掌握的,下面是3种不同的方式(c语言) 方法一:利用数学的计算技巧 #include <stdio.h> int main() { , b = ; ...
- 【Java并发基础】Java内存模型解决有序性和可见性
前言 解决并发编程中的可见性和有序性问题最直接的方法就是禁用CPU缓存和编译器的优化.但是,禁用这两者又会影响程序性能.于是我们要做的是按需禁用CPU缓存和编译器的优化. 如何按需禁用CPU缓存和编译 ...
- 【Java并发基础】Java线程的生命周期
前言 线程是操作系统中的一个概念,支持多线程的语言都是对OS中的线程进行了封装.要学好线程,就要搞清除它的生命周期,也就是生命周期各个节点的状态转换机制.不同的开发语言对操作系统中的线程进行了不同的封 ...
- Java 第一章 初识Java
第一章笔记 什么是计算机程序:算机为完成某些功能生产的一系列有序指令集合 Java技术包括: java SE:标准版 java EE:企业版 Java ME:移动版 开发Java程序步骤:1.编写 2 ...
随机推荐
- 解决: "E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) ..."
解决: "E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?& ...
- Android四大组件简介:Android 基础知识,开发教程
Android 四大组件: Activity.Service.Broadcast Receiver.Content Provider. http://developer.android.com/int ...
- How To Install Linux & Nginx & MySQL & PHP (LEMP) stack on Raspberry Pi 3,Raspberry Pi 3,LEMP,Nginx,PHP, LEMP (not LNMP)
1. How To Install Linux & Nginx & MySQL & PHP (LEMP) stack on Raspberry Pi 3 R ...
- 如何将多个 Apple 设备中保存在 iCloud 里面密码同步
如何将多个 Apple 设备中保存在 iCloud 里面密码同步 iCloud 钥匙串 密码同步 数据迁移 iOS iCloud 钥匙串会记住一些信息,因此您就无需记忆这些信息. 它会在您批准的任何设 ...
- css text gradient color, css fonts gradient color
css text gradient color, css fonts gradient color css 字体渐变色 demo https://codepen.io/xgqfrms/pen/OJya ...
- NGK公链大事件盘点——回顾过去,展望未来!
NGK公链构想广阔,愿景宏大,2020年10月NGK正式上线,同时NGK全球发布会正式启动,建立区块链生态体系. 早在这之前,NGK就经过了紧锣密鼓的数年缜密搭建. 2018年6月NGK底层系统技术原 ...
- MySQL的简单使用方法备忘
这只是一篇我的个人备忘录,写的是我常用的命令.具体可以参考"菜鸟教程" https://www.runoob.com/mysql/mysql-tutorial.html 登录(用户 ...
- Python算法_三种斐波那契数列算法
斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子数列&qu ...
- Java Reference核心原理分析
本文转载自Java Reference核心原理分析 导语 带着问题,看源码针对性会更强一点.印象会更深刻.并且效果也会更好.所以我先卖个关子,提两个问题(没准下次跳槽时就被问到). 我们可以用Byte ...
- 记一个关于std::unordered_map并发访问的BUG
前言 刷题刷得头疼,水篇blog.这个BUG是我大约一个月前,在做15445实现lock_manager的时候遇到的一个很恶劣但很愚蠢的BUG,排查 + 摸鱼大概花了我三天的时间,根本原因是我在使用s ...