**
从0开始学Java,第一周学习笔记分享,还请各位大佬、同仁帮忙指正**
day01 1、Java语言的特点- 开源性
- 面向对象
- 跨平台性
- 编译性
- 动态性
java的跨平台借助于jvm软件识别运行从而达到编译一次到处运行的效果
3、JDK&JRE&JVM简介:
-
JVM:Java Virtual Matchine,Java虚拟机
Java虚拟机:是一个使用C语言编写出来的一个可以识别运行java字节码文件的软件,运行在操作系统上的,不能跨平台 作用:识别运行java字节码文件
-
JRE:Java Runtime Environment,Java运行环境
java运行环境:由jvm软件 + java代码运行时需要的核心类库 组成的资源包 jre使用前提:已经拥有了字节码文件 使用场景:提供给只运行不开发的用户 组成:jvm + 运行的资源包
-
JDK:Java Development Kit,Java运行环境
java开发工具包:专门提供给java开发人员使用 组成:jre + 开发时使用的一些操作源代码的相关工具程序
目录名称 说明 bin 该路径下存放了JDK的各种工具命令。javac和java就放在这个目录。 include 该路径下存放了一些平台特定的头文件。 jre 该路径下存放了jre legal 该路径下存放了JDK各模块的授权文档。 lib 该路径下存放了JDK工具的一些补充JAR包。 src.zip 这是jdk的源码包
-
JDK&JRE&JVM三者关系
1、因为jvm有不同平台的版本,所以jdk也有版本之说4、常用的DOS命令
| 操作 | 说明 |
|---|---|
| dir | 查看当前路径下的内容。 |
| cd 目录名 | 进入单级目录。 |
| cls | 清屏。 |
| cd … | 返回当前目录的上一级目录 |
| cd / | 返回当前目录所在的根盘符 |
| md 目录名称 | 创建目录 |
| rd 目录名称 | 删除目录 【要求目录必须是空 不经过回收站】 |
| echo 内容 > 文件名 | 创建一个指定内容的文件 |
| del 文件名 | 删除文件 |
| 盘符名称 + : | 切换盘符 |
作用:实现bin目录下的java相关命令可以在任意目录下使用。 【解决了源文件不在bin目录下不能正常编译运行的问题】 步骤: 1、先配置JAVA_HOME环境变量 【变量:JAVA_HOME 值:JDK所在目录】 2、再配置Path环境变量 【在变量Path中新建变量:%JAVA_HOME%bin】 3、当需要使用不同版本的JDK时,只需要改变变量JAVA_HOME的值即可,避免改变系统变量Path 注意事项: 1. Path 环境变量是系统自带的环境变量,不需要自己创建,只需要增加变量值就可以了. 2. 注意在配置Path环境变量的时候,不要删除原有的变量值 3. %JAVA_HOME% 是引用JAVA_HOME 环境变量的值,相当于 直接填入 D:JAVAJDK8JDK 这样就可以实现当JAVA_HOME环境变量的值改变时, Path的值也会一起改变,从而减少了频繁修改 Path 环境变量的麻烦.
day02 1、Java 编码的格式规范及常见问题
格式规范:
1、左花括号的前面一般加空格
2、左花括号的后面换行缩进
3、右花括号的前面换行后和原有的内容对齐
4、不同代码块【一对花括号】一般使用空行隔开
5、运算符左右两侧一般加空格
注意事项:
1、大小写区分 ---- java是一门要严格区分大小写的语言
2、所有的符号都是英文的
3、符号一般是成对出现
4、有public的情况下,类名必须要和文件名一致
2、关键字
概述:
Java中提前定义好的并且赋予这个单词的特殊意义或特殊功能的单词
一共有50个,在用的只有48个,有两个预留关键字:const goto
特点:
- 字母全部小写
- 关键字不能用于标识符【不能用来起名字】
关键字图示:
3、标识符概述:
java中用来给java元素【类 方法 变量 枚举 常量等】起名字使用的字符序列
【直白说:标识符就是就Java中元素的名字】
组成内容:
1、所有的大小写英文字母
2、英文符号 _ 和 $
3、所有的阿拉伯数字【0 - 9 数字】
4、其他国家语言的字符(实际开发几乎不用)
注意事项:
1、不能是关键字
2、数字不能开头
3、不能出现空格
4、Java命名规范
1、总体规范:见名知意
2、类名级别的标识符:
大驼峰格式:
单个单词:首字母大写其他字母小写 Demo
多个单词:每个单词的首字母大写 其他字母全部小写 HelloWorld
3、变量级别的标识符:
小驼峰格式:
单个单词:所有字母全部小写 age name
多个单词:第一个单词字母其全部小写 其他单词首字母大写其他字母全部小写 getAge getSumAndAvg
4、常量名:
所有单词所有字母全部大写 单词和单词之间使用_ 隔开 MAX_PRIORITY
5、包名:
所有的字母全部小写
包结构:
实际开发包至少出现三级 :前两级是公司域名反写 后续的自定义
比如:
com.ujiuye.demo
`注意:包名与包名之间使用.隔开`
5、常量
概述:
Java代码运行过程中,数据值不会发生任何改变的元素就叫做常量。
java中用来体现固定不变的数据元素
特点:
`java代码中常量不能独立使用`,要想使用常量需要借助于java的其他操作来间接的使用。【输出语句,变量等】
分类【六大类】:
1、整数常量:所有整数
2、小数常量:所有小数
3、字符常量:java中使用单引号包裹单个的文字或符号 比如:'进' 'a' ' '
特点:`内容有且只有一个元素`
4、布尔常量:true 或 false
5、字符串常量:使用双引号包裹字符序列 比如: "jkl" "字符串常量" ""
6、空常量:null
6、变量
概念:
java代码运行过程中,表示的数据值会发生改变的元素叫做变量。
变量的本质:就是java代码在运行中在内存中开辟的一块只能存放一个数据的空间。
定义【两种】: 语法【两种】:
1、先声明空间,再创建空间放值 1、 数据类型 变量名;
变量名 = 值;
2、直接创建空间存放值 2、 数据类型 变量名 = 值;
作用域:
1、每个作用域都可以定义自己的变量
2、小域可以使用大域中的变量资源但是大域不能使用小域
3、不同的作用域可以定义同名的变量访问的时候就近访问
7、Java数据类型
1、基本数据类型 【四类八种】
-
整数类型:
类型 所占字节 存值范围 byte 1B - 128 — 127【-2^7 — 2^7 - 1】 short 2B -32768 — 32767【-2^15 — 2^15 - 1】 int 4B -2147483648 — 2147483647【-2^31 — 2^31 - 1】 long 8B -263 — 263-1 -
注意事项:
1、整数常量在java的代码运行过程自动识别为int类型【整数常量默认数据类型时候int】 2、long类型的变量在定义的时候,当字面值超过int范围需要在字面值后加 L或l,建议 L
-
-
小数类型【浮点类型】:
类型 所占字节 取值范围 float【单精度】 4B 1.4 -45 — 3.402823538 double【双精度】 8B 4.9-324 — 1.7976931348623157308 -
注意事项:
1.小数类型的字面值常量默认类型是 double类型 2.float 类型变量在定义的时候,需要在字面值后加 F或f,建议F 3.double 类型的变量在定义的时候,可以在字面值后加 D或d,也可以不加. 4.浮点型存储的数据是不精确的数据,所以在运算过程中,其结果也是不精确的. 5、浮点类型的大小标准比整数类型的标准大【浮点的4个字节比整数类型的8个字节还要大】
-
-
字符类型:
类型 所占字节 取值范围 char 2B【和short一样大的】 0 — 65535 字符类型变量的赋值方式
-
(1) 通过 '' 形式赋值 案例: char c = 'A'; (2) 通过ASCII码表赋值 案例: char c = 65; 常用的ASCII码表值 'A' -- 65 'a' -- 97 '0' -- 48 (3) 通过unicode编码赋值 案例: char c = 'u0041'; 说明: unicode编码采用16进制的形式进行赋值
-
-
布尔类型:
| 类型 | 所占字节 | 取值范围 |
|---|---|---|
| boolean | 未知 | true / false |
| 类型 | 所占字节 | 取值范围 |
|---|---|---|
| boolean | 未知 | true / false |
-
| 类型 | 所占字节 | 取值范围 |
|---|---|---|
| boolean | 未知 | true / false |
-
- 类
- 数组
- 接口
- 枚举
- 注解
自动类型提升【隐形提升】:
定义: 指的就是小数据类型的数据存入大数据类型的变量中,可以自动提升。 格式: 目标数据类型 变量名 = 小数据类型的数据; 注意事项: boolean 类型存放的数据是true 和false 不是数字 ,不参与类型转换
强制类型转换【显性转换】:
定义: 把大数据类型的数据存入小数据类型的变量中,可能会造成数据精度丢失,需要人为处理。 格式: 目标数据类型 变量名 = (小数据类型)大数据类型的数据; 注意事项: 1. 强制类型转换可能会损失精度,得到错误的数据. 2. 小数类型强制转换为整数类型时,直接舍去小数部分,只保留整数部分.9、常量优化机制
编译时,整数常量的计算会直接算出结果,并且会自动判断该结果是否在该数据类型取值范围内
day03 运算符 一、算术运算符
符号 作用 基本用法 + 加 加法运算, 字符串拼接【+遇到了字符串】 - 减 减法运算 * 乘 乘法运算 / 除 除法运算, 得商 % 取模 取两数相除的余数 ++ 自增 变量值自增1 – 自减 变量值自减1
注意事项: java是一门严格区分数据类型的语言: 整数和整数运算,结果还是整数 小数和其他数字运算,结果为小数 1、运算过程中参与方有一方为小数结果就是小数 2、无论什么数据进行运算结果的数据类型向大的数据类型靠拢 3、byte short char 类型的数据在运算的时候自动提升为int,再去运算。
++,--运算:
1)++: 自增运算符,表示每次让变量值+1
2)--: 自减运算符,表示每次让变量值-1
3)使用方式:使用在变量名的前面或后面
【使用要求:只能使用于数字型`变量`【所有的数字 字符】】
4)使用场景:
单独使用
混合使用
5)使用原则:
单独使用:
符号使用在前或后结果一致。
混合使用:
符号用在前面:
先给变量自增或自减,然后参与其他运算【`先赋值,再运算`】
符号用在后面:
先参与其他运算,然后变量再自增或自减【`先运算,再赋值`】
二、赋值运算符
普通赋值:
= :把符号右边的数据存入左边的变量中
扩展赋值:
+= -= *= /= %=
1、使用变量的原始值和符号右侧的数据进行对应的算数运算
2、把得到的结果重新赋值给左边的变量中
【判断结果的数据类型和变量的数据类型是否一致,
一致:直接存入
不一致:
判断是否需要强制转换:
需要:自动的强制转换
不需要:直接存入
】
`扩展赋值运算符自带强制类型转换`
三、比较运算符
分类:
> 【大于】
>=【大于等于】
< 【小于】
<= 【小于等于】
== 【等于】
!= 【不等于】
注意事项:
`在Java中,一次只能比较两个数据`
> >= < <= :只能比较数据的大小【只能比较数字类型的数据】
== != :可以比大小以及内容【比较任意数据类型的数据】
四、逻辑运算符
概述:
java中用来表示两个表达式结果之间的逻辑关系【或与非等关系】的符号
表达式结果:必须为boolean类型值
分类:
或关系符号 【| ||】:有真则真 全假则假
与关系符号 【& &&】:有假则假 全真则真
非关系符号 【!】:表示数据的反面【取反】
异或关系符号 【^】:相同则加,不同则真
注意事项:
逻辑与& 逻辑非| :
涉及的两个表达式都会执行
短路与&& 短路或|| :
根据第一个表达式的执行结果绝对是否直接得到最终结果,第二个表达式不一定会执行。
`提示执行效率。`
五、三元运算符【三目运算符】
语法:
布尔表达式 ? 表达式1 : 表达式2; 【`一般表达式2和表达式3的结果的数据类型属于同一个体系`】
执行流程:
先执行布尔表达式得到其结果:
true:
执行表达式2得到结果作为整个三元运算符的结果值
false:
执行表达式3得到结果作为整个三元运算符的结果值
六、位移运算符
1、原码、反码、补码:
计算机底层用补码运算。
2、位运算符:
1.位运算概念: 位运算符主要按位对每个二进制位(bit)进行相关运算,其操作数和运算结果都是整数型.即只能对 byte,short,char,int,long 类型数据进行运算. 2.Java语言中位运算分为:位逻辑运算符和位移运算符两类.
符号 名称 基本用法 案例 & 与 按位进行与运算(AND) 4&5 结果4 | 或 按位进行或运算(OR) 4|5结果5 ~ 非(取反) 按位进行取反运算(NOT) ~4结果5 ^ 异或 按位进行异或运算(XOR) 4^5结果1 << 左位移 按位左移,数值扩大2的倍数 10<<1结果20 >> 右位移 按位右移,数值缩小2的倍数 10>>2结果2 >>> 无符号右移 只针对正数按位右移,数值缩小2的倍数 20>>1结果10
1.位移运算:操作数向某个方向(向左或向右)移动指定的二进制位数,运算效率高.
注意:只适用于整数运算
2.<<按位左移:补码按位左移,高位移出(舍弃),最低位补零,移动一位扩大二倍.
注意事项:
1、左移会造成最高位数据溢出,可能导致结果错误.
2、每移动一位正数数据本身扩大两倍,负数本身缩小2倍【整体*2】
3.>>按位右移:补码按位右移,最高位补符号位,低位移出(舍弃),移动一位缩小为原来的二分之一
注意事项:
1)正数右移得到结果和除法一致
2)负数右移得到结果和除法不一致,运算过程为将负数转换成对应的补码,右移,移动时高位补1,将移动后的补码结果转换成原码,得到最终结果
4.>>>无符号按位右移:补码按位右移,最高位补零,最终正数运算完成之后缩小为原来的二分之一.
注意事项:
1)负数不能无符号右移
2)正数无符号右移效率高于普通按位右移
结论:
1、位逻辑运算
| & ! ^ [0 表示 假 1 表示真]
2、位移运算
<< :适用于所有的整数
每次移动一位,数字 * 2
移动的位数过大 会发生高位溢出错误
>> :适用于所有的整数
每次移动一位,数字 / 2
移动的位数大于数字本身的位数得到的结果是唯一值:
正数:0 负数:-1
>>> :适用于所有的正整数
原则和右位移一样
`1、正数右移1位 数字本身缩小2倍 负数右移1位数字本身扩大2倍 【整体/2】
2、正数右移动位数超出数字本身的位数 最终值为0 负数最终为-1`
day04 1、键盘录入【java.util.Scanner】
使用步骤: 1、导包: import java.util.Scanner; 2、创建Scanner对象: Scanner sc = new Scanner(System.in); 3、调用功能: int num = sc.nextInt();2、随机数【java.util.Random】
1、功能:
nextInt():在int数据类型的范围内随机生成一个整数
nextInt(int num):在指定[0,num)范围内随机的生成一个整数
2、使用步骤:
1、导包:
import java.util.Random;
2、创建Scanner对象:
Random r = new Random();
3、调用功能:
int num = r.nextInt()
int num = r.nextInt(100);
3、注意事项:
若要生成取值范围为[n,m]的随机数,则:
int num = r.nextInt(x)+y;
其中,y为起始值n,而 x = m - n
3、流程控制语句
分类: 顺序结构语句:自上而下自左往右的执行的语句 java本身就是遵循这样的执行顺序 分支结构语句:判断语句【if语句】 选择语句【switch语句】 循环结构语句:for循环 while循环 do...while循环 死循环 嵌套循环1、分支结构之判断语句【if语句】
1、if语句:
语法格式:
if(判断的条件){代码段}
执行流程:
1、执行判断条件
true:执行花括号里面的代码段
false:直接结束判断语句
2、if...else语句:
语法格式:
if(判断条件){代码段1}else{代码段2}
执行流程:
判断条件是否成立:
true:
执行代码段1 执行完结束判断语句
false:
执行代码段2 执行完结束判断语句
3、多条件判断【if...else if... 语句】
语法格式:
if(条件1){代码段1}
else if(条件2){代码段2}
...
else if(条件n){代码段n}
else {所有条件都不成立要执行的代码段n+1}
执行流程:
判断条件1是否成立,成立则执行代码段1;
否则判断条件2是否成立,成立则执行代码段2;
...
否则判断条件n是否成立,成立测执行代码段n;
若所有条件都不成立,执行else{代码段}
2、分支结构值选择语句【switch语句】
语法格式:
switch(表达式){
case 常量1:
执行代码段1
break;
......
case 常量n:
执行代码段n
break;
default:
实际执行的开关值和case的开关值没有匹配要执行的代码;
break;
}
执行流程:
1、计算表达式的值
2、根据这个值和case项的常量自上而下逐一匹配
匹配成功:执行对应case项中的代码段,只有遇到break才会结束
匹配失败:
是否有default项:
有:执行default的代码段 遇到break 或 花括号结束选择语句
无:直接结束选择语句
注意事项:【面试题2】
1、小括号里表达式的值的数据类型有要求:
jdk5版本之前:只能传入 byte short int char
jdk5版本时:增加 枚举类型 【enum】
jdk7版本的时:增加了 字符串类型 【String】
2、每个case项中的break标准格式中不能省略 ,省略了会发生case的穿透【继续执行相邻的下一个case项】
3、case项的书写没有顺序要求
4、default项:
1、可以写在任意case项的位置但是永远都是最后一个来匹配
2、如果default项没有写在最后面break一定不要省略
3、建议default项写在最后【break此时可以省略】
3、循环结构之for循环
语法格式:
for(初始化语句;循环条件;初始化变量改变){循环体}
执行流程【面试题3】:
1、执行初始化语句【只会执行一次】
2、判断循环条件是否成立
不成立:3、结束循环语句
成立:
3、执行循环体
4、执行初始化变量的改变获取下一次的开端值
5、回归第2步重新判断循环条件是否成立
如果每次回归条件都成立 就会形成 2 3 4 5 步的闭环执行达到了循环体重复执行的效果一直到循环条件不成立 跳出闭环结束循环语句
4、循环结构值while循环
语法格式:
初始化语句;
while(循环条件){循环体;初始化变量的改变}
执行流程:
1、执行初始化语句;
2、判断循环条件是否成立
不成立:直接结束while循环语句
成立:
直接执行花括号的代码段【循环体+初始化变量的改变】回归第二步重新判断循环条件是否成立,如果每次回归条 件一直成立,形成了 2 3 步往复执行达到了重复做事情的效果,一直到条件不成立跳出循环语句
5、循环结构之do…while循环
语法格式:
初始化语句;
do{循环体;初始化变量的改变}while(循环条件)
执行流程:
1、先执行初始化语句
2、执行do后面的花括号代码段
3、执行循环条件:
false :结束循环语句
true : 回归第2步重新执行花括号代码段 如果条件每次都成立 形成往复执行 一直到条件不成
立结束循环语句
特点:
`循环体至少会执行一次`
三种循环的对比:
区别:
1、格式不一样
2、for循环标准格式中初始化变量定义在循环内,这个变量属于for循环的作用域,随着for循环的结束和消失
while循环 和 do...while循环 的初始化变量定义循环的前面,变量的作用域比循环本身大,循环内外都可使用
3、一般实际开发的时候:【规范】
知道具体重复次数优先使用for循环
不知道具体循环次数优先使用while循环
6、循环跳转语句【break continue】
break : 打断 在循环中使用 结束整个循环语句 continue :继续 在循环中使用 跳过当前循环 继续执行后续的循环7、死循环、嵌套循环
死循环: 循环条件永远为真,循环体一直执行 嵌套循环: 循环体为另一个循环
#### 5、循环结构之do...while循环
```js
语法格式:
初始化语句;
do{循环体;初始化变量的改变}while(循环条件)
执行流程:
1、先执行初始化语句
2、执行do后面的花括号代码段
3、执行循环条件:
false :结束循环语句
true : 回归第2步重新执行花括号代码段 如果条件每次都成立 形成往复执行 一直到条件不成
立结束循环语句
特点:
`循环体至少会执行一次`
三种循环的对比:
区别:
1、格式不一样
2、for循环标准格式中初始化变量定义在循环内,这个变量属于for循环的作用域,随着for循环的结束和消失
while循环 和 do...while循环 的初始化变量定义循环的前面,变量的作用域比循环本身大,循环内外都可使用
3、一般实际开发的时候:【规范】
知道具体重复次数优先使用for循环
不知道具体循环次数优先使用while循环
6、循环跳转语句【break continue】
break : 打断 在循环中使用 结束整个循环语句 continue :继续 在循环中使用 跳过当前循环 继续执行后续的循环7、死循环、嵌套循环
死循环: 循环条件永远为真,循环体一直执行 嵌套循环: 循环体为另一个循环



