2024年C C++最全【JavaSE系列】Java程序设计基础——数据类型变量与运算符(1),2024年最新对C C++开发的现状和未来发展的思考

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

*/

/**
我是文档注释!
*/


注释规范:


1. 内容准确: 注释内容要和代码一致, 匹配, 并在代码修改时及时更新.
2. 篇幅合理: 注释既不应该太精简, 也不应该长篇大论.
3. 使用中文: 一般中国公司都要求使用中文写注释, 外企另当别论.
4. 积极向上: 注释中不要包含负能量(例如 领导 SB 等).


### 🌼2.2关键字




| 关键字 | 含义 |
| --- | --- |
| abstract | 表明类或者成员方法具有抽象属性 |
| assert | 用来进行程序调试 |
| boolean | 基本数据类型之一,布尔类型 |
| break | 提前跳出一个块 |
| byte | 基本数据类型之一,字节类型 |
| case | 用在switch语句之中,表示其中的一个分支 |
| catch | 用在异常处理中,用来捕捉异常 |
| char | 基本数据类型之一,字符类型 |
| class | 类 |
| const | 保留关键字,没有具体含义 |
| continue | 回到一个块的开始处 |
| default | 默认,例如,用在switch语句中,表明一个默认的分支 |
| do | 用在do-while循环结构中 |
| double | 基本数据类型之一,双精度浮点数类型 |
| else | 用在条件语句中,表明当条件不成立时的分支 |
| enum | 枚举 |
| extends | 表明一个类型是另一个类型的子类型,这里常见的类型有类和接口 |
| final | 用来说明最终属性,表明一个类不能派生出子类,或者成员方法不能被覆盖,或者成员域的值不能被改变,用来定义常量 |
| finally | 用于处理异常情况,用来声明一个基本肯定会被执行到的语句块 |
| float | 基本数据类型之一,单精度浮点数类型 |
| for | 一种循环结构的引导词 |
| goto | 保留关键字,没有具体含义 |
| if | 条件语句的引导词 |
| implements | 表明一个类实现了给定的接口 |
| import | 表明要访问指定的类或包 |
| instanceof | 用来测试一个对象是否是指定类型的实例对象 |
| int | 基本数据类型之一,整数类型 |
| interface | 接口 |
| long | 基本数据类型之一,长整数类型 |
| native | 用来声明一个方法是由与计算机相关的语言(如C/C++/FORTRAN语言)实现的 |
| new | 用来创建新实例对象 |
| package | 包 |
| private | 一种访问控制方式:私用模式 |
| protected | 一种访问控制方式:保护模式 |
| public | 一种访问控制方式:共用模式 |
| return | 从成员方法中返回数据 |
| short | 基本数据类型之一,短整数类型 |
| static | 表明具有静态属性 |
| strictfp | 用来声明FP\_strict(单精度或双精度浮点数)表达式遵循IEEE 754算术规范 |
| super | 表明当前对象的父类型的引用或者父类型的构造方法 |
| switch | 分支语句结构的引导词 |
| synchronized | 表明一段代码需要同步执行 |
| this | 指向当前实例对象的引用 |
| throw | 抛出一个异常 |
| throws | 声明在当前定义的成员方法中所有需要抛出的异常 |
| transient | 声明不用序列化的成员域 |
| try | 尝试一个可能抛出异常的程序块 |
| void | 声明当前成员方法没有返回值 |
| volatile | 表明两个或者多个变量必须同步地发生变化 |
| while | 用在循环结构中 |


## 🌱3.数据类型与变量


