JavaSE基础篇——超详细,Java入门,这一篇就够了

第一节: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

去Oracle官网下载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(类)

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

六、使用步骤

创建Project空工程创建Module模块创建Package包创建class类在类中编写代码完成编译运行

七、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、常见的特殊值的书写格式

truefalsenull\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=8b1KB=1024B1MB=1024KB1GB=1024MB1TB=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其实在功能上远远强大于switchif适合做区间匹配switch适合做值匹配、代码优雅

5、switch分支注意事项

表达式类型只能是byte、short、int、char,JDK5开始支持枚举,JDK7开始支持String、不支持double、float、longcase给出的值不允许重复,且只能是字面量,不能是变量不要忘记写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)定义一个内部循环,控制每轮依次往后比较几个位置(数组长度-i-1)。如果当前元素>后一个元素值,两者交换 选择排序

快速排序

插入排序

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加强篇