day1
IDEA常用快捷键
main: 快速写出一个main 方法/psvm/sout :写一个快速输出语句 Ctrl +D 快速复制倒下一行 Ctrl+Y 反撤销 Ctrl+x 删除当前行 Ctrl+Alt+L 快速格式化代码 Alt+Shift +上 下箭头 上下移动光标所在行 Shift +Enter 光标所在行的 任意位置换行 ctrl+/ ,ctrl+Shift+/ 对代码进行注释
注释
// 单行注释 /**/ 多行注释 /***/文本注释、文档注释 注释特点:1 影响程序的执行 2 注释不参与编译
JRE 和 JDK
JDK的操作文档 Java Development Kit 17 Documentation
JRE ,JDK和JVM的关系? JDK 包含 ( JRE 和开发工具) JRE 包含(JVM 和核心类库)
变量的定义与使用
1, 变量的定义格式 :数据类型 变量名 = 数据值; 总结:变量就是内存中的空间,内存存储着不断变化的数据。 变量是内存中的一块区域,用来记住一个数据 2,变量的注意事项 ① 变量要先申明,才能使用 ②什么类型的变量,只能存储什么类型的数据 ③变量存在访问范围,同一个范围内,多个变量的名字不能一样 ④变量定义时可以不给赋初始值,但是在使用时,变量里必须有值 3.定义float 和 long 变量的注意事项 定义float 类型变量的时候 :需要在数值后面加入f 的标识 可以大写 也可以小写 定义long 类型变量的时候:需要在数值后面既加入L 的标识符 尽量大写; 变量的作用域范围 4.变量有什么特点 变量中的数据可以被改变替换
什么是关键字
注意:关键是Java用的,不能用来作为:类型,变量名否则会报错!
标识符定义规则
基本要求 :由数字 ,字母,下划线(_) 和美元符($)组成 强制:不能以数字开头,不能是关键字,区分大小写
常见命名约定
小驼峰命名法: (方法 变量) 标识符是一个单词的时候,首字母小写 标识有多个单词组成的时候第一个单词首字母小写 其他单词首字母大写 大驼峰命名法:(类) 标识符是一个单词的时候,首字母大写 标识符有多个单词组成的时候,每个单词的首字母大写
Day2
二进制
计算机中最小的存储单位是字节 一个字节等于8个二进制位: 1B=8b Java程序中支持写二进制,八进制 十六进制的数据分别需要0B或者0b 0 0x或者0X开头
图片,字符,音频,视频在计算机中如何存储的
1.字符数据在计算机中是怎么存的? 字符存的是ascii码表中对应的数字的二进制形式。 字符’A’对应的数字是 65 字符’a’对应的数字是 97 字符’0’对应的数字是 48 2.图片和音视频等文件的数据是怎么存储的啊 也是采用二进制进行存储
计算机的数据单位
计算机最小的组成单元是:字节 1B=8b 在B的基础上,计算机发展出了KB、MB、GB、TB、…. 这些数据单位。 1B =8b 1kB = 1024B 1MB = 1024KB 1GB = 1024MB 1TB = 1024GB
数据类型:基本数据类型和引用数据类型两类:
基本数据类型又分为: 数值型和非数值型 数值型: 整数类型 :byte 1个字节 (取值范围 -128~127) short 2个字节 int 4个字节 (取值范围 -2的31次方到2的31次方 -1), long 8个字节 浮点数类型:float(单精度) 4个字节 double(双精度) 8个字节 字符类型:char 2个字节 布尔类型:boolean 1个字节 引用数据类型:类(class) 接口(interface) 数组([ ]) 字符串 String
自动类型转换的其他形式
1.为什么要进行类型转换 存在不同类型的变量赋值给其他类型的变量 2.什么是自动类型转换 类型范围小的变量 ,可以直接赋值给类型范围大的变量 byte -> short -> int ->long ->float -> double ^ | char 可以自动转换为int 和int 后面的数据类型 3.注意事项 表达式的最终结果类型由表达式中的最高类型决定 表达式中 byte short char 是直接转成int 类型参与运算的
强制类型转换成其他形式
1.什么是强制类型转换? 默认情况下,大范围类型的变量直接赋值给小范围变量会报错 可以强行将类型范围大的变量,数据赋值给类型范围小的变量 数据类型 变量 = (数据类型) 变量 ,数据 2.强制类型转换有那些需要注意的? 可能出现数据丢失 小数强制转换成整数是直接截断小数保留整数。
算符运算
1.运算符有哪些 + ,- ,* ,/,% 2./需要注意什么,为什么? 如果两个整数做除法 ,其结果一定是整数,因为最高类型是整数 3.+ 除了基本数学运算,还有那些功能 与字符串做+ 运算时会被当成链接符 其结果还是字符串 识别技巧:能算则算,不能算就在一起
自增自减运算符
注意:++ -- 只能操作变量 , 不能操作字面量 自增 ++ :放在某个变量前面或后面 ,对变量自身的值加1 自减 --: 放在某个变量前面或后面,对变量自身的值减1 1.作用 ,需要注意什么? ++ --:对当前变量值+1 -1 只能操作变量,不能操作字面变量 2.自增、自减运算符放在变量前后有区别吗? 如果单独使用放前放后是没有区别的。 非单独使用:在变量前 ,先进行变量自增/自减,再使用变量。 非单独使用:在变量后 ,先使用变量,再进行变量自增/自减。
赋值运算符
注意:扩展的赋值运算符隐含了强制类型转换 赋值运算符有: += -= *= /= %= (从右往左看) 作用 和特点: += 可以实现数据的累加,把别人的数据加给自己 扩展的赋值运算符自带强制类型转换。
关系运算符
注意:在Java中判断是否相等一定是“==” 千万不要把 “==“ 误写成”=“ > a>b 判断a是否大于b 成立返回true、不成立返回false >= a>=b 判断a是否大于或者等于b 成立返回true、不成立返回false < a<b 判断a是否小于b 成立返回true、不成立返回false <= a<=b 判断a是否小于或者等于b 成立返回true、不成立返回false == a==b 判断a是否等于b 成立返回true、不成立返回false != a != b 判断a是否不等于b 成立返回true、不成立返回false
逻辑运算符
注意:在Java中”&“ ,”|“ 无论左边fasle 还是true 右边都要执行 符号 叫法 例子 运算逻辑 & 逻辑与 2 > 1 & 3 > 2 多个条件必须都是true, 结果才是true; 有一个是false,结果就是false | 逻辑或 2 > 1 | 3 < 5 多个条件中只要有一个是true, 结果就是true; ! 逻辑非 ! (2 > 1) 就是取反:你真我假,你假我真。!true == false、!false == true ^ 逻辑异或 2 > 1 ^ 3 > 1 前后条件的结果相同,就直接返回false,前后条件的结果不同,才返回true 符号 叫法 例子 运算逻辑 && 短路与 2 > 10 && 3 > 2 判断结果与“&”一样,过程不同:左边为 false,右边则不执行。 || 短路或 2 > 1 | | 3 < 5 判断结果与“|”一样,过程不同:左边为 true, 右边则不执行。
注意:由于&& || ! 运算效率更高,在开发中用到的更多
三元运算符 和运算符的优先级
条件表达式? 值1 :值2; 运算符优先级是先从逻辑运算两边开始 ()的优先级高 , &&的优先级高于 ||
API文档
API是什么?API文档是什么? Application Programming Interface,应用程序编程接口:Java写好的程序,咱们可以直接调用。 Java提供的程序使用说明书。 Java程序中如何实现接收用户键盘输入的数据? 使用Java提供的Scanner来完成,步骤如下: 1、导包:import java.util.Scanner; 2、抄代码得到扫描器对象: Scanner sc = new Scanner(System.in) 3、抄代码等待接收用户输入的数据: int age = sc.nextInt(); String name = sc.next();
Day3
分支结构
if语句
if 语句第一种形式 ① if(条件表达式){ 代码块; } 如果如果前一条语句不能输出 ,则输入出下条语句 ②if(条件表达式){代码块;}else if{代码块;} ③if(条件表达式){代码块;}else if{代码块;} ... else if(){...} 作用有 :可以根据条件,选择执行某段程序 if分支写法有几种,特点是? 3种 1 ,是条件满足则执行 ,否则不执行 2 是条件满足则执行 ,不满足则执行下一个条件 3是条件满足则执行 ,不满足则执行下一个条件
witch语句
一 switch 分支 (是通过比较值来决定执行那条分支) 二 switch 分支执行流程 ① System.out.println("请输入密码:"); ②与哪个case后的值匹配为true就执行哪个case块的代码,遇到break就跳出switch分支。 ③如果全部case后的值与之匹配都是false,则执行default块的代码。 三 if switch 的比较 if在功能上远远强大于switch 当前条件是区间的时候,应该使用if 分支结构 当前条件是与一个一个的值比较,switch 分支更合适:格式更良好,代码性能更良好,优雅
switch 注意事项
①表达式类型只能是byte、short、int、char,JDK5开始支持枚举,JDK7开始支持String、不支持double、float、long。 ②case给出的值不允许重复,且只能是字面量,不能是变量。 ③正常使用switch的时候,不要忘记写break,否则会出现穿透现象。
switch的穿透可以解决的问题
存在多个case分支的代码是一样时,可以把代码写到一个case块,其他case块通过穿透性能,穿透到该case块即可,这样可以简化代码。
for循环
for 循环格式 for (初始化语句;循环条件;迭代语句){ 循环语句体(重复的带代码)} 执行流程:先执行初始语句 ,在执行循环条件,然后然后执行循环体 最后执行迭代语句 for循环的应用场景 需要重复执行的代码,都可以放在循环语句中
while循环
初始话语句 (while循环的格式) while(循环条件){ 循环体语句(被重复执行的代码) 迭代语句 } 注意:不知道循环多少次是使用while
总结:
for 和 whlie使用总结 其实while能做的for都能实现,for能做的while也都能实现,功能上无区别。 使用规范:如果一开始不知道循环次数的情况下,建议使用while循环解决更专业。一开始就知 道循环几次的情况下,使用for循环来解决更专业。
do ... while 循环
**先进行循环体 再进行判断 do{ 循环体语句; 迭代语句; }while(循环条件) ***特点:先执行,后判断
三种循环的区别
for 循环和whlie循环(先判断后执行) do...whlie(先执行后判断) for循环和whlie循环的执行流程是一模一样的,for能做的whlie也行 ,反之亦然 使用规范:如果已知循环次数建议使用for循环 ,如果不清楚多少次建议使用whlie 其他区别:for循环中,控制循环的变量只在循环中使用,whlie循环中, 控制循环的变量在循环后还可以执行
死循环
for ( ; ; ) { System.out.println("Hello World1"); } // 经典写法 while (true) { System.out.println("Hello World2"); } do { System.out.println("Hello World3"); } while (true); 注意:死循环的三种写法
循环嵌套
for(int i = 0; i < 3; i++) { for(int j = 0; j < 5; j++) { System.out.println("我爱你"); } } 循环嵌套的特点:外部循环每一次,内部循环会全部执行完成一轮
(重点)break 和Continue的区别
break :跳出挡前循环的执行 能用于switch 和循环 用于switch 是为了防止switch穿透 continue:跳出本次循环,执行下次循环 ,只能用于循环
Day4
数组(静态的数组定义格式)
数组完整的格式 数据类型[] 数组名 = new 数据类型[]{元素1,元素2 ,元素3… }; 简化格式 数据类型[] 数组名 = {元素1,元素2 ,元素3… }; 注意:定义数组的注意事项? 1.数组类型[]数组名 也可以写成 数组类型 数组名 []; 2.什么类型数组只能存放什么类型的数据 3.数组一旦定义完成 类型确定 长度固定 不可以发生改变 4.数组中既可以存储基本数据类型,也可以存储引用数据类型 数组是属于什么类型?数组变量名中存储的是什么? 引用数据类型 存储的是数组在内存中的地址信息
数组访问
1.如何访问数组的元素 数组名称[索引] 2.数组访问的长度 数组名称.lenght 3.数组的最大索引是 数组名.lenght-1 4.访问数组时 超过最大索引会报异常 异常信息是:java.lang.ArrayIndexOutOfBoundsException(数组下标越界或数组索引越界)
数组遍历
数组的遍历:就是将数组容器中的数据挨个取出 如何遍历数组 int[] ages = {18, 20, 25, 30}; for (int i = 0; i < ages.length; i++) { System.out.println(ages[i]); }
动态初始化数组
注意:动态初始化和静态初始化是两种不同的写法 动态数组初始化数组的写法格式和特点: 数据类型[]数组名 = new 数据类型[长度]; 1.动太初始数组后元素的默认值是? byte,short,int,char,long 类型数组元素默认值都是0 float,double 类型数组元素的默认值都是0.0 boolean类型数组的元素默认值是false,String类型数组的元素的默认值是null 2. 两种数组定义的方法各自适合的业务 动态初始化:适合开始不确定具体元素值,只知道元素个数的业务场景 静态初始化:适合一开始就知道要存入那些元素值的业务场景
数组在计算机中的执行原理
Java程序运行主要看jvm的那个几个区域 方法区(存放.class 文件的) 栈内存 堆内存
多个变量指向同一个数组的问题
多个数组变量,指向同一个数组对象的原因是什么?需要注意什么? 多个数组变量中存储的是同一个数组对象的地址。 多个变量修改的都是同一个数组对象中的数据。 如果某个数组变量中存储的null,代表什么意思?需要注意什么? 代表这个数组变量没有指向数组对象。 可以输出这个变量,但是不能用这个数组变量去访问数据或者访问数组长度, 会报空指针异常:NullPointerException。
数组常见案例
数组求最值
public class ZuiDaZhi { public static void main(String[] args) { int[] faceScores = {15, 9000, 10000, 20000, 9500, -5}; int faceMax = faceScores[0]; for (int i = 1; i < faceScores.length; i++) { if (faceScores[i]>faceMax){ faceMax =faceScores [i]; } } System.out.println(faceMax); } }
Day5
方法定义,调用
方法是什么? 方法是一种语法结构,它可以把一段代码一个功能,以便重的调 定义方法的格式 修饰符 返回值类型 方法名 (形参列表){ 方法体代码 return 返回值; } 方法要执行 必须 进行调用 以定义的方法名进行调用 使用方法有什么好处 提高代码的复用性,提高开发效率使程序逻辑跟清晰 注意事项: 如果方法不需要返回数据,返回值类型必须声明void (无返回值声明) 方法如果不需要接收数据,则不需要定义形参,且调用方法时也可以传数据给方法了 没有参数 且没有返回值类型(void)声明的方法,称为无参数,无返回值的方法依次类推 如果方法不需要接受数据处理,不需要返回数据应该怎们办? 方法不需要接受数据,则形参列表可以不写,方法不需要返回数据则声明返回值类型为void 方法没有声明具体的返回值类型(void)内部不能使用return返回数据 方法如果没有形参列表,掉用的时候不能传入参数值,否则报错
方法使用时的常见问题
方法在类中的位置放前放后无所谓。 方法与方法之间是平级关系,不能嵌套定义。 方法的返回值类型写void(无返回声明)时,方法内不能使用return返回数据, 如果方法的返回值类型写了具体类型,方法内部则必须使用return返回对应类型的数据。 return语句的下面,不能编写代码,属于无效的代码,执行不到这儿。 方法不调用就不会执行, 调用方法时,传给方法的数据,必须严格匹配方法的参数情况。 (重点)调用有返回值的方法,有3种方式: 1、可以定义变量接收结果 2、或者直接输出调用, 3、甚至直接调用; 调用无返回值的方法,只有1种方式:1、只能直接调用。
方法在栈内调用的执行原理
1。方法的运行区域在哪里? 栈内存 2.栈有什么特点方法为什么要在栈内运行自己 先进后出 保证一个方法调用完另一个方法后,可以继续执行当前方法中的代码
Java的参数传递机制
基本类型的参数传递 基本类型和引用类型的参数在传递的时候有什么不同 都是值传递 基本类型的参数传输存储的数据值 引用类型的参数传输存储地址值 引用类型的参数传递 方法需要声明返回值类型:int 方法需要定义形参列表
(重点)方法重载
什么是方法重载 1.一个类中,多个方法的名称相同,但他们形参列表不同 特点 一个类中,只要一些方法名称相同,形参列表不同,那么它们就是方法重载 其他,的都不需要管 形参列表不同指得是:形参的个数,类型,顺序不同,不关心形参的名称 重载的场景应用 开发中为一类业务处理,处理一类业务提供多种解决方式时使用重载方法来设计 在这种场景下使用方法重载的好处? 对于相似功能的业务场景使用方法重载可读性好 方法名称相同提示是同一类型的共能,通过形参不同实现功能差异化的选择 是一种专业的代码设计
return关键字(比较重要)
return:跳出并立即结束所在方法的执行 breank和continue的区别? breank:跳出并结束当前所在循环的执行 continue:结束当前循环,执行下一次循环
Day6
面向对象编程
1.面向对象编程有什么好处? 凡事找对象的编程套路,更加符合人的思维 2.对象是什么?如何得到? public class 类名{ 1。变量用来说明对象可以处理什么数据 2.方法描述对象有什么功能, 也以对数据进行处理 } 3.面向对象编程是? 万物皆对象
类在对象的执行
对象在计算机中的执行原理是这么回事? Student s1 = new Student(); 每次new Student(),就是在堆内存中开辟一块内存区域代表一个学生对象。 s1变量里面记住的是学生对象的地址。
引用类型如何识别
Student s1 =new Student(); s1 变量中存储的对象的地址,因此s1被称为引用类型的变量
类和对象的注意事项
类名建议英文单词,首字母大写,满足驼峰模式 且要有意义 类中定义的变量也称为成员变量(对象属性)类中定义的方法也称成员方法 成员变量本身存在默认值,同学们在定义成员变量时一般来说不需要赋初始值(没有意义) 一个代码文件中,可以写多个class类,但只能一个用public修饰,且public修饰的类名必须成为代码文件名。 对象与对象之间的数据不会相互影响,但多个变量指向同一个对象时就会相互影响了。 如果某个对象没有一个变量引用它,则该对象无法被操作了,该对象会成为所谓的垃圾对象。
this(重要)
什么this?
this就是一个变量,可以用在方法中,来拿到当前的对对象
this的应用场景?
解决:局部变量和成员变量的命名冲突
this是关键字(重点)
1.this关键是什么? this是一个变量。可以用在方法中。用来拿当前对象, 那个方法调用,this就指向哪个对象,也就是拿到当前对象。 2.this关键字在实际开发中常用来干什么? 用来解决对象成员变量与方法内部变量的名称一样时,导致访问冲突问题。
构造器
构造器的格式
构造器是什么样子? 修饰符 类名(形参列表){ } 作用是 :一种特殊的方法,定义在类中的,用来初始化一个类对象,并返回对象地址 构造器特点和分类 无参数构造器(默认存在的):初始化对象时,成员变量的数据均采用默认值 有参构造器:在初始化对象的时候,同时可以接收参数为对象进行赋值
构造器的注意事项
构造器的名字必须和类名保持一致 定义构造器的时候一定不能写返回值类型,void也不行 如何定义出来,默认值就自带了午餐构造器,写不写都有 一旦定义了有参数构造器,那么无参数构造器就没有了,如果还想有参构造器,此时就需要自己动手写一个 无参构造器
封装
1.什么是封装 就是用类设计对象处理某一个事物的数据时,把要处理的数据, 以及处理这些数据的方法,设计到一个对象中去。 面向对象的三大特征:封装、继承、多态。 2、封装的设计规范是什么样的? 合理隐藏,合理暴露。 3、代码层面如何做到合理隐藏、合理暴露? 合理隐藏:一般建议对成员变量使用private(私有、隐藏)关键字进行修饰。 合理暴露:必要的时候为成员变量提供public修饰的的getter、setter方法暴露其取值和赋值。 成员方法根据是否需要在当前类外面访问决定使用private隐藏还是使用public对外暴露。
实体JavaBean
1.什么是实体类?有什么特点 成员变量必须私有,且要为他们提供get,set 方法,根据需求提供无参构造器和有参构造器 仅仅只是一个用来保存数据的Java类 可以用它创建对象,保存某个事物的数据
Day7
常用的API
API就是别人写好的程序 ,直接调用就可以解决问题
什么是包?
包是用来分门别类的管理各种不同程序的。类似于文件,建包有利于程序的管理和维护 建包的语法格式 package com.it.javabean; public class Student{ } 自己程序中调用其他包下的程序的注意事项 1.如果当前程序中,要调用自己所在包下的其他程序,可以直接调用。(同一个包下的类,互相可以直接调用) 2.如果当前程序中,要调用其他包下的程序,则必须在当前程序中导包, 才可以访问!导包格式:import 包名.类名; 3.如果当前程序中,要调用Java提供的程序, 也需要先导包才可以使用;但是Java.lang包下的程序是不需要我们导包的,可以直接使用。 4.如果当前程序中,要调用多个不同包下的程序,而这些程序名正好一样, 此时默认只能导入一个程序,另一个程序必须带包名访问。
String
1.String 是什么,可以做什么? 代表字符串,可以用来创建对象封装字符串数据,并对其进行处理 2.String类型创建对象封装字符串数据的方式有? 方式一:直接使用引用 方式二:new String 类,调用构造器初始字符串对象
String 中常用的方法
字符串内容比较
(重点)equalsIgnoreCase,equals 和 == 的区别?
equalsIgnoreCase :忽略字符串大小写 equals : 比较的是字符串内容 是否相同 == :比较的是基本数据类型的值 是否相等
String类对象在内存中的存储原理
两种创建字符串的方式产生的对象分别在 只要是以 方式写出的字符串对象,会存储到字符串常量池中,且相同内容的字符串只存储一份 但通过new 方式创建字符串对象 每new一次会产生一个新的对象放在堆内存中
String类对象的特点:不可变性
1.String类产生的对象有一个重要特性 “不可变性” 2.String是不可变字符串的原因 String 变量每次的修改其实都是产生指向了新的字符串对象 原来的字符串都是没有改变的 ,所以称为不可变字符串
ArrayList
集合概述,ArrayList 是
1、集合是什么? 集合与数组类似,也是一种容器,可以用来存储数据 2、数组和集合的元素存储数据的类型和个数有什么特点? 数组定义后类型确定,长度固定 集合类型可以不固定,大小是可变的 3、数组和集合适合的场景 ? 数组适合做数据个数和类型确定的场景 集合适合做数据个数不确定,且要做增删元素的场景
ArrayList集合快速入门
ArrayList类如何创建集合对象的,如何添加元素 ArrayList list = new ArrayList<>(); 往ArrayList中添加数据 ? public boolean add(E e) (直接添加) public void add(int index,E element)(索引添加)
ArrayList 对于泛型的支持
使用泛型:<数据类型> 创建集合对象都应该使用泛型。 ArrayList<String> list1 = new ArrayList<>(); 注意: 泛型只能支持引用数据类型,不支持基本数据类型。
ArrayList常用API,遍历
ArrayList集合案例:遍历并删除元素
从集合中遍历元素,并筛选出元素删除它,应该如何操作才能不出bug? 方式一:每次删除一个数据后,索引-1。 方式二:从集合后面遍历然后删除,可以避免漏掉元素。