Java是一种强类型语言。这就意味着必须为每一个变量声明一种类型。在 Java中,一共有8 种基本类型(primitive type),其中有4种整型、2种浮点类型、1种用于表示Unicode编码的字符单元的字符类型char和1种用于表示真值的 boolean类型。  
 Java 有一个能够表示任意精度的算术包,通常称为"大数值"(big number)。虽然被称为大数值,但它并不是一种新的 Java 类型,而是一个Java对象。后续博客将会介绍!  
 ![66](https://img-blog.csdnimg.cn/7c58fd9e0b21465c991873c86b0fcdf7.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5pyq6KeB6Iqx6Ze7,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)


在C和C++中,int和long等类型的大小与目标平台相关。在8086这样的16位处理器上整型数值占2字节;不过,在32位处理器(比如Pentium或 SPARC)上,整型数值则为 4 字节。类似地,在 32位处理器上long 值为 4 字节,在64位处理器上则为8字节。由于存在这些差别,这对编写跨平台程序带来了很大难度。在 Java中,所有的数值类型所占据的字节数量与平台无关。  
 注意,Java 没有任何无符号(unsigned)形式的 int、long、short或 byte 类型。


### 🌼3.1整型




| 类型 | 储存需求 | 范围 |
| --- | --- | --- |
| int | 4字节 | -2147483648 ~ 2147483647(刚好超过20亿) |
| long | 8字节 | -9 223 372 036 854 775 808 ~ 9 223 372 036 854 775 807 |
| short | 2字节 | -32768 ~ 32767 |
| byte | 1字节 | -128 ~ 127 |


#### 🌾3.1.1整型



int 变量名 = 整型常量;
public class testData {
public static void main(String[] args) {
int a = 10;
System.out.println(a);
//访问最大值与最小值
System.out.println(Integer.MAX_VALUE);//max
System.out.println(Integer.MIN_VALUE);//min
}
}


其中`Integer`为整型的包装类,其实每个基本数据类型都有一个对应的包装类,可以理解为对应类型的加强版。`MAX_VALUE` `MIN_VALUE`分别为最大值与最小值。  
 运行结果:



10
2147483647
-2147483648

Process finished with exit code 0


#### 🌾3.1.2短整型



short 变量名 = 短整型常量;
public class testData {
public static void main(String[] args) {
short b = 8;
System.out.println(b);
//访问最大值与最小值
System.out.println(Short.MAX_VALUE);//max
System.out.println(Short.MIN_VALUE);//min
}
}


运行结果:



8
32767
-32768

Process finished with exit code 0


#### 🌾3.1.3长整型



long 变量名 = 长整型常量;
public class testData {
public static void main(String[] args) {
long c = 345L;//or 345l(不推荐,容易与1混)
System.out.println©;
System.out.println(Long.MAX_VALUE);//max
System.out.println(Long.MIN_VALUE);//min
}
}


运行结果:



345
9223372036854775807
-9223372036854775808

Process finished with exit code 0


#### 🌾3.1.4字节类型



byte 变量名 = 字节型常量;
public class testData {
public static void main(String[] args) {
byte d = 32;
System.out.println(d);
System.out.println(Byte.MAX_VALUE);//MAX
System.out.println(Byte.MIN_VALUE);//MIN
}
}


运行结果:



32
127
-128

Process finished with exit code 0


### 🌼3.2浮点型




| 类型 | 存储需求 | 取值范围 |
| --- | --- | --- |
| float | 4 字节 | 大约 ± 3.402 823 47E+38F (有效位数为 6 ~ 7 位) |
| double | 8 宇节 | 大约 ± 1.797 693 134 862 315 70E+308 (有效位数为 15 位) |


float 类型的数值有一个后缀 F 或 f (例如,3.14F。) 没有后缀 F 的浮点数值(如 3.14 ) 默认为 double 类型。当然,也可以在浮点数值后面添加后缀 D 或 d (例如,3.14D)。  
 所有的浮点数值计算都遵循 IEEE 754 规范。具体来说,下面是用于表示溢出和出错情况的三个特殊的浮点数值:


1. 正无穷大
2. 负无穷大
3. NaN (不是一个数字)


例如, 一 正整数除以 0 的结果为正无穷大。计算 0/0 或者负数的平方根结果为 NaN。


#### 🌾3.2.1双精度浮点型



double 变量名 = 双精度浮点数常量;
public class testData {
public static void main(String[] args) {
double e = 3.14;
System.out.println(e);
System.out.println(Double.MAX_VALUE);//MAX
System.out.println(Double.MIN_VALUE);//MIN
}
}


运行结果:



3.14
1.7976931348623157E308
4.9E-324

Process finished with exit code 0


#### 🌾3.2.2单精度浮点型



float 变量名 = 单精度浮点数常量;
public class testData {
public static void main(String[] args) {
float f = 3.14F;//or 3.14f F or f 不能省,否则会编译错误
System.out.println(f);
System.out.println(Float.MAX_VALUE);//MAX
System.out.println(Float.MIN_VALUE);//MIN
}
}


运行结果:



3.14
3.4028235E38
1.4E-45

Process finished with exit code 0


### 🌼3.3字符型



char 变量名 = 字符;
public class testDemo {
public static void main(String[] args) {
char c = ‘A’;
char d = ‘花’;
System.out.println©;
System.out.println(d);
}
}


运行结果:



A

Process finished with exit code 0


注意事项:


1. Java 中使用 单引号 + 单个字母 的形式表示字符字面值.
2. 计算机中的字符本质上是一个整数. 在 C 语言中使用 ASCII 表示字符, 而 Java 中使用 Unicode 表示字符. 因此一个字符占用两个字节, 表示的字符种类更多, 包括中文.


### 🌼3.4布尔型



boolean 变量名 = falae/true;


boolean (布尔)类型有两个值:`false` 和`true`, 用来判定逻辑条件,整型和浮点型值和布尔值之间不能进行相互转换。  
 在 C++ 中, 数值甚至指针可以代替 boolean 值。值 0 相当于布尔值 false, 非 0 值相当于布尔值 true, 在 Java 中则不是这样。


### 🌼3.5字符串型


在Java中字符串型并不是八大基本数据之一,它是Java当中的引用类型,后续博客会介绍,这里只需要了解字符串的简单使用即可。Java 没有内置的字符串类型, 而是在标准 Java 类库中提供了一个预定义类,很自然地叫做 String。



String 变量名 = “string”;
public class testDemo {
public static void main(String[] args) {
String st = “weijianhuawen”;
String str = “This is a string!”;
System.out.println(st);
System.out.println(str);
}
}


运行结果:



weijianhuawen
This is a string!

Process finished with exit code 0


另外Java支持使用`+`号来进行字符串的拼接。



public class testDemo {
public static void main(String[] args) {
String str1 = “welcome”;
String str2 = “to”;
String str3 = “my”;
String str4 = “blog!”;
String str5 = str1 + str2 +str3 +str4;
System.out.println(str5);
String str6 = “value = " + 10 + 20;//数据与字符串拼接,最终会成为一个字符串!
System.out.println(str6);
String str7 = 10 + 20 + " is a value!”;//这个有一点特殊,因为10与20都是整型且在字符串前,所以会先执行加法运算再和字符串拼接,当然最终会还是成为一个字符串!
System.out.println(str7);
}
}


运行结果:



welcometomyblog!
value = 1020
30 is a value!

Process finished with exit code 0




| 转义字符 | 解释 |
| --- | --- |
| \n | 换行 |
| \b | 退格 |
| \r | 回车 |
| \t | 水平制表符 |
| \’ | 单引号 |
| \" | 双引号 |
| \\ | 反斜杠 |


### 🌼3.6变量与常量


#### 🌾3.6.1变量的声明


这个很简单,在前面的定义一系列的数据类型变量,即局部变量的声明。



int a = 12;
double d = 3.12;
float f = 3.14f;


#### 🌾3.6.2局部变量的作用域


局部变量的作用域为其变量定义距离最近的一对花括号中。



public class testDemo {
public static void main(String[] args) {
int b = 24;
{
int a = 48;
System.out.println(a);//编译通过
System.out.println(b);//编译通过
}
System.out.println(a);//编译出错
System.out.println(b);//编译通过
}
}


#### 🌾3.6.3变量的命名规则


**硬性指标:**


1. 一个变量名只能包含数字, 字母, 下划线
2. 数字不能开头.
3. 变量名是大小写敏感的. 即 num 和 Num 是两个不同的变量.


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


**软性指标:**


1. 变量命名要具有描述性, 见名知意.
2. 变量名不宜使用拼音(但是不绝对).
3. 变量名的词性推荐使用名词.
4. 变量命名推荐 小驼峰命名法, 当一个变量名由多个单词构成的时候, 除了第一个单词之外, 其他单词首字母都大写.



int maxValue = 100;
int minValue = 0;//小驼峰


#### 🌾3.6.4常量


常量一类就是我们常见的数值,字符,字符串等,比如`3.14` `"string"` `A`…  
 除此之外,Java中可以使用`final`来定义常量。



final int a = 10;
a = 20; // 编译出错. 提示 无法为最终变量a分配值


关键字 final 表示这个变量只能被赋值一次。一旦被赋值之后,就不能够再更改了。习惯上,常量名使用全大写。  
 const 是 Java 保留的关键字,但目前并没有使用。在 Java 中, 必须使用 final定义常量。


### 🌼3.7类型转换与数值提升


#### 🌾3.7.1类型转换


Java 作为一个强类型编程语言, 当不同类型之间的变量相互赋值的时候, 会有教严格的校验.



int a = 10;
long b = 20;
a = b; // 编译出错, 提示可能会损失精度.
b = a; // 编译通过.
int a = 10;
double b = 1.0;
a = b; // 编译出错, 提示可能会损失精度.
b = a; // 编译通过.


long 表示的范围更大, 可以将 int 赋值给 long, 但是不能将 long 赋值给 int.  
 double 表示的范围更大, 可以将 int 赋值给 double, 但是不能将 double 赋值给 int.  
 **结论: 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型, 反之则不行.**



int a = 10;
boolean b = true;
b = a; // 编译出错, 提示不兼容的类型
a = b; // 编译出错, 提示不兼容的类型


**结论: int 和 boolean 是毫不相干的两种类型, 不能相互赋值.不仅仅是 int 类型,所有的数值型的变量都不能与布尔类型相互赋值**



byte a = 100; // 编译通过
byte b = 256; // 编译报错, 提示 从int转换到byte可能会有损失


注意: byte 表示的数据范围是 -128 -> +127, 256 已经超过范围, 而 100 还在范围之内.  
 **结论: 使用字面值常量赋值的时候, Java 会自动进行一些检查校验, 判定赋值是否合理,比如 byte 与 short.**



int a = 0;
double b = 10.5;
a = (int)b; //编译通过
int a = 10;
boolean b = false;
b = (boolean)a; // 编译出错, 提示不兼容的类型.


**结论: 使用 (类型) 的方式可以将 double 类型强制转成 int.**  
 但是注意:


1. 强制类型转换可能会导致精度丢失. 如刚才的例子中, 赋值之后, 10.5 就变成 10 了, 小数点后面的部分被忽略.
2. 强制类型转换不是一定能成功, 互不相干的类型之间无法强转.


**类型转换小结**


1. 不同数字类型的变量之间赋值, 表示范围更小的类型能隐式转换成范围较大的类型.
2. 如果需要把范围大的类型赋值给范围小的, 需要强制类型转换, 但是可能精度丢失.
3. 将一个字面值常量进行赋值的时候, Java 会自动针对数字范围进行检查.


#### 🌾3.7.2运算过程中的数值提升


🌰int 和 long 混合运算



int a = 10;
long b = 20;
int c = a + b; // 编译出错, 提示将 long 转成 int 会丢失精度
long d = a + b; // 编译通过.


**结论: 当 int 和 long 混合运算的时候, int 会提升成 long, 得到的结果仍然是 long 类型, 需要使用 long 类型的变量来接收结果. 如果非要用 int 来接收结果, 就需要使用强制类型转换.**  
 🌰byte 和 byte 的运算



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


**结论: byte 和 byte 都是相同类型, 但是出现编译报错. 原因是:虽然 a 和 b 都是 byte, 但是计算 a + b 会先将 a 和 b 都提升成 int, 再进行计算, 得到的结果也是 int, 这时再赋给 c, 就会出现编译错误.**


由于计算机的 CPU 通常是按照 4 个字节为单位从内存中读写数据. 为了硬件上实现方便, 诸如 byte 和 short 这种低于4 个字节的类型, 会先提升成 int, 再参与计算.


正确写法:



byte a = 10;
byte b = 20;
byte c = (byte)(a + b);
System.out.println©;


**类型提升小结:**


1. 不同类型的数据混合运算, 范围小的会提升成范围大的.
2. 对于 short, byte 这种比 4 个字节小的类型, 会先提升成 4 个字节的 int , 再运算.


![12](https://img-blog.csdnimg.cn/d487e7a10d6742d484713d3eb1eb8b78.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5pyq6KeB6Iqx6Ze7,size_20,color_FFFFFF,t_70,g_se,x_16)


#### 🌾3.7.3整型与字符串型的转换


🌰int 转成 String



int num = 10;
// 方法1
String str1 = num + “”;
// 方法2
String str2 = String.valueOf(num);


🌰String 转成 int



String str = “100”;
int num = Integer.parseInt(str);


## 🌱4.运算符


### 🌼4.1赋值运算符


赋值运算符`=`。




![img](https://img-blog.csdnimg.cn/img_convert/569d21bad54f5a2561069a6eafd06535.png)
![img](https://img-blog.csdnimg.cn/img_convert/614b41f6c78ad9d8f7eb2b46d483d62d.png)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618668825)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

adow_50,text_Q1NETiBA5pyq6KeB6Iqx6Ze7,size_20,color_FFFFFF,t_70,g_se,x_16)


#### 🌾3.7.3整型与字符串型的转换


🌰int 转成 String



int num = 10;
// 方法1
String str1 = num + “”;
// 方法2
String str2 = String.valueOf(num);


🌰String 转成 int



String str = “100”;
int num = Integer.parseInt(str);


## 🌱4.运算符


### 🌼4.1赋值运算符


赋值运算符`=`。




[外链图片转存中...(img-gXFeUuR9-1715534107785)]
[外链图片转存中...(img-n0J39i6m-1715534107786)]

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化的资料的朋友,可以添加戳这里获取](https://bbs.csdn.net/topics/618668825)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值