第一节:Java语言概述

一、java背景知识

1、Java是美国sun公司(Stanford University Network)在1995年推出的一门计算机高级编程语言

2、Java早期被称为Oak(橡树),后期改名为Java。

3、Java之父:詹姆斯·高斯林(James Gosling)

4、2009年sun公司被Oracle(甲骨文)公司收购

二、为什么用Java

1、世界上最流行的编程语言之一,在国内使用最为广泛的编程语言

2、可移植性、安全可靠、性能较好

3、开发社区最完善,功能最丰富

三、JAVA能干什么

1、桌面应用开发

2、企业级应用开发

3、移动应用开发

4、服务器系统

5、大数据开发

6、游戏开发

四、JAVA技术体系
技术体系说明
Java SE:标准版Java技术的核心和基础
Java EE:企业版企业级应用开发的一套解决方案
Java ME:小型版针对移动设备应用的解决方案

第二节:Java环境搭建

一、如何使用Java

1、Java语言的产品是JDK(Java Development Kit:Java开发者工具包),必须安装JDK才能使用Java语言。JDK产品的发展使。

2、JDK产品的发展史
在这里插入图片描述

  • LTS(long-term support):长期支持版

3、如何获取JDK

4、验证JDK安装成功的方式

查询JDK的版本号

  • 在命令行中输入
java -version
javac -version

查看版本,如果版本提示与自己安装的版本号一致,则代表安装成功。

5、java和javac介绍

  • java是执行工具

  • javac是编译工具

  • 将来我们写好的java程序都是高级语言,计算机底层是不能识别这些语言的。

  • 必须先通过javac编译工具进行翻译,然后再通过java执行工具执行才可以驱动机器干活

5、补充
常用命令说明
盘符:切换到某个盘下
dir查看当前路径下的文件信息
cd进入单级目录:cd 目录名
进入多级目录:cd 路径
回退到上一级目录:cd …
回退到盘符根目录:cd \
cls清屏

第三节:Java入门程序

一、Java程序的开发的三个步骤

1、编写代码:源代码文件(.java)

2、编译代码:字节码文件(.class)

3、运行代码

注意事项:
  • 第一个Java程序建议使用记事本写
  • 建议代码文件名全英文,首字母大写,满足驼峰模式,源文件后缀名必须是.java
二、编写代码:

1、第一个程序的代码如下:

public class HelloWord{//HelloWord是类名
    public static void main(String[] args){
        System.out.println("Hello Word");//打印Hello Word
    }
}

注意:

  • 文件名称必须与代码中的类名称一致
  • 保存文件:ctrl+s
三、编译代码,运行代码

1、编译:javac 文件名.java

//编译上述文件
javac HelloWord.java

2、运行:java 类名

//运行上述代码
java HelloWord

注意:在源代码根目录下执行dom命令

四、HelloWord案例常见错误

1、Windows的文件扩展名没有勾选

2、代码写了,但是忘记保存了

3、文件名和类名不一致。

4、大小写错误,单词拼写错误,存在中文符号,找不到main方法。

5、括号不配对。

6、编译或执行工具使用不当。

一个什么错都犯过的程序员,才是真正的程序员!

第四节:Java程序的执行原理

一、机器语言长什么样子?

1、机器语言就是01代码

2、计算机底层都是硬件电路,可以通过不通电和通电,表示0、1。

3、使用机器语言编程来实现呼吸灯效果(图)
在这里插入图片描述

4、最早期的程序员通过机器语言编程的形式

二、编程语言发展历程
  • 机器语言
  • 汇编语言
  • 高级语言
三、为什么学习高级编程语言

1、更简单:使用接近人类自己的语言书写,翻译器再将其翻译成计算机能理解的机器指令

四、BUG

1、原意是臭虫或者虫子,现在用来指代在电脑系统或者程序中隐藏的一些问题或者漏洞。

2、修复漏洞就叫debug

3、bug的创始人:格蕾丝.赫伯

第五节:JDK的组成、跨平台原理

一、JDK的组成
  • JVM(Java Virtual Machine):Java虚拟机,真正运行]ava程序的地方。
  • 核心类库:Java自己写好的程序,给程序员自己的程序调用的。
  • JRE (Java Runtime Environment):Java的运行环境。
  • JDK (Java Development Kit):Java开发工具包(包括上面所有)。
二、Java的跨平台、工作原来(图)

在这里插入图片描述

  • 一次编译,处处可用
  • 我们的程序只需要开发一次,就可以在各种安装了JVM的系统平台上运行。

第六节:JDK安装后环境变量的配置

一、Path环境变量

​ Path环境变量用于记住程序路径,方便在命令行窗口的任意目录启动程序。

二、Path环境变量的原理

​ 当我们在Pth中配置某个程序路径后,启动命令行窗口启动程时,是如何去找该程序的。

三、为java、javac配置Path的注意事项

