首页 > 基础资料 博客日记
JavaSE基础篇——超详细,Java入门,这一篇就够了
2024-05-24 14:00:04基础资料围观243次
第一节: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、常见的特殊值的书写格式
- 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、跳转控制语句介绍
2、注意事项
八、案例技术:随机数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) | 修改指定索引出的元素,返回被修改的元素 |
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签: