admin 管理员组文章数量: 887021
文章目录
- 1、Java语言概述
- 2、Java开发环境的准备:JDK简介、安装、常用命令
- 3、Java入门程序
-
- 3.1、Hello World
- 3.2 常见问题
- 3.3 Java程序的执行原理
- 3.4 JDK组成、跨平台原理
- 3.5 JDK安装后Path和Java_home环境变量
- 4、IDEA开发工具:简介、下载、安装
-
- 4.1 简介
- 4.2 下载
- 4.3 IDEA开发工具:开发第一个程序
- 4.4 IDEA字体、主题、背景色设置
- 4.5 常用快捷键介绍
- 4.6 IDEA工程、模块常用操作
- 5、Java基础语法
-
- 5.1 注释
- 5.2 字面量
- 5.3 变量
- 5.4 变量在计算机中的底层原理
- 5.5 进制转换,八进制、十六进制
- 5.6 数据类型
- 5.7 关键字、标识符
- 6、关于Java语言基础知识我们需要学会什么?
- 7、类型转换
-
- 7.1 自动类型转换
- 7.2 表达式的自动类型转换
- 7.3 强制类型转换
- 8、运算符
-
- 8.1 基本算数运算符
- 8.2 +符号做连接符
- 8.3 自增自减运算符
- 8.4 赋值运算符
- 8.5 关系运算符
- 8.6 逻辑运算符
- 8.7 三元运算符
- 8.8 运算符优先级
- 9、API介绍、案例技术:键盘录入
- 10、程序流程控制
-
- 10.1 分支结构
-
- 10.1.1 if分支
- 10.1.2 switch分支
- 10.2 循环结构
-
- 10.2.1 for循环
- 10.2.2 while循环
- 10.2.3 do-while循环
- 10.2.4 死循环
- 10.2.5 嵌套循环
- 10.2.6 跳转关键字:break、continue
- 11、 随机数Random
- 12、数组
-
- 12.1 概述
- 12.2 定义方式一、访问、注意事项
- 12.3 定义方式二、元素默认值规则
- 12.4 数组遍历
- 12.5 数组案例
-
- 12.5.1 元素求和
- 12.5.2 数组求最值
- 12.5.3 猜数字游戏
- 12.5.4 随机排名
- 12.5.5 数组排序
- 12.6 数组内存图、常见使用问题
- 12.7 Debug工具
- 13、方法
-
- 13.1 概述
- 13.2 方法定义格式、常见问题
- 13.3 方法案例
-
- 13.3.1 求和
- 13.3.2 判断奇偶数
- 13.3.3 求最值
- 13.4 方法的内存原理
- 13.5 方法参数传递机制
- 13.6 方法参数传递的案例
-
- 13.6.1 打印数组的内容
- 13.6.2 从数组中查询元素分索引返回
- 13.6.3 比较两个数组内容是否相等
- 13.7 方法重载、return关键字
- 14 编程训练
-
- 14.1 买飞机票
- 14.2 找素数
- 14.3 验证码
- 14.4 数组的复制
- 14.5 评委打分
- 14.6 数字加密
- 14.7 双色球系统开发
- 15 面向对象
-
- 15.1 概述
- 15.2 面向对象、注意事项
- 15.3 内存机制
- 15.4 面向对象实战
- 15.5 构造器、this
- 15.6 封装
- 15.7 标准JavaBean
- 15.8 成员变量、局部变量区别
- 15.9 面向对象综合案例
- 16 常用API(String、ArrayList)
-
- 16.1 String
-
- 16.1.1 概述
- 16.1.2 对象创建的原理
- 16.1.3 String类常见面试题
- 16.1.4 Stirng类常用API
- 16.1.5 String案例:验证码、登录、隐私号码
- 16.2 ArrayList
-
- 16.2.1 集合概述
- 16.2.2 ArrayList集合快速入门
- 16.2.3 ArrayList对于泛型的支持
- 16.2.4 ArrayList常用API、遍历
- 16.2.5 ArrayList集合案例
- 17 ATM系统
- 18、static静态关键字
-
- 18.1 static是什么、修饰成员变量的用法
- 18.2 static修饰成员变量的内存原理
- 18.3 static修饰成员方法的基本用法
- 18.4 static修饰成员方法的内存原理
- 18.5 static注意事项
- 18.6 工具类
- 18.7 代码块
- 18.9 单例模式
- 19 继承
-
- 19.1 概述、案例
- 19.2 特点、访问特点、方法重写
- 19.3 构造器特点、this、super小结
- 20、语法
-
- 20.1 包
- 20.2 权限修饰符
- 20.3 final的语法
- 20.4 常量、常量在开发中的作用
- 20.5 枚举、枚举作用
- 21、抽象类
-
- 21.1 概述
- 21.2 案例
- 21.3 特点
- 21.4 模板方法模式
- 22、接口
-
- 22.1 概述
- 22.2 多实现
- 22.3 多继承
- 22.4 JKD8后接口新增方法
- 22.5 注意事项
- 23、多态
-
- 23.1 概述
- 23.2 优势
- 23.3 类型转换问题
- 23.4 综合案例
- 24、内部类
-
- 24.1 静态内部类
- 24.2 成员内部类
- 24.3 局部内部类
- 24.4 匿名内部类
- 25、常用API
-
- 25.1 Object
- 25.2 Objects
- 25.3 StringBuilder
- 25.4 Math
- 25.5 System
- 25.6 BigDecimal
- 26、日期与时间
-
- 26.1 Date
- 26.2 SimpleDateFormat
- 26.3 Calendar
- 27、JDK8开始新增日期API
-
- 27.1 LocalTime、LocalDate、LocalDateTime
- 27.2 Instant
- 27.3 DateTimeFormatter
- 27.4 Duration、Period
- 27.5 ChronoUnit
- 28、包装类
- 29、正则表达式
-
- 29.1 概述、初体验
- 29.2 匹配规则
- 29.3 常见案例
- 29.4 在方法中的应用
- 29.5 爬取信息
- 30、Arrays类
- 31、常见算法
-
- 31.1 选择排序
- 31.2 二分查找
- 32、Lambda表达式
-
- 32.1 概述
- 32.2 实战-简化常见函数式接口
- 32.3 表达式的省略规则
- 33、集合
-
- 33.1 概述
- 33.2 collection集合的体系特点
- 33.3 Collection集合常用API
- 33.4 collection集合的遍历方式
- 33.5 Collection集合存储自定义类型的对象
- 33.6 常见数据结构
-
- 33.6.1 概述、栈、队列
- 33.6.2 数组
- 33.6.3 链表
- 33.6.4 二叉树、二叉查找树
- 33.6.5 平衡二叉树
- 33.6.6 红黑树
- 33.7 List系列集合
-
- 33.7.1 List集合特点、特有API
- 33.8.2 List集合的遍历方式小结
- 33.8.3 ArrayList集合的底层原理
- 33.8.4 LinkedList集合的底层原理
- 33.8 补充知识:集合的并发修改异常问题
- 33.9 补充知识:泛型深入
-
- 33.9.1 泛型的概述和优势
- 33.9.2 自定义泛型类
- 33.9.3 自定义泛型方法
- 33.9.4 自定义泛型接口
- 33.9.5 泛型通配符、上下限
- 33.10 Set系列集合
-
- 33.10.1 Set系列集系概述
- 33.10.2 HashSet元素无序的底层原理:哈希表
- 33.10.3HashSet元素去重复的底层原理
- 33.10.4 实现类: LinkedHashset
- 33.10.5 实现类:TreeSet
- 33.11 Collection体系的特点、使用场景总结补充知识:可变参数
- 33.12 补充知识:集合工具类Collections
- 33.13 Collection体系的综合案例
- 33.14 Map集合体系
-
- 33.14.1 Map集合的概述
- 33.14.2 Map集合体系特点
- 33.14.3 Map集合常用API
- 33.14.4 Map集合的遍历方式一:键找值
- 33.14.5 Map集合的遍历方式二:键值对
- 33.14.6 Map集合的遍历方式三: lambda表达式
- 33.14.7 Map集合的实现类HashMap
- 33.14.8 Map集合的实现类LinkedHashMap
- 33.14.9 Map集合的实现类TreeMap
- 33.15 补充知识:集合的嵌套
- 34、创建不可变集合
- 35、Stream流
-
- 35.1 Stream流的概述
- 35.2 Stream流的获取
- 35.3 stream流的常用方法API
- 35.4 Stream流的综合应用
- 35.5 收集Stream流
- 36、异常处理
-
- 36.1 异常概述、体系
- 36.1 常见运行时异常
- 36.1 常见编译时异常
- 36.1 异常的默认处理流程
- 36.1 编译时异常的处理机制
- 36.1 运行时异常的处理机制
- 36.1 异常处理使代码更稳健的案例
- 36.1 自定义异常
- 37、日志框架
-
- 37.1 日志技术的概述
- 37.2 日志技术体系结构
- 37.3 Logback概述
- 37.4 Logback快速入门
- 37.5 Logback配置详解-输出位置、格式设置
- 37.6 Logback配置详解-日志级别设置
- 38、阶段项目实战
-
- 38.1 电影购票系统简介、项目功能演示
- 38.2 日志框架搭建、系统角色分析
- 38.3 首页设计、登录、商家界面、用户界面实现
- 38.4 商家-详情页设计、影片上架、退出
- 38.5 商家-影片下架、影片修改
- 38.6 用户-展示全部影片
- 38.7 用户-购票功能
- 38.8 用户-评分功能
- 39、File类
-
- 39.1 创建File对象
- 39.2 常用方法:判断文件类型、获取文件信息
- 39.3 常用方法:创建文件、删除文件功能
- 39.4 常用方法:遍历文件夹
- 40、补充知识:方法递归、字符集
-
- 40.1 方法递归的形式
- 40.2 方法递归的应用、执行流程、递归算法的三个核心要素
- 40.3 方法递归的经典案例
- 40.4 其他形式的方法递归案例
- 40.5 常见字符集介绍
- 40.6 字符集的编码、解码操作
- 41、IO流
-
- 41.1 概述
- 41.2 字节流
- 41.3 资源释放的方式
1、Java语言概述
- Java知识背景
- 为什么用Java
1、世界上最流行的编程语言之一,在国内使用最为广泛的编程语言。
2、可移植性、安全可靠、性能较好。
3、开发社区最完善,功能最丰富。 - Java能做什么
- Java技术体系
技术体系 | 说明 |
---|---|
Java SE(Java Standard Edition):标准版 | Java技术的核心和基础 |
Java EE(Java Enterprise Edition):企业版 | 企业级应用开发的一套解决方案 |
Java ME(Java Micro Edition):小型版 | 针对移动设备应用的解决方案 |
- 总结
1、Java是是一门高级编程语言
2、Java是sun公司研发的,现在属于Oracle公司
3、Java之父是詹姆斯·高斯林
4、Java基本上什么都可以干,主要做互联网系统的开发
5、Java技术平台:JavaSE(标准版)、JavaEE(企业版)、JavaME(小型版)
2、Java开发环境的准备:JDK简介、安装、常用命令
-
JDK下载
Oracle官网:http://www.oracle/java/technologies/downloads/
-
如何验证JDK安装成功
java.exe与javac.exe能正常运行即可
-
Javac和Java介绍
将来我们写好的Java程序都是高级语言,计算机底层是硬件不能识别这些语言。
必须通过Javac编译工具进行翻译,然后再通过Java执行工具执行才可以驱动机器干活。 -
命令行窗口的常用命令
常用命令 | 作用 |
---|---|
盘符: | 切换到某个盘下:D:,C: |
dir | 查看当前路径下的文件信息 |
cd | 进入单级目录:cd itheima 进入多级目录:cd D:\itheima\JavaSE\第一天 回退到上一级目录:cd .. 回退到盘符根目录:cd \ (注意:按Table可以补全目录) |
cls | 清屏 |
3、Java入门程序
3.1、Hello World
3.2 常见问题
1、windows的文件扩展名没有勾选
2、代码写了,但是忘记保存了
3、文件名和类名不一致。
4、大小写错误,单词拼写错误,存在中文符号,找不到Main方法。
5、括号不配对.
6、编译或执行工具使用不当.
7、…
3.3 Java程序的执行原理
- 不管是什么样的高级编程语言,最终都是翻译成计算机底层可以识别的机器语言(0和1)
3.4 JDK组成、跨平台原理
3.5 JDK安装后Path和Java_home环境变量
- 开始配置
4、IDEA开发工具:简介、下载、安装
4.1 简介
4.2 下载
下载UItimate旗舰版: https://www.jetbrains/idea/
安装:傻瓜式安装,建议修改安装路径(不要安装在有空格和中文的路径下)。
4.3 IDEA开发工具:开发第一个程序
① 创建project空工程
② 创建module模块
找到你下载JDK的路径位置,添加JDK
③创建package包
④创建class类
⑤在类中编写代码
⑥完成编译运行
4.4 IDEA字体、主题、背景色设置
4.5 常用快捷键介绍
Ctrl + Alt + T 分支、循环快捷键
4.6 IDEA工程、模块常用操作
1、删除类文件
2、修改类名称
3、修改模块
4、导入模块
关联导入:原路径模块删除,此模块也会删除
建议新建一个模块,名称就是导入模块的名称,将代码拷贝进去,避免原路径删除导致模块丢失
5、删除模块
方法1:Remove Module,此方法只是在IDEA界面中删除,源文件并没有删除
方法2:到整个项目路径下找到要删除的文件,直接删除
方法3:在IDEA中点击模块,顶部显示模块名称后右键,delete。
当然方法3也有bug,不能删除干净,源文件还会复原,但是IDEA界面上不显示出来,如下操作做完再重启IDEA,即可删除
建议使用方法1 + 方法2,出问题重启IDEA
6、 打开工程
7、关闭工程
或者直接X掉,关闭IDEA
5、Java基础语法
5.1 注释
什么是注释
注释是写在程序中对代码进行解释说明的文字,方便自己和其他人查看,以便理解程序的。
注释有哪些
注释的特点
注释不影响程序的执行
多学一招
5.2 字面量
计算机是用来处理数据的,字面量就是告诉程序员∶数据在程序中的书写格式。
常用数据
5.3 变量
什么是变量
变量就是用来存储一一个数据的内存区域(可以理解成盒子),且里面存储的数据可以变化。
1、必须以字母、下划线、或者美元符$开头;
以美元符$ 开头命名的变量虽然能够编译通过但是不建议使用;
中文也可以作为命名开头且编译也能通过,但是不建议使用。
2、除开头外后面的部分可以有字母、下划线、美元符$以及数字组成;
3、虽然变量名不限制长度,但能表达清楚命名的含义即可;
4、变量名不可以和java的关键字冲突;
5、再命名中大小写是又区别的,即使由同一个单词命名但是有个别字母的大小写的区别,产生的就是两个不同的变量。
变量使用注意事项
5.4 变量在计算机中的底层原理
5.5 进制转换,八进制、十六进制
5.6 数据类型
5.7 关键字、标识符
6、关于Java语言基础知识我们需要学会什么?
7、类型转换
7.1 自动类型转换
7.2 表达式的自动类型转换
面试题
咋一看 i 和 j 都是byte变量,但是两者相加的值需要 int 类型承接 。
因为 i 和 j 在运算时默认是 int 类型 进行运算。同时,如果i=120,j=100,两者都不超过byte类型范围,但是相加得到的值就不一定了。
索性当成int类型计算能保证能赋值。
7.3 强制类型转换
8、运算符
8.1 基本算数运算符
数值拆分案例
8.2 +符号做连接符
8.3 自增自减运算符
面试案例
8.4 赋值运算符
8.5 关系运算符
8.6 逻辑运算符
8.7 三元运算符
8.8 运算符优先级
9、API介绍、案例技术:键盘录入
10、程序流程控制
10.1 分支结构
10.1.1 if分支
- 根据判定的结果( 真或假)决定执行某个分支的代码,适合做区间匹配
10.1.2 switch分支
switch使用的注意事项
- 不支持浮点数原因是https://www.jb51/article/231618.htm
10.2 循环结构
10.2.1 for循环
10.2.2 while循环
10.2.3 do-while循环
10.2.4 死循环
10.2.5 嵌套循环
10.2.6 跳转关键字:break、continue
11、 随机数Random
当然也可以指定随机区间 Random rm = new Random(); rm.nextInt(10,30);
12、数组
12.1 概述
12.2 定义方式一、访问、注意事项
12.3 定义方式二、元素默认值规则
12.4 数组遍历
快捷写法 数组变量.for初始化变量,例如:ages.fori,就会弹出提示
12.5 数组案例
12.5.1 元素求和
12.5.2 数组求最值
12.5.3 猜数字游戏
12.5.4 随机排名
12.5.5 数组排序
12.6 数组内存图、常见使用问题
12.7 Debug工具
13、方法
13.1 概述
13.2 方法定义格式、常见问题
用static修饰符,表示是该类的方法,不是实例的方法,可以在static修饰的方法中调用static修饰的方法。
不用static修饰符,则需要new类的实例,来调用方法
13.3 方法案例
13.3.1 求和
13.3.2 判断奇偶数
13.3.3 求最值
13.4 方法的内存原理
详细动画看这里https://editor.csdn/md/?articleId=127215629
13.5 方法参数传递机制
13.6 方法参数传递的案例
13.6.1 打印数组的内容
13.6.2 从数组中查询元素分索引返回
13.6.3 比较两个数组内容是否相等
13.7 方法重载、return关键字
14 编程训练
14.1 买飞机票
package com.itheima.demo;
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
//目标:完成买飞机票的价格计算。
// 1、让用户输入机票原价,月份,仓位类型
Scanner sc = new Scanner(System.in);
System. out. println("请您输入机票原价: ");
double money = sc. nextDouble() ;
System. out. println("请您输入机票的月份(1-12) : ");
int month = sc. nextInt();
System. out. printLn("请您选择仓位类型: ");
String type = sc.next();
// 4.调用方法,统计结果.
System . out . printLn("机票优惠后的价格是: + calc(money, month, type));
}
public static doubLe calc(doubLe money, int month, String type] {
// 3.判断用户选择的信息情况
if (month >= 5 && money <= 10) {
//旺季
switch (type) {
case "头等舱":
money *= 0.9; // money = money★0.9;
break;
case "经济舱":
money *= 0.85; // money = money * 0.85;
break;
default:
System.out.printLn("您输入的仓位类型有误~~");
money = -1; //表示当前无法计算价格!
}else if(month == 11 II month == 12 II month >= 1 & month <= 4){
//淡季
switch (type) {
case "头等舱":
money *= 0.7; // money = money★0.9;
break;
case "经济舱":
money *= 0.65; // money = money * 0.85;
break;
default:
System.out.printLn("您输入的仓位类型有误~~");
money = -1; //表示当前无法计算价格!
}else {
System.out.println("对不起,您输入的月份有问题~~");
money = -1; //表示当前无法计算价格!
}
}
return money; //最终价格
}
14.2 找素数
14.3 验证码
14.4 数组的复制
14.5 评委打分
14.6 数字加密
14.7 双色球系统开发
15 面向对象
15.1 概述
15.2 面向对象、注意事项
15.3 内存机制
垃圾回收
- 注意:当堆内存中的对象,没有被任何变量引用(指向)时,就会被判定为内存中的“垃圾”。
- Java存在自动垃圾回收器,会定期进行清理。
15.4 面向对象实战
Goods类
package com.itheima.demo;
public class Goods {
int id; //编号
String name; //名称
double price; //价格
int buyNumber; // 购买数量
}
测试模块
package com.itheima.demo;
import java.util.Scanner;
/**
目标:面向对象编程训练:购物车模块模拟。
*/
public class ShopCarTest {
public static void main(String[] args) {
// 1.定义商品类,用于后期创建商品对象
// 2.定义购物车对象:使用一 个数组对象表示。
Goods[] shopCar = new Goods[100]; // [null, null, ...]
// 3.搭建操作架构
while(true){
System. out . println("请您选择如下命令进行操作: "); .
System. out. printLn("添加商品到购物车: add");
System. out. println("查询购物车商品展示: query");
System. out. printLn("修改商品购买数量: update");
System. out . println("结算购买商品的金额: pay");
Scanner sc = new Scanner(System.in);
System. out . printLn("请您输入命令: ");
String command = sc.next();
switch (command){
case "add" :
//添加商品到购物车
addGoods(shopCar,sc);
break;
case "query":
//查询购物车商品展示
queryGoods(shopCar);
break;
case "update":
//修改商品购买数量
updateGoods (shopCar,sc);
break;
case "pay":
//结算购买商品的金额
pay(shopCar);
break;
default :
System. out. print1n("没有该功能! ");
}
}
}
/**
查询购物车中的商品对象信息,并展示出来
*/
public static void queryGoods (Goods[] shopCar) {
System. out. printLn("===========查询购物车信息如下============");
System. out. println("编号\t\t名称\t\t\t价格\t\t\t购买数量");
// shopCar = [g1, g2, g3, null, null, ...]
for (int i =日; i < shopCar.length; i++) {
Goods g = shopCar[i];
if(g != null){
//展示这个商品对象
System. out. println(g.id +"\t\t" + g.name+"\t\t\t" + g.price +"\t\t\t" + g.buyNumber);
}else {
//遍历结束
break;
}
}
}
public static void updateGoods (Goods[] shopCar ,Scanner sc) {
//让用户输入要修改商品的id,根据id查询出要修改的商品对象。
while (true) {
System. out . printLn("请您输入要修改的商品id:");
int id = sc.nextInt();
Goods g = getGoodsById(shopCar, id);
if(g == null){
//没有该商品.
System . out . printIn("对不起,没有购买商品! ");
}else {
//说明存在该商品对象,可以修改它了
System. out. println("请您输入:”+ g.name +" 商品最新购买数量: ");
int buyNumber = sc.nextInt();
g. buyNumber = buyNumber;
System. out. println("修改完成! ");
queryGoods(shopCar);
break;
}
}
}
public static Goods getGoodsById(Goods[] shopCar ,int id){
// shopCar = [g1, g2, g3,null, null, ...] .
for (int i = 0; i < shopCar .length; i++) {
Goods g = shopCar[i];
if(g != null){
//判断这个商品对象的id是否是我们要找的
if(g.id == id){
return g;
}
}else {
return null; //找完了全面存在的商品,都没有找到!
}
}
return null; //代表找完了100个商品都没有找到id - -样的商品
}
public static void pay(Goods[] shopCar) {
query6oods(shopCar);
//1.定义一个求和变量累加金额
double money =日;
// 2、遍历购物车数组中的全部商品对象,累加单价*数量
// [g1, g2, null, ...1
for (int i = 0; i < shopCar.length; i++) {
Goods g = shopCar[i];
if(g != null){
money += (g.price * g. buyNumber);
}else {
break;
}
}
System . out . println("订单总金额:"+ money);
}
/**
完成商品添加到购物车的功能
*/
public static void addGoods(Goods[] shopCar ,Scanner sc) {
// 1.录入用户输入的购买商品的信息。
System. out.println("请您输入购买商品的编号(不重复) : ");
int id = sc.nextInt();
System. out.println("请您输入购买商品的名称: ");
String name = sc.next();
System. out . println("请您输入购买商品的数量: ");
int buyNumber = sc.nextInt();
System. out. println("请您输入购买商品的价格: ");
doubLe price = sc.nextDouble();
// 2、把这个购买商品的信息封装成一 个商品对象
Goods g = new Goods();
gl.id = id;
g.name = name;
g. buyNumber = buyNumber;
g.price = price;
// 3、把这个商品对象添加到购物车数组中去。
// shopCar = [a, a2, null, ........]
// i
for (int i = 0; i < shopCar.length; i++) {
if(shopCar[i] == null){
//说明此位置没有元素存入,把我们新买的商品添加到此处即可
shopCar[i] I g;
break; //结束,因为商品已经成功存入了,不需要继续找位置了
}
}
System. out. println("您的商品:”+ g.name +" 添加到购物车完成! ");
}
}
15.5 构造器、this
this调用本类中的其他方法:指在普通成员方法中使用this调用另一个成员方法
this调用本类中的其他构造方法,调用时要放在构造方法的首行。
15.6 封装
15.7 标准JavaBean
15.8 成员变量、局部变量区别
15.9 面向对象综合案例
16 常用API(String、ArrayList)
16.1 String
16.1.1 概述
16.1.2 对象创建的原理
16.1.3 String类常见面试题
16.1.4 Stirng类常用API
String的equals比较,如果a.equals(b)的a是null会报空指针异常
public boolean contains(CharSequence s):判断传入字符串是否包含其中。
public boolean startsWith(String prefix):判断是否由传入字符串开头
public String[] split(String s):按照某个内容把字符串分割成字符串数组返回。
16.1.5 String案例:验证码、登录、隐私号码
public class StringExec6 {
public static void main(String[] args) {
// 1、定义可能出现的字符信息
String datas = "abcdefghijkLmnopqrstuwxyZABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
// 2、循环5次,每次生成- - 个随机的索引,提取对应的字符连接起来即可
String code =“";
Random r = new Random();
for(inti=日;i<5;i++){
//随机一个索引
int index = r.nextInt (datas . Length());
char C = datas. charAt(index);
code += c;
}
// 3.输出宇符串变量即可
System. out. println(code);
}
// 1、定义正确的登录名称和密码
String okLoginName =” admin";
String okPassword = " itheima";
// 2、定义一个循环,循环3次,让用户登录
Scanner sc = new Scanner(System.in);
for(inti=1;i<=3;i++){
System. out. println("请您输入登录名称: ");
String loginName = sc.next();
System. out. println("请您输入登录密码: ");
String password = sc.next();
// 3、判断登录是否成功!
if (okLoginName . equals (loginName)){
// 4、判断密码是否正确
if(okPassword . equals(password)){
System . out. printLn("登录成功!欢迎进入系统随意浏览~~~~");
break;
}else {
//密码错误了
System. out . println("您的密码不正确!您还剩余"+ (3 - i) +"次机会登录机会!");
}
}else {
System. out. println("您的登录名称不正确!您还剩余"+ (3 - i) +"次机会登录机会!");
}
}
public class StringExec8 {
public static void main(String[] args) {
// 1、键盘录入一个手机号码
Scanner sc = new Scanner(System. in);
System. out. println("请您输入您的手机号码: ");
String tel = sc.next();
// 2、截取号码的前三位, 后四位 18665666520
String before = tel. substring(0, 3); //日1 2
String after = tel. substring(7); // 从索引7开始截取到手机号码的末尾
String s = before + "****" + after;
System. out . printLn(s);
}
}
16.2 ArrayList
16.2.1 集合概述
数组变量输出是地址
集合变量输出是数据
16.2.2 ArrayList集合快速入门
16.2.3 ArrayList对于泛型的支持
16.2.4 ArrayList常用API、遍历
// 3、完成集合的遍历
for (int i =0; i < list.size(); i++) {
System. out. println(list.get(i));
}
16.2.5 ArrayList集合案例
public class ArrayListTest4 {
public static void main(String[] args) {
//目标:学习遍历并删除元素的正确方案。
// 1、创建一个ArrayList集合存储- -个班级学生的成绩
ArrayList<Integer> scores = new ArrayList<>();
scores . add(98);
scores . add(77);
scores. add(66);
scores . add(89);
scores . add(79);
scores . add(50);
scores . add(100);
System . out . printLn(scores);
// 2、把低于80分的成绩从集合中去掉。
// scores = [98, 77, 66, 89,79, 50, 100]]
// scores = [98, 66, 89, 50,100]
// i
// 有毛病的代码!
// for (int i =日; i < scores.size(); i++) {
// int score = scores.get(i);
// if(score < 80){
// 这个分数必须删除
// scores. remove(i);
// }
// }
// System. out. printIn(scores);
// 完关的方案之一
for (int i = 0; i < scores.size(); i++) {
int score = scores. get(i);
if(score < 80){
//这个分数必须删除
scores. remove(i);
i--; //删除成功后,必须退一步,这样可以保证下次回到这个位置,如此则不会跳过数据
}
}
System . out . println(scores);
// 完美的方案之二
// 从后面倒着遍历再删除就可以。
for (int i = scores.size() - 1; i >= 0;i--) {
int score = scores.get(i);
if(score < 80){
scores. remove(i);
}
}
System . out . println(scores); .
}
}
17 ATM系统
ATMSystme
package com.itheima;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
/**
ATM系统的入口类。
*/
public class ATMSystem {
public static void main(String[] args) {
// 1、定义账户类
// 2、定义一个集合容器,负责以后存储全部的账户对象,进行相关的业务操作。
ArrayList<Account> accounts = new ArrayList<>();
Scanner sc = new Scanner(System.in);
// 3、展示系统的首页
while (true) {
System.out.println("===============黑马ATM系统=================");
System.out.println("1、账户登录");
System.out.println("2、账户开户");
System.out.println("请您选择操作:");
int command = sc.nextInt();
switch (command){
case 1:
// 用户登录操作
login(accounts, sc);
break;
case 2:
// 用户账户开户(ALT + ENTER)
register(accounts,sc);
break;
default:
System.out.println("您输入的操作命令不存在~~");
}
}
}
/**
* 登录功能
* @param accounts 全部账户对象的集合
* @param sc 扫描器
*/
private static void login(ArrayList<Account> accounts, Scanner sc) {
System.out.println("===================系统登录操作========================");
// 1、判断账户集合中是否存在账户,如果不存在账户,登录功能不能进行。
if(accounts.size() == 0) {
System.out.println("对不起,当前系统中,无任何账户,请先开户,再来登录~~");
return; // 卫语言风格,解决方法的执行。
}
// 2、正式进入登录操作
while (true) {
System.out.println("请您输入登录卡号:");
String cardId = sc.next();
// 3、判断卡号是否存在:根据卡号去账户集合中查询账户对象。
Account acc = getAccountByCardId(cardId, accounts);
if(acc != null){
while (true) {
// 卡号存在的
// 4、让用户输入密码,认证密码
System.out.println("请您输入登录密码:");
String passWord = sc.next();
// 判断当前账户对象的密码是否与用户输入的密码一致
if(acc.getPassWord().equals(passWord)) {
// 登录成功了
System.out.println("恭喜您," + acc.getUserName() +"先生/女生进入系统,您的卡号是:" + acc.getCardId());
// .... 查询 转账 取款 ....
// 展示登录后的操作页。
showUserCommand(sc, acc, accounts);
return; // 干掉登录方法
}else {
System.out.println("对不起,您输入的密码有误~~");
}
}
}else {
System.out.println("对不起,系统中不存在该账户卡号~~");
}
}
}
/**
展示登录后的操作页
*/
private static void showUserCommand(Scanner sc, Account acc, ArrayList<Account> accounts) {
while (true) {
System.out.println("===============用户操作页===================");
System.out.println("1、查询账户");
System.out.println("2、存款");
System.out.println("3、取款");
System.out.println("4、转账");
System.out.println("5、修改密码");
System.out.println("6、退出");
System.out.println("7、注销账户");
System.out.println("请选择:");
int command = sc.nextInt();
switch (command) {
case 1:
// 查询账户(展示当前登录的账户信息)
showAccount(acc);
break;
case 2:
// 存款
depositMoney(acc, sc);
break;
case 3:
// 取款
drawMoney(acc, sc);
break;
case 4:
// 转账
transferMoney(sc, acc, accounts);
break;
case 5:
// 修改密码
updatePassWord(sc, acc);
return; // 让当前方法停止执行,跳出去
case 6:
// 退出
System.out.println("退出成功,欢迎下次光临");
return; // 让当前方法停止执行,跳出去
case 7:
// 注销账户
if(deleteAccount(acc,sc,accounts)){
// 销户成功了,回到首页
return; // 让当前方法停止执行,跳出去
}else {
// 没有销户成功, 还是在操作页玩
break;
}
default:
System.out.println("您输入的操作命令不正确~~");
}
}
}
/**
* 销户功能
* @param acc
* @param sc
* @param accounts
*/
private static boolean deleteAccount(Account acc, Scanner sc, ArrayList<Account> accounts) {
System.out.println("===================用户销户========================");
System.out.println("您真的要销户?y/n");
String rs = sc.next();
switch (rs) {
case "y":
// 真正的销户
// 从当前账户集合中,删除当前账户对象,销毁就完成了。
if(acc.getMoney() > 0){
System.out.println("您账户中还有钱没有取完,不允许销户~");
}else {
accounts.remove(acc);
System.out.println("您的账户销户完成~~");
return true; // 销户成功
}
break;
default:
System.out.println("好的,当前账户继续保留~");
}
return false;
}
/**
* 修改密码
* @param sc 扫描器
* @param acc 当前登录成功的账户对象。
*/
private static void updatePassWord(Scanner sc, Account acc) {
System.out.println("===================用户密码修改========================");
while (true) {
System.out.println("请您输入当前密码:");
String passWord = sc.next();
// 1、判断这个密码是否正确
if(acc.getPassWord().equals(passWord)){
while (true) {
// 密码正确
// 2、输入新密码。
System.out.println("请您输入新密码:");
String newPassWord = sc.next();
System.out.println("请您确认新密码:");
String okPassWord = sc.next();
if(newPassWord.equals(okPassWord)) {
// 2次密码一致,可以修改了
acc.setPassWord(newPassWord);
System.out.println("恭喜您,您密码修改成功了~~");
return;
}else {
System.out.println("您输入的2次密码不一致~~");
}
}
}else {
System.out.println("您输入的密码不正确~");
}
}
}
/**
* 转账功能
* @param sc 扫描器
* @param acc 自己的账户对象
* @param accounts 全部账户的集合。
*/
private static void transferMoney(Scanner sc, Account acc, ArrayList<Account> accounts) {
System.out.println("===================用户转账操作===&
版权声明:本文标题:Java入门到精通(干就完了) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1727214990h1082916.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论