1、命令行窗口的任意目录可以使用javac和java,是不是也需要为其配置Path环境变量呢?

四、为java、javaci配置Path的注意事项
  • 目前较新的DK安装时会自动配置javac、java程序的路径到Path环境变量中去,因此,javac、java可以直接使用。
  • 注意:以前的老版本的JDK在安装的是没有自动配置Path环境变量的,此时必需要自己配置Path环境变量。
五、重新配置了环境变量后,必须检测是否配置成功
  • 打开命令行窗口,输入javac -version及java -version分别看版本提示。
六、配置Java_home环境变量
  • JAVA_HOME:告诉操作系统JDK安装在了哪个位置(将来其他技术要通过这个环境变量找到JDK)
  • 注意:较新版本的DK只是自动配置了Path,没有自动配置JAVA_HOME。

第七节:IDEA开发工具的使用

一、之前的开发工具
1、文本编辑工具

​ 记事本、UltraEdit、EditPlus、TextPad、NotePad++、sublime,

2、存在的问题

​ 编写代码时没有错误提醒、没有智能提示、需要自己进行编译、执行。功能不够强大。

二、集成开发环境(IDE,Integrated Development Environment)

1、把代码编写,编译,执行等多种功能综合到一起的开发工具,可以进行代码智能提示,错误提醒,项目管理等等。

2、常见Java的IDE工具有:Eclipse、MyEclipse、IntelliJ IDEA、Jbuilder、NetBeans等。

三、IntelliJ IDEA开发工具

1、IntelliJ IDEA一般简称IDEA,是Java编程语言开发的集成环境,在业界被公认为最好的java开发工具。

2、IDEA在代码错误提醒,智能代码补全等多方面表现的都非常优秀,是]ava开发企业级首选工具。

四、IDEA下载

下载:https://www.jetbrains.com/idea/

安装:傻瓜式安装,建议修改安装路径(不要安装在有空格和中文的路径下)。

五、IDEA项目结构介绍

在这里插入图片描述

  • project(项目、工程)
  • module(模块)
  • package(包)
  • class(类)

结论:这些结构的划分,是为了方便管理项目技术和代码文件的

六、使用步骤
  1. 创建Project空工程
  2. 创建Module模块
  3. 创建Package包
  4. 创建class类
  5. 在类中编写代码
  6. 完成编译运行
七、idea中设置主题、字体

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gKXS0nQK-1684550528638)(./\img\idea中设置主题、字体.png)]

八、idea常用快捷键

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MXeKZq8Q-1684550528640)(.\img\idea常用快捷键.png)]

九、IDEA中其他操作
  • 删除类文件
  • 修改类名称
  • 修改模块
  • 导入模块
  • 删除模块
  • 打开工程
  • 关闭工程

第八节、Java基础语法

一、注释
1、什么是注释

​ 注释是写在程序中对代码进行解释说明的文字,方便自己和其他人查看,以便解释程序。

2、注释有哪些
  • 单行注释

    //注释内容
    
  • 多行注释

    /*
    	注释内容1
    	注释内容2
    */
    
  • 文档注释

    /**
    	注释内容
    	注释内容
    */
    
3、注释的特点

​ 注释不影响程序的执行,编译后的class文件已经没有注释了。

4、注释的快捷键

在这里插入图片描述

二、字面量

​ 计算机是用来处理数据的,字面量就是告诉程序员:数据在程序中的书写格式。

1、常用数据

在这里插入图片描述

2、常见的特殊值的书写格式
  • true
  • false
  • null
  • \n
  • \t
三、变量
1、什么是变量

​ 变量就是用来存储一个数据的内存区域(可以理解为盒子),里面存储的数据可以变化。

2、变量定义的格式

数据类型 变量名 = 初始值;

数据类型:强制限制盒子存储数据的形式。例如:int(整型)、double(小数类型)

变量名:取名字,首字母小写,有意义

初始值:存储的初始数据

3、修改变量中存储的值
double money = 6.0;
System.out.println(money);//6


money=money+4; System.out.println(money);//10

int age=21;
System.out.println(age);

age=18;
System.out.println(age);
4、定义变量需要注意的几个问题
  • 变量要先声明在使用
  • 变量声明后,不能存储其他类型的数据
  • 变量的有效范围是从定义到“}”截止,且在同一个范围内不能定义2个同名的变量
  • 变量定义的时候可以没有初始值,但是使用的时候必须给初始值
5、变量在计算机的底层原理
(1)二进制

只有0、1,按照逢2进1的方式表示数据

(2)十进制转二进制的算法

除二取余法

(3)计算机中的数据的最小单位
  • 最小保存的单元是:使用8个二进制位为一组,来保存数据,我们称之为一个字节(Byte,简称B)
  • 其中每个二进制位称之为一位(bit,简称b),1Byte=8bit简写1B=8b
