学习感想:在小组学习的第一周,说实话确实是有点累的,但也不能不承认过得很充实,学习效率不差也没那么好,感觉东西听完就有点忘了,能听懂但是真自己写练习的时候却写不出来,我也总结了一些原因。一.可能是因为基础知识掌握的并不牢固;二.实际练习动手少,不够熟练;三.写代码时比葫芦画瓢,真正自己思考的地方太少。针对以上方面我也会及时的进行改正,努力的调整自己。
学习成果:本周的学习我主要了解了Java的语言描述、数据类型和运算符、流程控制与数组(多维数组还并未学到)等方面的知识,接下来我将用图片和文字的形式对其中我学的不太熟练的环境变量的配置、运算符的优先级和结合性、顺序结构和分支结构、判断与循环、数组等方面的知识点进行总结。
一、环境变量的配置
- JDK:开发工具包(写代码、javac编译、java运行),包含JRE
- JRE:运行环境,只负责跑Java程序,没有编译器
- JVM:Java虚拟机,实现“一次编写到处运行”,是JRE里面核心部分
运行机制: .java 源代码 → javac编译成 .class 字节码 → JVM加载字节码运行 环境变量: JAVA_HOME 指向jdk根目录,Path引用 %JAVA_HOME%\bin ,系统才能找到javac/java命令
二、运算符的优先级和结合性
1. Java八大基本数据类型
Java一共有8种基本数据类型,分为四类:整数型、浮点型、字符型、布尔型。
整数类型: byte (1字节)、 short (2字节)、 int (4字节)、 long (8字节);
浮点类型: float (4字节)、 double (8字节);
字符类型: char (2字节);
布尔类型: boolean ,只有 true 和 false 两个取值。
2. 隐式类型转换 & 强制类型转换
-隐式转换(自动类型转换):不需要手动写代码,编译器自动完成。转换方向是取值范围小的类型 → 取值范围大的类型,不会丢失数据。
byte < short < int <long <float < double
(我对 byte 、 short 的取值范围记忆不牢固,容易忽略一个规则:byte、short、char参与数学运算时,会自动提升为int类型再计算)
-强制类型转换:手动编写代码,把取值范围大的数值赋值给取值范围小的变量。
格式:目标数据类型 变量名=(目标数据类型 )被强制转换的数据。
这种转换存在风险,超出小类型的取值范围就会发生溢出、丢失精度,数据会出错。
举例: byte b = (byte)130; 数值超出byte范围,结果会变成负数。
3.关系运算符的结果都是boolean类型,要么是true,要么是false,不要把“==”误写成“=”。
4. 扩展赋值运算符( += 、 -= 、 *= 、 /= 、 %= )
扩展赋值运算符底层隐含了强制类型转换, a += b 和 a = a + b 并不完全等价。
举例:
三、顺序结构和分支结构
if语句格式:if、if-else、if else if(if、else只管理自己代码块里面的代码。代码块外面的代码,不管if条件成立与否,都会执行)。
①单if
②if-else
③if else if
(if-else 大括号作用域容易写错;分不清if管辖代码范围,漏写大括号造成逻辑错误。)
四、判断与循环
初始化语句:只执行1次(最先执行)
执行条件判断语句:
- 如果结果为 true :执行循环体语句 → 执行条件控制语句,回到条件判断,继续循环。
- 如果结果为 false :循环直接结束,执行循环下方其他代码。
1.while循环(不知道循环多少次,只知道什么时候结束)
2.for循环(已知循环次数 / 明确循环范围)
3.for循环 和 while循环 对比
✅ 相同点
底层运行规则完全一样:先判断条件,条件true就执行循环体,false退出循环。
✅ 核心区别
1. 循环变量的作用域
- for循环 :循环变量写在 for() 括号里面,属于for循环内部。for循环执行结束之后,这个变量就不能再访问(出作用域了)。
while循环 :循环变量是定义在while外面的。while循环结束后,这个变量还能继续使用。
(for循环三部分(初始化、条件、更新)容易写错; continue 和 break 概念混淆,分不清“跳过本次循环”和“结束整个循环”)
五、数组
1. 数组概念
数组是容器,用来存放同种数据类型的多个值。
补充:可以发生隐式类型提升,但不能放boolean到int数组。
-int数组:可以放 byte、short、int(小转大自动转换),不能boolean、double。
-double数组:可以放 byte、short、int、long、float、double 建议:数组类型和存入的数据保持一致,避免混淆。
2. 数组的两种定义格式(只是写法不同,效果一样)
格式1(推荐): 数据类型[] 数组名;
示例: int[] array;
格式2(C语言风格,不推荐): 数据类型 数组名[];
示例: int array[];
3. 静态初始化(元素写死,长度系统自动算出,适合数据提前已知)
适用场景:已经知道要存哪些具体数据
完整格式:
静态初始化, [ ]里面不能写长度 !!!
4. 索引(下标、角标)
- 索引=下标,从0开始,依次+1,连续不间断
- 数组长度为n:索引范围 0 ~ n-1 - 最大下标 = 数组长度 - 1
5. 动态初始化(只指定长度,元素由系统分配默认值,适合数据后续录入、不确定内容)
适用场景:知道要存多少个数据,但不知道具体值(比如键盘录入数据)。
格式:
示例: int[] arr = new int[3];
✅各类型默认值
- byte/short/int/long → 0
- float/double → 0.0
- boolean → false
- 引用类型(String等) → null
6.数组核心属性:length
数组名.length 代表数组元素总个数,是属性,不带括号。
7. 数组是引用类型
数组变量保存的不是数组本身,是堆内存的地址值 想独立新数组,不能直接赋值,要循环拷贝元素。
8. 数组基础规则
①数组一旦创建,长度不可更改。只能新建数组拷贝数据,不能直接扩容。
②数组元素类型统一,可以存放重复元素