Java之路--搞定数据类型及运算符已如探囊取物

嗨嗨大家哈皮,好久不见啊~未来将会和大家一起走进java的学习。

目录

[一 认识java](#一 认识java)

1创始人

[2 技术特点](#2 技术特点)

[3 运行过程](#3 运行过程)

[4 JDK/JRE/JVM](#4 JDK/JRE/JVM)

[5 三种技术架构](#5 三种技术架构)

[二 基础语法](#二 基础语法)

[1 数据类型](#1 数据类型)

[1.1 字符串类型变量(重点)](#1.1 字符串类型变量(重点))

[1.2 基本数据类型转换](#1.2 基本数据类型转换)

[1.3 byte 和 byte 的运算](#1.3 byte 和 byte 的运算)

[1.4 类型提升小结](#1.4 类型提升小结)

[1.5 int和String之间相互转换](#1.5 int和String之间相互转换)

[1.6 变量的命名规则](#1.6 变量的命名规则)

[2 运算符](#2 运算符)

[2.1 算术运算符](#2.1 算术运算符)

[2.2 关系运算符](#2.2 关系运算符)

[2.3 逻辑运算符(重点)](#2.3 逻辑运算符(重点))

[2.4 位运算符](#2.4 位运算符)

[2.5 移位运算(了解)](#2.5 移位运算(了解))

[2.6 条件运算符](#2.6 条件运算符)


一 认识java

1创始人

2 技术特点

(1)简单性:java由C++衍生而来,但比C++简单,抛弃了C++中一些不是绝对必要的东西,如头文件、指针、结构、联合、隐式的类型转换和操作符重载等;

(2)面向对象的语言:面向对象是一种程序设计思想,能增强工程的健康度;

(3)一种++++与平台无关++++ 的语言(重要):一次编译到处运行

上图可以直观的看到java是一种与平台无关的语言。

(4)健壮性和安全性:

  • 删除了指针和释放内存等C++功能,避免了非法内存操作;
  • 通过Java的安全体系架构确保Java代码的安全性;

(5)多线程:Java对多线程的支持是非常强大的,它屏蔽了许多的技术细节,可以轻松的开发多线程的应用程序。

3 运行过程

Java是一门半编译型、半解释型语言。先通过javac编译 程序把源文件进行编译,编译后生成的****.class文件**** 是由字节码组成的平台无关、面向JVM 的文件。最后启动java虚拟机来运行.class文件 ,此时JVM会将字节码转换成平台能够理解的形式 来运行。我们以下图为例可以清楚它的运行过程:

4 J DK /JRE/J VM

JDK:针对Java开发员的产品,是整个Java的核心,包括Java运行的环境JRE,Java的开发工具和Java基础类库;

JRE:Java程序的运行环境,Java运行时所需要库类+JVM(java虚拟机)的标准实现;

JVM:Java虚拟机的缩写,是整个Java实现跨平台最核心的部分,能运行以Java语言写作的软件程序。

对应的包含关系:

5 三种技术架构

Java主要用在b/s架构中的web应用开发;

JAVASE:Java Platform Standard Edition,完成桌面应用程序的开发,是其它两者的基础;

JAVAEE :Java Platform Enterprise Edition,开发企业环境下的应用程序,主要针对web程序开发;

JAVAME:Java Platform Micro Edition,开发电子消费和嵌入式设备,如手机中的程序。

我们在前期所学的基础内容属于JAVASE。

二 基础语法

1 数据类型

注意:

(1)char ch = 'A';char ch = '呵';

计算机中的字符本质上是一个++++整数++++ 。在 C 语言中使用 ASCII 表示字符, 而 Java 中使用Unicode 表示字符. 因此一个字符占用两个字节,表示的字符种类更多,包括中文。

(2)由于float数据精度表示太小,所以在工程上用到浮点数都优先考虑 double, 不太推荐float。

(3)boolean 类型的变量只有两种取值, true 表示真, false 表示假。

(4)Java 的 ++++boolean 类型和 int 不能相互转换++++ , 不存在 1 表示 true, 0 表示 false 这样的用法.

(5)boolean 类型有些 JVM 的实现是占 1 个字节, 有些是占 1 个比特位, 这没有明确规定。

1.1 字符串类型变量(重点)

1.基本语法格式:

java 复制代码
String 变量名 = "初始值";

2.String 不是基本类型, 而是**++++引用类型++++** (后面重点解释).

3.字符串中的一些特定的不太方便直接表示的字符需要进行转义.

转义字符示例:

java 复制代码
// 创建一个字符串 My name is "张三"
String name = "My name is \"张三\"";

转义字符有很多, 其中几个比较常见的如下:

|--------------|------------|
| 转义字符 | 解释 |
| \n | 换行 |
| \t | 水平制表符 |
| \' | 单引号 |
| \" | 双引号 |
| \\ | 反斜杠 |

4.字符串的 + 操作 , 表示字符串拼接 :

java 复制代码
String a = "hello"; 
String b = "world"; 
String c = a + b; 
System.out.println(c); 
// 执行结果 
helloworld

5.还可以用**++++字符串和整数进行拼接++++** :

java 复制代码
String str = "result = "; 
int a = 10; 
int b = 20; 
String result = str + a + b; 
System.out.println(result)
// 执行结果 
result = 1020 

以上代码说明, 当一个 + 表达式中存在字符串的时候, 都是执行字符串拼接行为。

因此我们可以很方便的使用 System.out.println 同时打印多个字符串或数字,如下代码:

java 复制代码
int a = 10; 
int b = 20; 
System.out.println("a = " + a + ",b = " + b);
//执行结果
a=10,b=20

1.2 基本数据类型转换

默认 转换:++++小容量类型转为大容量类型++++

强制 转换:大容量类型转为小容量类型(存在溢出或精度降低或丢失数据),要加上强制转换符,如下代码:

java 复制代码
int a = 0;
double b = 10.5;
a = (int)b;//这里是把b的类型强制转换成了int,存在丢失数据(精度丢失

容量排行如下图所示:

注意:容量不是所占字节大小;如4个字节的float类型,容量大于8个字节的long类型。

1.3 byte 和 byte 的运算

看如下代码:

java 复制代码
byte a = 10; 
byte b = 20; 
byte c = a + b; 
System.out.println(c); 
// 编译报错 
Test.java:5: 错误: 不兼容的类型: 从int转换到byte可能会有损失 
byte c = a + b; 

注意 :在这里,虽然 a 和 b 都是 byte,但是计算 a + b 会先将 a 和 b 都提升成 int,再进行计算,得到的结果也是 int类型。

1.4 类型提升小结

1.不同类型的数据混合运算,范围小的会提升成范围大的。

    1. 对于 short,byte 这种比 4 个字节小的类型,会先提升成 4 个字节的 int ,再运算。

1.5 int和 String 之间相互转换

int 转成 String

java 复制代码
int num = 10; 
// 方法1 
String str1 = num + ""; 
// 方法2 
String str2 =String.valueOf(num);

String 转成 int

java 复制代码
String str = "100"; 
int num = Integer.parseInt(str); 

1. 6 变量的命名规则

硬性指标 :

  1. 一个变量名只能包含++++数字++++ , ++++字母++++ , ++++下划线++++

  2. ++++数字不能开头++++ .

  3. 变量名是大小写敏感的. 即 num 和 Num 是两个不同的变量.

注意: 虽然语法上也允许使用中文/美元符($)命名变量, 但是 强烈 不推荐这样做.

软性指标 :

  1. 变量命名要具有描述性, 见名知意.

  2. 变量名不宜使用拼音(但是不绝对).

  3. 变量名的词性推荐使用名词.

  4. 变量命名推荐 小驼峰命名法 , 当一个变量名由多个单词构成的时候, 除了第一个单词之外, 其他单词首字母都大写.

2 运算符

2.1 算术运算符

  • 基本四则运算符: + - * / %

规则比较简单, 值得注意的是除法:

a) ++++int / int 结果还是 int++++ ++++, 需要使用 double 来计算++++ .

java 复制代码
int a = 1;

int b = 2;

System.out.println(a / b);

// 结果为 0

b)++++0 不能作为++++ ++++除数++++

java 复制代码
int a = 1;

int b = 0;

System.out.println(a / b)

// 运行结果

Exception in thread "main" java.lang.ArithmeticException: / by zero

at Test.main(Test.java:5)

c) ++++% 表示取余,++++ ++++不仅仅可以对 int 求模,也能对 double 来求模++++

java 复制代码
System.out.println(11.5 % 2.0);

// 运行结果:

1.5
  • 增量赋值运算符 += -= *= /= %=
java 复制代码
int a = 10;

a += 1; // 等价于 a = a + 1

System.out.println(a);
  • 自增/自减运算符 ++ --
java 复制代码
int a = 10; 

int b = ++a;

System.out.println(b);

int c = a++;

System.out.println(c)

结论:

  1. 如果不取自增运算的表达式的返回值, 则前置自增和后置自增没有区别。

  2. 如果取表达式的返回值, 则前置自增的返回值是自增之后的值, 后置自增的返回值是自增之前的值。

2.2 关系运算符

  • 关系运算符主要有六个:

== != < > < = >=

注意: 关系运算符的表达式返回值都是 boolean 类型.

2.3 逻辑运算符 ( 重点 )

  • 逻辑运算符主要有三个:

&& || !

注意: 逻辑运算符的操作数(操作数往往是关系运算符的结果)和返回值都是 boolean .

  • 逻辑与 &&

规则: ++++两个操作数都为 true, 结果为 true++++ ++++, 否则结果为 false.++++

java 复制代码
int a = 10;

int b = 20;

int c = 30;

System.out.println(a < b && b < c);
  • 逻辑或 ||

规则: ++++两个操作数都为 false, 结果为 false++++ ++++, 否则结果为 true++++

java 复制代码
int a = 10;

int b = 20;

int c = 30;

System.out.println(a < b || b < c);
  • 逻辑非 !

规则: ++++操作数为 true, 结果为 false; 操作数为 false, 结果为 true(这是个单目运算符, 只有一个操作数).++++

java 复制代码
int a = 10;

int b = 20;

System.out.println(!a<b);

短路求值

++++&&++++ ++++和++++ ++++||++++ 遵守短路求值的规则.

java 复制代码
System.out.println(10 > 20 && 10 / 0 == 0); // 打印 false

System.out.println(10 < 20 || 10 / 0 == 0); // 打印 true

我们都知道, 计算 10 / 0 会导致程序抛出异常. 但是上面的代码却能正常运行, 说明 10 / 0 并没有真正被求值.

结论 :

++++1. 对于++++ ++++&&++++ ++++, 如果左侧表达式值为 false, 则表达式的整体的值一定是 false, 无需计算右侧表达式.++++

++++2. 对于 ||, 如果左侧表达式值为 true, 则表达式的整体的值一定是 true, 无需计算右侧表达式.++++

  • & | ( 不推荐使用 )

& 和 | 如果操作数为 boolean 的时候, 也表示逻辑运算. 但是和 && 以及 || 相比, 它们++++不支持短路++++ 求值.

java 复制代码
System.out.println(10 > 20 & 10 / 0 == 0); // 程序抛出异常

System.out.println(10 < 20 | 10 / 0 == 0); // 程序抛出异常

2.4 位运算符

Java 中对数据的操作的++++最小单位不是字节, 而是二进制位++++ .

  • 位运算符主要有四个: & | ~ ^

位操作表示:按二进制位运算

  • 按位与 & : 如果++++两个二进制位都是++++ ++++1,++++ ++++则结果为++++ ++++1,++++ ++++否则结果为++++ ++++0++++
java 复制代码
int a = 10;

int b = 20;

System.out.println(a & b);

进行按位运算, 需要先把 10 和20都转换成二进制,分别为1010和10100.

注意:10->1010 由于位数不够,故在前面补0

  • 按位或 |: 如果++++两个二进制位都是++++ ++++0,++++ ++++则结果为++++ ++++0,++++ ++++否则结果为++++ ++++1.++++
java 复制代码
int a = 10;

int b = 20;

System.out.println(a | b);

注意:& 和 | 的操作数为整数(int, short, long, byte) 的时候, 表示按位运算, 当操作数为 boolean 的时候, 表示逻辑运算.

  • 按位取反 ~: ++++如果该位为++++ ++++0++++ ++++则转为++++ ++++1,++++ ++++如果该位为++++ ++++1++++ ++++则转为++++ ++++0++++
java 复制代码
int a = 0xf;

System.out.printf("%x\n", ~a)

注意:

  1. 0x 前缀的数字为 十六进制 数字. 十六进制可以看成是二进制的简化表示方式. ++++一个十六进制数字对应 4 个二进制位++++ .

  2. 0xf 表示 10 进制的 15, 也就是二进制的 1111

  3. printf 能够++++格式化输出++++ 内容, ++++%x 表示按照十六进制输出.++++

  4. \n 表示换行符

  • 按位异或 ^: ++++如果两个数字的二进制位相同++++ ++++,++++ ++++则结果为++++ ++++0,++++ ++++相异则结果为++++ ++++1.++++
java 复制代码
int a = 0x1;

int b = 0x2;

System.out.printf("%x\n", a ^ b);

2.5 移位运算 ( 了解 )

  • 移位运算符有三个:

<< >> >>>

都是**++++按照二进制位++++** 来运算.

  • 左移 << : ++++最左侧位不要了++++ ++++,++++ ++++最右侧补++++ ++++0++++ .
java 复制代码
int a = 0x10;

System.out.printf("%x\n", a << 1);

// 运行结果(注意, 是按十六进制打印的)

20
  • 右移 >> : ++++最右侧位不要了++++ ++++,++++ ++++最左侧补符号位++++ ++++(++++ ++++正数补++++ ++++0,++++ ++++负数补++++ ++++1)++++
java 复制代码
int a = 0x10;

System.out.printf("%x\n", a >> 1);

// 运行结果(注意, 是按十六进制打印的)

8

int b = 0xffff0000;

System.out.printf("%x\n", b >> 1);

// 运行结果(注意, 是按十六进制打印的)

ffff8000
  • 无符号右移 >>>: ++++最右侧位不要了++++ ++++,++++ ++++最左侧补++++ ++++0++++ .
java 复制代码
int a = 0xffffffff;

System.out.printf("%x\n", a >>> 1);

// 运行结果(注意, 是按十六进制打印的)

7fffffff

注意:

  1. 左移 1 位, 相当于原数字 * 2. 左移 N 位, 相当于原数字 * 2 的N次方.

  2. 右移 1 位, 相当于原数字 / 2. 右移 N 位, 相当于原数字 / 2 的N次方.

  3. 由于计算机计算移位效率高于计算乘除, 当某个代码正好乘除 2 的N次方的时候可以用移位运算代替.

2.6 条件运算符

  • 条件运算符只有一个:

表达式1 ? 表达式2 : 表达式3

当 表达式1 的值为 true 时, 整个表达式的值为 表达式2 的值; 当 表达式1 的值为 false 时, 整个表达式的值为 表达式3 的值.

也是 Java 中唯一的一个 三目运算符 , 是条件判断语句的简化写法.

java 复制代码
// 求两个整数的最大值

int a = 10;

int b = 20;

int max = a > b ? a : b;

本期的内容分享已经结束了,希望今天的分享能对你们有所帮助!如果觉得本篇内容对你们有所帮助,记得留下三连加支持哈~诸君加油,你的未来正因为你的努力而发生改变!

相关推荐
考虑考虑35 分钟前
Jpa使用union all
java·spring boot·后端
用户3721574261351 小时前
Java 实现 Excel 与 TXT 文本高效互转
java
浮游本尊2 小时前
Java学习第22天 - 云原生与容器化
java
渣哥4 小时前
原来 Java 里线程安全集合有这么多种
java
间彧4 小时前
Spring Boot集成Spring Security完整指南
java
间彧4 小时前
Spring Secutiy基本原理及工作流程
java
Java水解5 小时前
JAVA经典面试题附答案(持续更新版)
java·后端·面试
洛小豆7 小时前
在Java中,Integer.parseInt和Integer.valueOf有什么区别
java·后端·面试
前端小张同学8 小时前
服务器上如何搭建jenkins 服务CI/CD😎😎
java·后端
ytadpole8 小时前
Spring Cloud Gateway:一次不规范 URL 引发的路由转发404问题排查
java·后端