(4)其他数据形式是如何存储的
  • 字符在计算机中是如何存储的

    ​ ASCII编码表:即美国信息交换标准编码,规定了现代英语、数字字符、和其他西欧字符对应的数字编号。
    在这里插入图片描述

    ​ 字符存的是ASCII码表中对应的数字二进制形式。

    ​ 字符’A’对应的数字是65

    ​ 字符’a’对应的数字是97

    ​ 字符’0’对应的数字是48

  • 图片数据-彩色图

    • 图片就是无数个像素点组成的
    • 每个像素点的数据:用0~255*255*255表示其颜色
  • 声音数据
    在这里插入图片描述

6、多学几招
(1)十进制转二进制的算法
  • 十进制数转二进制数:除二取余法
  • 二进制数转十进制数:按位展开分权相加
(2)八进制、十六进制介绍
  • 为了便于观察和表示二进制,退出了八进制和十六进制
  • 每3位二进制作为一个单元,最小数是0,最大数是7,共8个数字,这就是八进制
  • 每4位二进制作为一个单元,最小数是0,最大数是15,共16个数字,依次用:0~9 ABCDEF代表就是十六进制。
(3)注意:

​ Java程序中支持书写二进制、八进制、十六进制的数据,分别需要以0B或者0b、0、0X或者0x开头。

(4)计算机的数据单位
  • 计算机最小的组成单元是:字节,1B=8b。
  • 在B的基础上,计算机发展出了KB、MB、GB、TB、.这些数据单位。
    • 1B=8b
    • 1KB=1024B
    • 1MB=1024KB
    • 1GB=1024MB
    • 1TB=1024GB
四、数据类型
1、数据类型的作用

数据类型就是约束变量存储数据的形式

2、数据类型的分类
  • 引用数据类型(除了基本数据类型之外的,如String,其他的后面学习)

  • 基本数据类型:4大类8种
    在这里插入图片描述

注意:

  • 随便写的整数是int类型,加上L/l就是long类型
  • 小数字面值默认是double类型,加上F/f就是float类型
五、关键字、标志符
1、关键字
  • Java自己保留的一些单词,作为特殊功能的,例如:public、class、byte、short、int、long、double.…
  • 我们不能用来作为类名或者是变量名称,否则报错
  • 注意:关键字很多,不用刻意去记
    在这里插入图片描述
2、标识符

​ 标识符就是由一些字符、符号组合起来的名称,用于给类、方法、变量等起名字的规矩

(1)标识符的要求
  • 基本要求:由数字、字母、下划线(_)和美元符($)等组成
  • 强制要求:不能以数字开头,不能是关键字、区分大小写
(2)命名指导规范
  • 变量名称:满足标识符规则,建议全英文、有意义、首字母小写、满足“驼峰模式”。
  • 类名称:满足标识符规则,建议全英文、有意义、首字母大写、满足“驼峰模式”。

第九节:类型转换

一、自动类型转换
1、什么是自动类型转换,为什么要学习类型转换?
  • 类型范围小的变量,可以直接赋值给类型大的变量。
  • 存在不同类型的变量赋值给其他类型的变量
2、自动类型转换的底层原理

在这里插入图片描述

3、自动类型转换的其他形式

在这里插入图片描述

二、表达式的自动类型转换
1、表达式的自动类型转换

在表达式中,小范围类型的变量会自动转换成当前较大范围的类型在运算。

在这里插入图片描述

注意事项

  • 表达式的最终结果类型由表达式中的最高类型决定。
  • 在表达式中,byte、short、char是直接转换成int类型参与运算的。
三、强制类型转换

​ 类型范围大的数据或者变量,不能直接赋值给类型范围小的变量,会报错。

1、强制类型转换

​ 可以强行将类型范围大的变量、数据赋值给类型小的变量
在这里插入图片描述

2、强制类型转换底层原理

在这里插入图片描述

注意事项

  • 强制类型转换可能造成数据(丢失)溢出。
  • 浮点型强制转换成整型,直接丢掉小数部分,保留整数部分返回。

第十节、运算符

一、基本算数运算符
1、运算符

对字面量或者变量进行操作的符号

2、数字运算符
符号作用说明
+参考小学数学一年级
-参考小学数学一年级
*参考小学数学二年级,与“✖”相同
/与“➗”相同,注意:在Java中两个整数相除结果还是整数。因为最高类型是整数
%取余获取的是两个数据做除法的余数
二、+符号做连接符
1、“+”做连接符

​ “+”符号与字符串运算的时候是用作连接符的,其结果依然是一个字符串

独门秘籍:能算则算,不能算就在一起(计算机很聪明)

三、自增自减运算符
1、自增自减运算符
符号作用说明
++自增变量自身的值加1
自减变量自身的值减1

注意:

  • ++和–既可以放在变量的后边,也可以放在变量的前边
  • ++、–只能操作变量,不能操作字面量
