目录
1.8.7 replaceAll(String regex,String replacement)
1.8.9 substring(int beginIndex)
1.0 Java基础
1.0.1 Java的发展史
- 1995年诞生
- 为了解决跨平台编程的应用(支持Linux,Window,Mac)
- 2000年互联网的应用Java具有很好的优势
- 2017年Java的大数据应用,分布式开发Java优势明显
- 2017年提出AI,人工智能Java也会有它优势
1.0.2 Java的跨平台
- 主要能够影响Java的跨平台,全靠Java的虚拟机(JVM)
- 我们要想运行一个Java程序,需要安装JVM,同时还需要配置Java的环境变量
1.0.3 JVM安装
- 在Java的官方网站去下载JDK的文件
- 建议各位安装的JDK与你的操作的位数关联(x86, x64)
- JDK现在的版本1.8+
1.1第一个Java程序
1.1.1 关注的重点内容
- 理解Java程序的运行流程
- 检验你的Java环境变量是否OK
- 编写Java程序的规范
1.1.2 代码编写
1.1.2.1代码编写的相关解释
- 环境变量配置好之后,我们可以使用记事本或者文本编辑器(EditPlus, NodePad++)来编译执行java代码
- Java的IDE,推荐使用Eclipse,你如果使用Eclipse无需配置Java环境变量
1.1.2.2 代码的规范
- Java是严格区分英文字母大小写
- 代码中出现了左右花括号{},它有一个首尾呼应,代表中间是写代码的地方
- 你写好的Java代码保存的文件名称一定要和代码名称一模一样
- 代码保存结束后会生成一个.java的后缀文件
- Java中代码注释有两种://(单行注释)和/**/(多行注释)
- Java编程中代码命名规范:驼峰命名(除第一个单词,其它首字母大写)
1.1.2.3 Java程序运行流程
- 先编译,通过javac命令去编译
- 再通过java命令去运行
1.1.3代码的关注点
- Java程序中的主函数,帮助我们运行Java代码,能够看到程序运行的效果
- 没有main方法的程序是无法运行的,main方法不能乱写
1.2 Java数据类型
1.2.1 数据类型是什么
- 程序中如果要存储数据,则需要定义一种存储的格式,而这种格式我们叫做数据类型
Eg:数据类型好比容器,这里的容器我们拿杯子来形容,杯子是拿来装东西的,装的东西可以是水,可以是咖啡、牛奶,这些不同的内容就是各种类型的数据
1.2.2 数据类型分类
- 基本数据类型
- 引用数据类型
1.2.2.1 基本数据类型
- 8种基本数据类型:整形(4个),浮点型(2个),字符型(1个),布尔型(1个)
- 整形
- byte:存储一个字节,8位,存储的有效范围 -2^(8-1)~2^(8-1)-1
- short:存储2个字节,16位,存储的有效范围 -2^(16-1)~2^(16-1)-1
- int:存储4个字节,32位
- long:存储8个字节,64位
- 浮点型
- float:存储4个字节,32位
- double:存储8个字节,64位
- 字符型
- char:存储2个字节,16位。存储1个汉字,1个字母,1个特殊符号
- 布尔型
- boolean:没有长度的定义,只有两个值:true或者false。运用到程序中条件判断,逻辑判断...
1.3 Java中的变量
1.3.1 什么是变量
- 当我们想存储一个数字,一个字符,其他数据。则程序中会用一个变量的方式来存储值。我可以理解数学中的方程式中x,y,z
1.3.2 如何定义变量
- 语法:数据类型变量的名称 [ = 数值];
- 分号“;”,代表一段程序语句的代码结束
1.4运算符
1.4.1运算符分类
- 算术运算符
- 比较运算符
- 逻辑运算符
1.4.2算术运算符
- 简单算术运算符:+,-,*,/,%
- 复杂一点运算符:+=, -=, *=, /=, %=, ++, --
- 理解到上面的运算符即在做运算又在做赋值的操作
- +=:先加在赋值
- -=:先减在赋值
- *=:先乘法在赋值
- /=:先除法在赋值
- %=:先求模在赋值
1.4.3 比较运算
- 比较运算会有计算结果,但是结果的值是布尔类型
- 比较运算有哪些:>, <, >=, <=, !=, ==
1.4.4字符类型的比较原理
1.4.4.1字符编码的基础介绍
- 字符类型它是可以转换成一些数字,通过这些数字可以代表某一个字符。
- ascii码,对英文的字母,符号可以通过一个整型数字来表示
- uincode编码,对中文的字符通过十六进制数来表示
1.4.4.2 ASCII码
- 凡是字符类型存储是字母,数字,符号,它们之间的比较是通过ASCII方式来进行计算
1.4.4.3 unicode编码
- 中文汉字是可以通过字符类来存储的,中文汉字的比较其实是通过unicode编码来计算的
1.4.5逻辑运算符
- 语法规范:布尔值逻辑运算符 布尔值
- 主要包含: &&, &, ||, !, ^(异或)
- 与(&&, &):满足两个同时true,结果才是true
- 或(||, ||):满足其中一个为true,结果为true
- 非(!): !布尔值,得到结果就是相反的值
1.4.6三目运算符
- 语法:数据类型 变量名称 = 布尔表达式 ? 值1 : 值2;
- 当布尔表达式为true,则变量取值为值1
- 当布尔表达式为false,则变量取值为值2
1.4.7单目运算符
- 语法: 整型变量++, 整型变量--, ++整型变量, --整型变量
- 加号或者减号在变量后面,它运算的方式: 先使用后做运算
- 加号或减号在变量的前面,它运算的方式: 先做运算再使用
- 单目运算的计算过程每次只加1或者减1
1.5 条件判断
1.5.1 条件判断的分类
- if语句
- if..else语句
- if..else if语句
- if..else if...else语句
- switch语句
1.5.2 if语句
- 作用:给一个条件(true 或 false),然后条件为正,则执行if语句中代码
- 语法:
if (布尔类型) { //程序代码 }
if (布尔类型) { //程序代码 } else { //程序代码 }
if (布尔类型) { //程序代码 } else if(布尔类型) { //程序代码 } else if (布尔类型) { //程序代码 } else { //程序代码 } |
- 案例:判断3个数字中最大的和最小的
- if的使用规则
- if语句可以单独存在
- else if一定是在else前面
- if语句可以嵌套使用
1.5.3 switch语法
- 开关语句
- 语法
switch(值) { case 值 : //程序代码 break; case 值 : //程序代码 break; default : //程序代码 } |
Eg:单刀双掷开关
- 流程图
- 案例:从键盘中输入一位数字,然后给出这个数字的中文大写
- 键盘输入会用到Java中类库文件(类似网页中已经设计好的标签), Scanner
- 判断是不是输入的一位数字
- 最后在利用switch语句进行一个中文大写的转换
- Scanner是一个能够接收键盘输入的IO流,我们必须学习它的API文档
1.6 循环
1.6.1 循环分类
- while
- do..while
- for
1.6.2 while循环
- 语法
while (布尔值) { //程序代码 } |
- 不用把代码做成死循环,然后需要关注循环如何结束
- break关键字来停止循环
- return关键字来停止循环
- 案例:从1+2+...+100计算后得结果
- 循环是可以嵌套使用
- 案例:九九乘法表
1.6.3 do..while 循环
- do..while 循环是首先不判断条件先执行循环,然后再判断
- 语法:
do { //程序代码块 }while(布尔值); |
- 案例:九九乘法表
1.6.4 for循环
- 语法:
for (变量定义; 比较表达式; 变量递增) { //程序代码 } |
- 案例:九九乘法表
- for循环的执行流程
- 进入循环先执行变量的定义
- 判断循环里面的比较表达式是否为true
- 如果为true,则执行循环体里面的代码
- 循环体里面的代码执行结束后,再执行循环的递增条件
1.6.5 foreach 循环
- foreach循环是JDK5以后的新特性,主要针对数组,集合来完成比较方便的元素遍历访问
- 语法:
for (变量 : 变量) { //程序代码 } |
- 案例:遍历一个数组
1.6.6 continue 关键字
- 主要用在循环里面,跳出本次循环,接着执行下一次循环
1.6.7 总结break 和 continue
- break关键字,如果遇到是一种多重循环,则break只是跳出(结束)当前循环
- continue关键字,如果遇到是一种多重循环,则continue只是跳出本次循环,但是不是结束本次循环
1.6.8 任务
- 求出任意数字的各个位数之和
- 计算一个数字是不是水仙花数(各个位数的立方和等于此数)
- 求出任意数字是不是质数
- 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5
1.7 数组
1.7.1 数组的意义
- 定义一个变量的时候,一次性存储多个值
1.7.2 数组的语法
- 语法:
数据类型[] 变量名称 = 存储值; |
- 初始化
- 第1种:int[] a = new int[10]; 定义一个整型数组,能够存储10个值。这个数组是没有具体指定值,则默认为10个0
- 第2种:int[] a = {1,2,3,4,5,6}; 定义一个数组,且将具体值赋值给数组
- 第3种:int[] a = new int[]{1,2,3,4,5,6}; 定义一个数组
- 第4种:int[] a = {}; 定义一个数组,没有值
1.7.3 数组的分类
- 一维数组
- 多维数组:int[][] a = new int[2][3]; 二维数组
1.7.4 数组的赋值与遍历
- 索引:数组中元素存储是有个下标值,而且这个下标值是从0开始计算
- 数组的赋值
- 数组遍历:如何去访问数组中的元素
- 数组中有一个属性,length。它代表是数组长度定义
- 如何使用length,必须先将数组初始化
- 见这个代码: int[] a = new int[10]; int len = a.length;
- 一般遍历通过for循环来完成
1.7.5 数组的报错
1.7.5.1 数组未初始化异常
1.7.5.2 数组空指针异常
1.7.5.3 数组下标越界异常
1.7.5.4 不同类型数组不能直接进行转换
- 因为数组是一个引用类型数据,这个就需要和面向对象编程有关系
- 不是说什么都不能进行类型转换,而是需要看它们类型之间有没有关系(继承)
1.7.5.5 基本数据类型的数组不能强制转换
1.7.6 数据类型转换
- 为什么要数据类型转换
- 比如一个int类型转换成byte类型会导致byte类型精度损失
- 出现类型不兼容情况,也考虑类型转换
- 类型转换的方式有两种
- 自动类型转换
- 强制类型转换
- 什么时候是自动类型转换,什么时候是强制类型的转换。这个与数据类型的精度有关系
- byte --> short --> int (char) --> long --> float --> double,低精度往高进度走
- 自动类型转换:小往大(小的给大的赋值),类型自动转换
- 强制类型转换:大往小(大的给小的赋值),强制类型转换
- 强制类型转换语法格式:数据类型变量名称 = (数据类型) 变量名称
1.7.7 任务
- 给定一个数组,里面存储10个double类型数据。求他们中最大和最小
- 给定一个数组,求里面是水仙花的元素
- 给定一个数组,里面存储不限个数的元素。将数组中的元素进行逆序排列
- 随机生成100个英文字母,请统计这100个英文字母出现的次数,要求没有出现的就算做0次
- 写一个冒泡排序算法
1.8 字符串
- 字符串解决字符类型一些缺点,因为字符类型只能存储一个字符,但是要想存储多个字符,我们采用字符串方式
- 字符串在Java里面是一个类,按照我们前面讲到数据类型,字符串是一个引用类型
1.8.1 字符串初始化
1.8.2 字符串构造方法
- String(String original):构造方法定义, 括号里面代表能够接收的数据类型是什么
- 构造方法的使用需要通过 new 关键字来应用
1.8.3 字符串方法的使用
- 为什么要给大家讲讲字符串的方法?
- 求某个文件的后缀名是什么(IO流程用法)。比如:1.txt, 2.exe, 3.doc,采用字符串的截取子串的方法
- 判断你输入的电话号码是否包含了其他特殊符号。在开发的过程中对数据进行校验,采用字符串的求每个字符,然后加以判断
- 如果输入的内容包含有非法的信息,则在开发过程中需要替换这些非法信息,采用字符串的替换方法
- 常用字符串方法进行举例说明
- public char charAt(int index):根据索引去找其中某一个字符
- public boolean equals(Object anObject):比较两个字符串是否相当
- public boolean equalsIgnoreCase(String anotherString):忽略大小写,然后去比较两个字符串是否相当
- public int indexOf(String str):求某个字符在原始字符串中索引位置
- public int length():求字符串的长度
- public String replaceAll(String regex,String replacement):将字符串中某个字符进行替换操作
- public String[] split(String regex):根据字符串的某一个特殊符号进行字符串的拆分
- public String substring(int beginIndex):求子串
1.8.4 charAt(int index)
- public char charAt(int index):根据索引去找其中某一个字符
- 括号里面方法允许接收变量类型
- 外面的char是指这个方法计算的结果是什么类型
1.8.5 equals(Object another)
- public boolean equals(Object another)
- 参数Object another,Object是一个数据类型,代表任意数据类型
1.8.6 indexOf(String str)
- public int indexOf(String str):传入一个字符串去寻找这个字符串的位置
1.8.7 replaceAll(String regex,String replacement)
- public String replaceAll(String regex,String replacement):将字符串中某个字符进行替换操作
1.8.8 split(String regex)
- public String[] split(String regex):根据字符串的某一个特殊符号进行字符串的拆分
1.8.9 substring(int beginIndex)
- public String substring(int beginIndex):求子串
1.9 面向对象
1.10 面向对象要学习的内容
- 告诉我们什么是面向对象
- 类和对象
- 类的语法,结构
- 方法,构造方法,全局变量,局部变量
- 面向对象四大特征:继承,封装,多态,抽象
- 高一点点的应用:内部类,匿名内部类,外部类
1.11 类和对象
1.11.1 什么是类
- 利用Java编程语言来描述一个模型或是一个对象特征,如果要编写一个段程序来表达他们的特征,则我们需要使用Java中类的来完成它的实现
- 定义一个类的语法
修饰符 class 类名 { 属性 方法 } |
- 属性,就是我们平时学到Java基础中的变量
- 方法,代表这类的功能有哪些
- 案例:描述一个人的特征和行为。前提条件使用Java语言来描述他们
public class Person {
public double height; //声明一个变量, 描述人的身高 public double weight; //声明一个变量, 描述人的体重
public void eat() {} //声明一个方法,描述人的行为方式, 人这类的功能
//main方法是整个Java应用程序的入口 //程序运行的入口 public static void main(String[] args) { System.out.println("Hello World!"); } } |
1.11.2 什么是对象
- 对象:一个类的具体实现,或者说一个类具体展现形式
- 案例:定义一个人类,则具体实现可以张三,也可以是李四。。。。
- 对象语法:
类名 对象 = new 类名(); |
- 上语法的几个关键点
- 语法中的对象用程序方式来说明(或者实现),则对象就是经常定义变量
- 类名又是什么,就是对象的数据类型(引用数据类型)
- new 类名(),类的构造方法
- new 关键字就是程序中初始化的含义
- 案例:实现Person类,然后去获取到Person类的属性和方法
1.11.3 类和对象之间区别
- 类是一个对象的描述
- 对象是一个类具体实现,好比一个Peron类在实现过程中可以产出不同对象(例如:通过Person可以产出一个对张三或者李四的描述)
1.12 方法
1.12.1 方法定义的方式
- 无返回值+无参数的方法定义
- 有返回值+无参数的方法定义
- 无返回值+有参数的方法定义
- 有返回值+有参数的方法定义
1.12.2 无返回值+无参数的方法定义
- 语法结构
修饰符 void 方法名称() { //程序代码 } |
- 具体实现
1.12.3 有返回值+无参数的方法定义
- 语法结构
修饰符 返回类型 方法名称() { //程序代码 return 返回值; } |
1.12.4 无返回值+有参数的方法定义
- 语法
修饰符 void 方法名称(参数, 参数, ...) { //程序代码 } |
- 参数是什么意思:一个变量的定义
- 参数的作用:在执行方法时候可以接收值
1.12.5 有返回值+有参数的方法定义
- 语法
修饰符 数据类型 方法名称(参数,参数, ....) { //程序代码 return 返回值; } |
1.13 面向对象中的变量应用
1.13.1 面向对象中的变量的叫法
- 全局变量,叫作属性
- 局部变量,在方法里面定义变量叫作局部变量
- 参数
1.13.2 变量作用域
- 全局变量作用域:在整个类中有效,换句话说类里面的所有方法都可以使用
- 局部变量作用域:在方法里面有效
- 参数:在方法里面有效(局部变量),但是它可以接收传递的值