2、自增自减的使用注意事项
  • 如果单独使用放在前后没有区别

  • ++、–如果不是单独使用(如在表达式中、或者同时有其他操作),放在变量前后会存才明显区别

    • 放在变量前面,先对变量进行+1、-1,再拿变量的值进行运算

      int a = 10;
      int rs = ++a;
      
    • 放在变量后面,先拿变量的值进行运算,再对变量的值进行+1、-1

      int b= 10;
      int rs = b++;
      
四、赋值运算符
1、基本赋值运算符
  • 就是“=”
int a = 10;//先看“=”右边,把数据10赋值给左边变量a存储
2、扩展赋值运算符
符号作用说明
+=加后赋值a+=b等价于a = (a的数据类型)(a+b);将a+b的值给a
-=减后赋值a-=b等价于a = (a的数据类型)(a-b);将a-b的值给a
*=乘后赋值a*=b等价于a = (a的数据类型)(a*b);将a*b的值给a
/=除后赋值a/=b等价于a = (a的数据类型)(a/b);将a/b的商给a
%=取余后赋值a%=等价于a = (a的数据类型)(a%b);将a%b的值给a

注意:扩展的赋值运算符隐含了强制类型转换

五、关系运算符
1、关系运算符

是对数据进行条件判断的符号,最终会返回一个比较的布尔值(false 、true)

在这里插入图片描述

**注意:**在做相等判断时,千万不要把==误写成=

六、逻辑运算符
1、逻辑运算符概念

可以把多个条件的布尔结果放在一起,最终返回一个布尔结果

在这里插入图片描述

2、短路逻辑运算符

在这里插入图片描述

**注意:**逻辑与“&”、逻辑或“ | ”:无论左边是false还是true,右边都要执行

七、三元运算符
1、三元运算符介绍
  • 格式:

    条件表达式?值1:值2
    
  • 执行流程:首先计算关系表达式的值,如果为true,返回值1,如果为false,返回值2

八、运算符优先级
1、运算符优先级

在表达式中,哪个运算符先执行后执行是要看优先级的,例如“*、/”的优先级高于“+、-”。
在这里插入图片描述

九、案例知识:键盘录入技术
1、需求:

请完成Java程序与用户交互,比如录入用户输入名称、年龄,怎么办?

2、API(Application Programming Interface,应用程序编程接口)
  • Java写好的程序(功能代码),咱们可以直接调用
  • Oracle也为Java写好的程序提供了相应的API文档(技术使用说明书)
3、下载API文档

https://www.oracle.com/java/technologies/downloads/#jdk19-windows

4、键盘录入功能实现的三个步骤:
  • 导包:告诉程序去JDK的那个包中找扫描器技术
  • 写一行代码代表得到键盘扫描对象
  • 等待用户输入数据

注意:

  • System、String在JDK中的Java.lang包下
  • lang包不需要我们导包,是默认的包

第十节、顺序结构(程序默认)

​ Java提供了一些流程控制语句,来控制程序的执行流程

​ 如果你没有写其他的结构,按照代码的先后顺序,依次执行程序中大多数的代码是这样执行的。

在这里插入图片描述

第十一节、分支结构

一、if分支结构
1、if分支

​ 根据判定的结果(真或假)决定执行某个分支的代码

2、if分支有三种格式
  • 格式1

    if(条件表达式){
    	语句体;
    }
    
  • 格式2

    if(条件表达式){
    	语句体1;
    }else{
    	语句体2;
    }
    
  • 格式3

    if(条件表达式1){
    	语句体1;
    }else if(条件表达式2){
    	语句体2;
    }else if(条件表达式3){
    	语句体3;
    }
    ...
    else{
    	语句体n+1;
    }
    
二、switch分支
1、swutch分支

​ 也是匹配条件去执行分支,适合做值匹配的分支,结构清晰,格式良好

2、格式
switch(表达式){
	case 值1:
		执行代码...;
		bresk;
	case 值2:
		执行代码...;
		bresk;
	...
	case 值n-1:
		执行代码...;
		bresk;
	default:
		执行代码n;
}
3、执行流程
  • 先执行表达式的值,拿着这个值与case后的值进行匹配
  • 匹配哪个case的值为true就执行哪个case,遇到break就跳出switch分支
  • 如果case后的值都不匹配则执行defauli代码
4、if、switch分支各自适合做什么业务场景
  • if其实在功能上远远强大于switch
  • if适合做区间匹配
  • switch适合做值匹配、代码优雅
5、switch分支注意事项
  • 表达式类型只能是byte、short、int、char,JDK5开始支持枚举,JDK7开始支持String、不支持double、float、long
  • case给出的值不允许重复,且只能是字面量,不能是变量
  • 不要忘记写break,否则会出现穿透现象
6、switch穿透性

​ 如果代码执行到没有写break的case模块,执行完后将直接进入下一个case块执行代码(而且不会进行任何匹配),直到遇到break才跳出分支,这是switch的穿透性

​ 存在多个case分支的功能代码是一样是,可以用穿透性把流程集中到同一处处理,这样可以简化代码。

第十二节、循环结构

一、for循环
1、for循环

​ 控制一段代码反复执行很多次

2、格式
for(初始化语句;循环条件;迭代语句){
	循环体语句(重复执行的代码);
}

在这里插入图片描述

二、while循环

1、while循环格式与执行流程

初始化语句;
while(循环条件){
	循环体语句(被重复执行的代码)
	迭代语句;
}

在这里插入图片描述

2、什么时候用for循环,什么时候用while循环

  • 功能上是完全一样的,for能解决的while也能解决,反之亦然
  • 使用规范是:知道循环几次使用for;不知道循环几次建议使用while。
三、do-while循环
1、do-while循环
  • 先执行再判断循环条件
  • do-while循环的特点:一定会先执行一次循环。

在这里插入图片描述

2、格式
初始化语句
do{
	循环体语句;
	迭代语句;
}while(循环条件);
四、三种循环的区别
  • for循环和while循环(先判断后执行)
  • do…while(第一次先执行后判断)
for和while的区别
  • for循环和while循环的执行流程是一模一样的
  • 如果已知循环次数建议使用for循环,如果不清楚要循环多少次建议使用while循环。
  • fo循环中,控制循环的变量只在循环中可以使用。While循环中,控制循环的变量在循环后还可以继续使用。
五、死循环

​ 一直循环的执行下去,如果没有干预不会停下来。

1、写法

在这里插入图片描述

六、嵌套循环

循环中又包含循环

1、嵌套循环的特点

外部循环每执行一次,内部循环全部执行完一次。

七、跳转关键字:break、continue
1、跳转控制语句介绍
  • break

    跳出并结束当前所在循环的执行

  • continue

    用于跳出当前循环的当次执行,进入下一次循环

2、注意事项
  • break

    只能用于结束所在循环,或者结束所在switch分支执行

  • continue

    只能在循环中使用

八、案例技术:随机数Random类
1、 Random随机数技术

作用:用于在程序中获取随机数的技术

2、使用步骤

(1)导包:告诉程序去JDK的那个包中找随机数技术

(2)写一行代码代表的到随机数对象

(3)调用随机数的功能获取0-9的随机数

注意:

nextInt功能只能生成:0至n-1之间的随机数,不包含n。

3、Random生成随机数的特点
  • nextInt(n)功能只能生成:0-(n-1)之间的随机数。
4、Random生成区间随机数的技巧:减加法
  • 例如:要生成1-10之间的随机数,程序怎么实现?

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nOj5hN62-1684550528660)(.\img\生成随机数的减加法.png)]

5、生成指定区间的方法
//导包
import java.util.Random;

第十三节、数组

​ 数组就是用来存储一批同种类型数据的内存区域(可以理解成容器)。

例如:
在这里插入图片描述

数组适合做一批同样种类数据的存储

一、数组的定义
1、静态初始化数组
  • 定义数组的时候直接给数组赋值

  • 静态初始化数组的格式

在这里插入图片描述

  • 数组的基本原理

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u7S0pPdL-1684550528663)(.\img\数组的基本原理.png)]

    ==注意:==数组变量名中存储的是数组在内存中的地址,数组是引用类型。

  • 数组的访问

在这里插入图片描述

  • 数组的长度属性:length
    //获取数组的长度(就是数组元素的个数)
    System.out.println(arr.length);
    

    数组的最大索引:数组名.length-1(前提:元素个数大于0)

  • 数组的几个注意事项
    • “数据类型[] 数组名” 也可以写成 “数据类型 数组名[]”。
    • 什么类型的数组存放什么类型的数据,否则报错
    • 数组一旦定义出来,程序执行的过程中,长度、类型就固定了。
2、动态初始化数组

​ 定义数组的时候只确定元素的类型和数组的长度,之后再存入具体数据

  • 数组的动态初始化格式

在这里插入图片描述

  • 两种数组的定义有什么区别
    • 当前已经知道存入的元素值,用静态初始化。
    • 当前还不知道要存入那些数据,用动态初始化。
  • 动态初始化数组的元素默认值
    • 元素默认值规则

在这里插入图片描述

  • 两种初始化的使用场景总结、注意事项
    • 动态初始化:只指定数组长度,后期赋值,适合开始知道数据的数量,但是不确定具体元素值的业务场景。
    • 开始就存入元素值,适合一开始就能确定元素值的业务场景。
    • 两种格式的写法是独立的严,不可以混用。
二、数组的遍历
1、数组遍历介绍
  • 遍历:就是一个一个数据的访问
  • 为什么要遍历数组?搜索、数据统计等等都要用到遍历

在这里插入图片描述

三、数组排序

​ 就是对数组中的元素,进行升序(由小到大)或者降序(由大到小)的操作

1、数组排序的技术
  • 冒泡排序
    • 从头开始两两比较,把较大的元素与较小的元素进行交换
    • 每轮把节前最大的一个元素存入到数组当前的末尾。
    • 实现步骤
      1. 定义一个外部循环控制总共需要冒几轮(数组的长度-1)
      2. 定义一个内部循环,控制每轮依次往后比较几个位置(数组长度-i-1)。
      3. 如果当前元素>后一个元素值,两者交换
  • 选择排序

  • 快速排序

  • 插入排序

2、数组搜索相关技术
  • 二分搜索
  • 分块查找
  • 哈希表查找
四、数组的内存图
1、Java内存分配介绍
  • 栈内存

    方法运行时所进入的内存,变量也是存在这里的

  • 堆内存

    new出来的东西会在这块内存中开辟空间并产生地址

  • 方法区

    字节码文件加载时进入的内存

  • 本地方法栈

  • 寄存器

2、数组内存图

在这里插入图片描述

3、两个变量指向同一个数组

在这里插入图片描述

五、数组使用的常见问题

1、如果访问的元素位置超过最大索引,执行时会出现ArraylndexOutOfBoundsException(数组索引越界异常)
2、如果数组变量中没有存储数组的地址,而是nulL,在访问数组信息时会出现NullPointerException(空指针异常)

六、Debug工具的使用
1、Debug工具(断电调试工具)

​ IDEA自带的断电调试(排错)工具,可以控制代码从断电开始一行一行的执行,然后详细观看程序执行的情况

2、Debug工具基本使用步骤
  • 在需要控制的代码左侧点一下,形成断点
  • 选择使用Debug方式启动程序,启动后程序会在断电暂停
  • 控制代码一行行的往下执行

第十四节、方法

什么是方法?

​ 方法是一种语法结构,它可以把一段代码封装成一个功能,以方便重复调用。

方法的优势:
  • 提高了代码的复用性
  • 让程序的逻辑更清晰
一、方法的定义、调用
1、方法定义的完整格式
修饰符 返回值类型 方法名(形参列表){
	放法体代码(需要执行的功能代码);
	return 返回值;
}

在这里插入图片描述

2、方法的调用格式
  • 方法必须调用才可以跑起来,调用格式:

    方法名(参数);
    
3、方法格式的注意点
  • 方法的修饰符:暂时都使用piblic static修饰
  • 方法申明了具体的返回值类型,内部必须使用return返回对应类型的数据
  • 形参列表可以有多个,甚至可以没有;如果有多个形参,多个形参必须用“,”隔开,且不能给初始化值。
4、方法定义的其他写法

方法定义时:返回值类型、形参列表可以按照需求进行填写。

注意事项:
  • 如果方法不需要返回结果,返回值类型必须申明成void(无返回值),此时方法内部不可以使用return返回数据。
  • 方法如果没有参数,或者返回值类型申明为void可以称为无参数、无返回值的方法,依次类推
二、方法使用的常见问题

1、方法的编写顺序无所谓

2、方法与方法之间是平级关系,不能嵌套定义

3、方法的返回值类型为void(无返回值),方法内部不能使用return返回数据,如果方法的返回值类型写了具体类型,方法内部必须使用return返回对应数据类型的数据

4、return语句下面,不能编写代码,因为永远执行不到,属于无效代码。

5、方法不调用就不执行,调用时必须严格匹配方法的参数情况

6、有返回值的方法调用时可以选择定义变量接收结果,或者直接输出调用,甚至直接调用;无返回值方法的调用只能直接调用一下。

三、方法定义的技巧说明

1、修饰符:public static(暂时固定)

2、方法名称:自己取名,有意义,英文小写,驼峰模式。

3、方法体代码:完成自己需要写的功能代码即可

4、真正需要关注的就两点:
  • 分析方法是否需要申明返回值类型;
  • 分析方法是否需要接收参数。
四、方法调用的内存图
1、方法的调用流程-内存图解
  • 方法没有被调用的时候,在方法区中的字节码文件中存放
  • 方法被调用的时候,需要进入到栈内存中运行
五、方法的参数传递机制
1、Java的参数传递机制:值传递

​ 在传输实参给方法的形参的时候,并不是传输实参变量本身,而是传输实参变量中存储的值,这就是值传递。

注意:
  • 形参:以方法为例,就是方法定义时的变量。
  • 实参:在方法内部定义的变量
2、引用类型的参数传递

在这里插入图片描述

3、基本类型和引用类型的参数在传递的时候有什么不同?
  • 都是值传递。
  • 基本类型的参数传输存储的数据值。
  • 引用类型的参数传输存储的地址值。
六、方法重载

​ 同一个类中,出现多个方法名称相同,但是形参不同的,那么这些方法就是重载方法
在这里插入图片描述

1、方法重载的作用

​ 对于相似功能的业务场景:可读性好,方法名称相同提示是同一类型的功能,通过形参不同实现功能差异化的选择,这是一种专业的代码设计。

2、方法重载的识别技巧
  • 只要是同一个类中,方法名称相同、形参列表不同,那么他们就是重载的方法,其他都不管!(如:修饰符,返回值类型都无所谓)
  • 形参列表不同指的是:形参的个数、类型、顺序不同,不关心形参的名称。
七、return关键字单独使用

​ return;可以立即跳出并结束当前方法的执行;return关键字单独使用可以放在任何方法中。

第十五节:面向对象

1、什么是面向对象编程?

面向:找、拿

对象:东西

面向对象编程:找或者拿东西过来编程

2、面向对象编程的好处,为什么用面向对象编程?

符合人类思维习惯,编程跟简单,更好理解

3、面向对象学什么?

学习自己设计对象并使用

学习面向对象的语法

一、设计对象并使用
1、设计类,创建对象并使用
什么是类,什么是对象?
  • **类()设计图:**是对象共同特征的描述。
  • **对象:**是真实存在的具体实例。
  • **结论:**在java中,必须先设计类,才能创建对象并使用
(2)如何设计类

在这里插入图片描述

(3)如何得到类对象

在这里插入图片描述

(4)如何使用对象在这里插入图片描述
2、定义类的几个补充注意事项
1、定义类有哪些建议,有什么需要注意的?
  • 类名首字母建议大写,且有意义,满足“驼峰模式”,不能用关键字,必须是合法的标识符。
  • 一个Java文件中可以定义多个class类,但只能一个类是public修饰,而且public修饰的类名必须成为代码文件名。实际开发中建议还是一个文件定义一个class类。
2、成员变量的格式是什么样的,有什么特点
  • 成员变量的完整定义格式是:修饰符 数据类型 变量名称 = 初始化值;
  • 一般无需指定初始化值,存在默认值。
  • 成员变量的默认值规则
    在这里插入图片描述
二、对象在内存中的运行机制
1、两个对象内存图

在这里插入图片描述

总结:

  • 对象放在堆内存中
  • Car c = new Car();c变量中存储的是对象在堆内存中的地址
  • 成员变量的数据放在对象中,也就是存在于堆内存中
2、两个变量指向同一个对象的内存图

在这里插入图片描述

垃圾回收:

注意:当堆内存中的对象,没有被任何变量引用(指向)时,就会被判定为内存中的“垃圾”

Java存在自动垃圾回收器,会定期进行垃圾清理

三、构造器
1、学习构造器的目的:
  • 真正知道对象具体是通过调用什么代码得到的。
  • 能够掌握为对象赋值的其他简便写法
  • 为以后学习面向对象编程的其他内容做支撑
2、构造器的作用

定义在类中的,可以用于初始化一个类的对象,并返回对象的地址。

3、构造器的格式
修饰符 类名(形参列表){
...
}

例如:

public class Car{
    ...
        //无参构造器
        public Car(){
        ...
    }
    //有参构造器
    	public Car(Sting n,double p){
        ...
    }
}
4、构造器的分类和作用
  • 无参数构造器(默认存在的):初始化对象时,成员变量的数据均采用默认值。
  • 有参数构造器:在初始化对象的时候,同时可以接受参数为对象进行赋值。
5、构造器的注意事项
  • 任何类定义出来,默认就自带了无参数构造器,写不写都有。
  • 一旦定义了有参数构造器,那么无参数构造器就没有了,如果还想用无参数构造器,此时就需要自己手写一个无参数构造器了。
四、this关键字
1、this关键字是什么
  • 可以出现在构造器、方法中
  • 代表当前对象的地址。
2、this关键字的作用

可以用于指定访问当前对象的成员变量、成员方法。

3、this出现在有参数构造器中的用法

​ 可以用于访问当前对象的成员变量、成员方法(代表了当前对象)。
在这里插入图片描述
在这里插入图片描述

五、封装
1、封装

面向对象的三大特征:封装继承多态

**封装:**告诉我们,如何正确设计对象的属性和方法。

**封装的原则:**对象代表什么,就得封装对应的数据,并提供数据对应的行为。

2、理解封装思想有啥好处
  • 有什么事,找对象,调方法就行,编程变得很简单。
  • 降低学习成本,可以少学、少记。
3、如何进行分装更好
  • 一般建议对成员变量使用private(私有、隐藏)关键字修饰(private修饰的成员只能在当前类中访问)
  • 为每个成员变量提供配套public修饰的getter、setter方法暴露取值和赋值
六、标准JavaBean
1、JavaBean

也可以称为实体类,其对象可以用于在程序中封装数据。

2、标准JavaBean需要满足如下要求:
  • 成员变量使用private修饰
  • 提供成员变量对应的setXxx()/getXxx()方法
  • 必须提供一个无参构造器;有参数构造器可写可不写。
七、补充知识:成员变量、局部变量的区别
区别成员变量局部变量
类中位置不同类中,方法外常见于方法中
初始化值不同有默认值,无需初始化没有默认值
内存位置不同堆内存栈内存
生命周期不同随着对像的创建而存在,随着对象的消失而消失随着方法的调用而存在,随着方法的运行结束而消失
作用域在所属的大括号中

第十六节、常用API

一、API(Application Programming Interface,应用程序编程接口)

1、Java写好的技术(功能代码),咱们可以直接调用

2、Oracle也为Java提供的这些功能代码提供了相应的API文档(技术说明书)

3、下载API文档:

http://www.oracle.com/technetwork/java/javase/downloads/index.html

二、String

1、String概述
  • java.lang.String类代表字符串,String类定义的变量可以用于指向字符串对像,然后操作该字符串。
  • Java程序中的所有字符串文字(例如 “abc”)都为此类的对象。
2、String类的特点详解
  • String其实常被称为不可变字符串类型,它的对象在创建后不能被改变
3、字符串对象存在哪里?
  • 以“ ”方式给出的字符串对象,在字符串常量池中存储。
4、String是不可变字符串的原因?
  • String变量每次的修改其实都是产生并指向了新的字符串对象。
  • 原来的字符串对象都是没有改变的,所以称不可变字符串。

三、String类创建对象的2种方式

1、创建方法:

方式一:直接使用“ ”定义。(推荐方式)

String name = "传智教育";

方式二:通过String类的构造器创建对象。

构造器说明
public String()创建一个空白字符串对象,不含有任何内容
public String(String original)根据传入的字符内容,来创建字符串对象
public String(char[] chs)根据字符数组的内容,来创建字符串对象
public String(byte[] chs)根据字节数组,来创建字符串对象
2、区别
  • 以 “ ” 方式给出的字符串对象,在字符串常量池中存储,而且相同内容只会在其中存储一份
  • 通过利用构造器new对象,每个new一次都会产生一个新对象,放在堆内存中

四、String类常用API-字符串内容比较

1、字符串内容比较
  • 字符串的内容比较不适合用“==”比较
  • 推荐使用String类提供的"equals“比较:只关心内容一样即可
方法名说明
public blean equals(Object anObject)将此字符串与指定对象进行比较,只关心字符内容是否一致
public blean equalsIgnoreCase(String anotherString)将此字符串与指定对象进行比较,忽略大小写比较字符串。只关心字符内容是否一致
2、开发中什么时候使用==比较数据
  • 基本数据类型比较时使用。

五、String类常用API-遍历、替代、截取、分割操作

1、String常用API
方法名说明
public int length()返回此字符串的长度
public char charAt(int index)获取某个索引位置处的字符
public char[] toCharArray()将当前字符串转换成字符数组返回
public String substring(int beginIndex,int endIndex)根据开始和结束索引进行截取,得到新的字符串(包前不包后)
public String substring(int beinIndex)从传入的索引处截取,截取到末尾,得到新的字符串
public String replace(CharSequence target,CharSequence replacement)使用新值,将字符串中的旧值替换,得到新的字符串
public String[] split(String regex)根据传入的规则切割字符串,得到字符串数组返回

第十七节、集合概述

​ 集合是与数组类似,也是一种容器,用于装数据的。

一、集合的特点

  • 集合的大小不固定,启动后可以动态变化,类型也可以不固定
  • 集合非常适合做元素个数不确定,且要进行增删操作的业务场景
  • 集合的提供了许多丰富、好用的功能,而且数组的功能很单一

二、ArrayList集合快速入门

1、ArrayList集合

ArrayList是集合中的一种,它支持索引。(暂时先学习这个,后期课程会学习整个集合体系)

2、ArrayList集合的对象获取
构造器说明
public ArrayList()创建一个空的集合对象
3、ArrayList集合添加元素的方法
方法名说明
pubilc boolean add(E e)将指定的元素追加到此集合的末尾
public void add(int index,E element)在此集合中指定位置插入指定的元素

三、ArrayList对于泛型的支持

1、泛型概述

ArrayList:其实就是一个泛型类,可以在阶段约束集合对象只能操作某种数据类型

2、举例
  • ArrayList:此集合只能操作字符串类型的元素。
  • ArrayList:此集合只能操作整数类型的元素。

注意:集合中只能存储引用类型,不支持基本数据类型

四、ArrayList常用API、遍历

方法名称说明
public E get(int index)返回指定索引处元素
public int size()返回集合中的元素个数
public E remove(int index)删除指定索引处的元素,返回被删除的元素
public boolean remove(Objet o)删除指定的元素,返回删除是否成功
public E set(int index,Eelement)修改指定索引出的元素,返回被修改的元素

后续 JavaSE加强篇

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