一.计算机的演变
黑色命令行界面转变------>为可视化界面
在windows系统中的界面就是cmd
cmd:命令行形式的操作电脑方式
二.CMD
启动:win+R 打开命令,输入cmd,再点击回车键
cmd常见快捷键:
1)盘符 + : 例如:E: 进入E盘
2)dir 显示当前文件下的所有文件
3)cd+文件名 进入一个文件
4)cd .. 回退上一级目录
5)cd 目录1\目录2
6)cd \ 一次性回到盘符目录
7)cls 清屏
8)exit
三.Java的下载与安装
下载网址:www.oracle.com
java程序运行分三步:
1.在记事本上写好对应的程序语句 a.java
2.打开cmd命令 ,进入这个程序文件的目录,然后通过 javac a.java 命令编译该文件,得到一个.class文件
3.还是在cmd命令下,通过Java a的命令,即可执行该语句(注意这里的文件没有后缀名)
配置环境变量
目的:
具体步骤:
四.Java的特性
五:Java的键盘输入
注意:不要讲nextInt 和nextLine混用,不然在输入nextInt的时候nextLine接受不到数据
六:java跨平台的原理
java程序是先经过编译成.class文件,然后在虚拟机中运行,而不是在windows,mac,linux系统中运行,所以它支持跨平台
七:Java基础概念
1.JRE和JDK
JRE:java Running Environment java运行环境
JDK: java Develop kit java 开发工具
JDK>JRE>JVM
制表符:\t
'
八:数据的存储
计算机的三种存储数据:文本,图片,声音
1.文本的存储
2.图片
3.声音
首先:所有的数据类型都是二进制存储的
进制间的转换
九:数据类型
数据类型:基本数据类型,引用数据类型
1.基本数据类型
注意点:
1.在定义一个long类型的时候,如果数据很大,要在数字后面加上L
例如:long a=111111111L;
2.float类型的数据,在定义的数值后面需要加上F
float a=10.63F
十.标识符
标识符:给类,变量,方法起的名字
命名规则:
十一:键盘录入
键盘录入介绍:Scanner
十二:IDEA
1.下载:直接百度IDEA,在官网下载即可
2.IDEA项目结构
3.重要的设置
1)字体大小设置
2)注释的颜色修改
3)自动导包
4)提示忽略大小写
5)设置IDEA背景图片
4.常见项目操作
关闭项目
十三:运算符
分类:
1.算术运算符
注意点:1.当使用除法的时候,10/3只取整数,得3
2.小数参与运算,结果不一定精确 10/3.0=3.333334
算数类型转换
分类:隐式类型转换和强制转换
隐式转换的规律
强制转换
问题:大转小会出现数据的不安全,比如int a=300 如果强转为byte,那就会出现错误
还有一种特殊的情况:字符+数字
这时候字符是对应着ASCII码表来查询的,字符参与运算时,会自动将字符和ASCII表进行转换
两个关键对应:A 65 ;a 97
自增自减运算符
注意点: int a=10;
1.System.out.println(++a);//11
2.System.out.println(a++);//10
结果是不一样的,a++表示先运算,再给a+1
++a表示先给a+1,再参与运算
数值运算符:
+=.-=这些运算符都隐藏了强制转换
关系运算符
逻辑运算符
这4个运算符两边的条件都需要执行,所以效率低下
^异或运算:符号两边相同即为false,不同即为true
!:逻辑非,也就是取反
短路逻辑运算符 :&& , ||
这个运算符代表A&&B 如果A为false.那么就不用去判断B了.这样就能提高代码执行效率
三元表达式
int num=10>20?50:60;用一个变量去接受参数就可以了
注意:这个地方
前面的式子是作判断,如果是true,那么就取值第一个,false取值就是后面一个
十四:原码,反码,补码
1.原码
2.反码
当数是正数,数的原码,反码,补码都是相同的;
如果是负数,那么除了首位,后面的都取反,补码会在末尾+1,这样是为了避免反码有0000000,1111111两种出现0的情况.
3.补码
正数的时候和原码,反码是一样的,如果是负数,则在末尾+1
不同类型的10在不同数据类型的区别
计算机中所有数据都是按照补码形式存储的
0&1=false 只有两边都为1才为true.0&任何数都是0,1&任何数都是它本身
十五:流程控制语句
1.顺序结构
程序按照每句的行号进行运行
2.分支语句
if(判断条件){
程序体:
}
在if语句中,如果满足判断条件,那么就执行程序体中的语句
if(判断条件){
程序体1:
}else{
程序体2;
}
3.第三种if结构
if(){
}
else if(){
}
else{}
switch分支语句
case穿透:如果在各个执行语句没有写break的话,那么就会结束switch语句,
jdk12新特性
简化了case语句
循环语句
1.for循环
for(循环初始条件;循环判断条件;循环控制条件)
2.while循环
典型案例
循环条件控制语句
如果要跳过某次循环,那么就用continue语句,
如果要结束当前循环,直接使用break语句.
生成随机数
十六:数组:
概念:一种容器,可以同时存储多个同种类型数据
数组的定义
int[] nums=new int{1,2,3};
或者 int[] nums={1,2,3};
如果我们去创建一个数组,然后直接打印它,那么会出现一串字符,这个字符信息就是这个数组的地址信息,
数组元素的获取:索引
相关注意点
1.索引也称为下标,从0开始
2..length代表数组的长度
3.arr.fori 快捷语句,可以快速遍历
数组的动态初始化
默认初始化数值
数组常见异常:
数组越界异常
Java内存分配
栈:所有的方法都会放在栈里面执行
堆:所有new出来的对象都会放在堆中,然后会返回一个地址值
十七:方法
方法:程序中最小的执行单元
作用:提高代码复用性,提高可维护性
重要概念:形参,实参
形参:定义在方法上的参数
实参:调用方法输入的参数
返回值:直接将方法执行的结果返回
方法的完整定义
方法的注意事项
1.方法不调用就不执行
2.方法里面不能再定义方法
方法的重载:
同一个类中,方法名相同,形参不同,即构成方法的重载,与返回值类型无关
return和break的关系
return是针对方法来说的,如果执行return,那么方法就直接结束,
break是针对循环的,如果循环体执行break.那么循环结束
方法应用时的基本传递方式
方法首先会被放在虚拟机的方法栈中,依次执行main方法中的程序,方法执行顺序是先进后出
基本数据类型和引用数据类型
基本数据类型:将数据存储在自己的空间内,方法栈中
引用数据类型:内存中存储的是地址值,而实际对象是存在在堆中的
在方法中参数的引用
如果传递的是引用数据类型,那么方法就会对堆中的数据进行更改,也就是说两个方法改的是同一个值
十八.面向对象
面向对象的思想:其实这种思想和我们平时生活是类似的,比如人洗衣服,运动,人的身高,体重,这些都是以人为核心,通过人这个对象才能去查询对应的属性和方法,
类和对象
类:对有共同特征的对象的集合
对象:具体存在的一个东西
必须要先创建类,才能获取对象
创建对象的方法:类名 对象名=new 类名()
两种类的
1.javaBean类,用来描述某一类的相关信息,无main方法
2.测试类,包含main方法的类
注意点:一个类文件中可以创建多个类,但是public修辞的类只能有一个
封装
设计对象的方法,正确的设计属性和方法,从而直接调用
private关键字
成员变量和局部变量
成员变量:定义在类上的
局部变量:定义在方法内的变量
构造方法的注意事项
javaBean的快速构建
1.安装ptg插件
2.创建好一个类,然后设置对应的属性
右键鼠标,选择ptg然后,生成方法,构造方法
方法执行的流程
首先这个类文件会被加载成为.class文件放在方法区中,然后执行main方法,如果new了一个对象,那么会把对象创建在堆中,对象信息中会存放对应的方法地址,栈区会存放对象的地址,
当对象要调用方法,栈会根据地址值找到堆中的对象,然后这个对象会找到方法区中对应的方法
如果没有指针指向堆中的对象,那么对象就会被回收
基本数据类型和引用数据类型
this关键字
String占位符
System.out.printf("%s你好呀%s", "张三", "李四");注意是printf 有多少个占位符,那么后面就要接上多少个字符串
十九.API和字符串
API:Application Programming interface
应用程序接口,简单来说就是别人写好的东西,我们不用自己编写,直接使用即可
即java已经封装的各种类
字符串
String
注意点:String是不可变的,它的值在创建之后就不能再被更改
创建String的方式
字符串内容的比较
对一个字符串,取其任意个字符,用charAt()方法
char类型的数据在参与运算的时候,会自动转换成int类型,根据ASCII表作运算
StringBuilder
概念:可以看做是一个容器,用来存放多个数据,主要用来拼接字符串
常见方法
StringJoiner(如果一个字符串中间由间隔符号组成,那么推荐使用)
在创建对象的时候就已经指定了拼接的中间连接符号,
主要方法
字符串的原理
二十:集合
集合和数组的区别
1.长度,数组是定长的,集合长度可变
2.存储的数据类型:数组可以存基本类型和引用类型,而集合只能存储引用数据类型
ArrayList的成员方法
包装类:能够将基本数据类型转换为包装类,然后就可以加入到集合中去了
两个代码的知识点
1.如果我们在循环语句里面嵌套了switch语句,那么break是采用的就近原则,
如果我们要用break控制外面的循环, 这时候我们可以给外面的循环加一个标记.
2.如果要停止虚拟机,则可以采用System.exit(0)方法停止虚拟机
static关键字
当一个类被加载的时候,那么类的静态变量也会被加载到堆内存中,也称之为静态存储区,这时候所有的对象都可以去获取这个静态变量
工具类:帮助我们做一些事情的类
在创建工具类后,构造方法要设置为私有
虽然我们在使用静态方法的时候是直接调用的,实际是省略了this关键字
静态方法注意点
1.静态方法没有this关键字:其实每次对象去调用方法的时候,虚拟机会将该对象赋值给this,然后用this去调用方法,所以在非静态方法下,每次调用的this都是和对象相关的
2.静态方法只能调用静态方法
3.非静态方法可以访问所有
二十一:继承
关键字:extends
什么是继承:继承是面向对象的三大特征之一,即子类能继承父类的信息
继承的格式:public class extends A(){}
子类的特点:1.子类能够继承父类的所有属性和方法
2.子类还能延伸出新的属性和方法
继承的特点:java支持单继承,不支持多继承,但是支撑多层继承
注意点
1.每个类都直接或者间接继承自Object,任何子类都可以调用父类和间接父类的属性和方法
2.子类只能访问父类中非私有的数据
子类到底能继承父类的哪些内容:
1.子类能继承父类所有的成员变量
2.但构造方法不能继承,
3.成员方法只能继承非私有的
子类继承父类的方法是有限制的
成员变量的访问规则:就近原则,同样的变量名字,先访问子类的变量
成员方法的访问同样遵循就近原则
方法的重写
方法重写的本质:虚方法的覆盖
方法重写的注意事项
在继承中的构造方法访问特点
在创建子类对象的时候,会先创建父类对象,因为必须先加载父类对象中的属性和方法,才能被子类进行调用.
子类构造方法的第一句默认是super(),
this和super
二十二:多态:同种类型的对象,表现出不同的形式
比如创建了一个人的对象,在不同场景下发挥学生,老师,管理员的功能
多态的表现形式:父类对象 对象名=子类对象;
多态的前提:
1.继承
2.父类引用指向子类对象
3.方法的重写
多态调用成员变量和成员方法的规则
多态的优势
1.首先是对应的不同子类对象可以调用不同的子类方法
2.其次设计方法的时候,可以将父类作为形参,这样就可以接受多种的子类对象
多态的弊端:如果子类对象中有父类中没有的新方法,那么
instanceof关键字
a instanceof b :a对象是不是b类的
instanceof 的jkd14新特性:
package:包,用来管理我们的代码
全类名:包名+类名
导包的规则
final关键字
导入一个模块的方法
权限修辞符
代码块
1.局部代码块
在方法内部定义一个代码块,目的是让变量尽快消失,代码块执行完毕,则变量消失
2.构造代码块:写在成员变量的位置,在构造方法执行之前执行
3.静态代码块:格式:static{} ,当类加载时即执行,且只执行一次
二十三.抽象类
1.格式:public abstract class 类名(){}
2.注意点:
1)抽象类不能实例化
2)抽象类中不一定有抽象方法,有抽象方法的一定是抽象类
3)抽象类可以有构造方法
抽象方法是没有方法体的,并且抽象方法在子类中必须实现
什么情况下会用抽象类:在团队开发中,需要规定某个方法的格式,将该方法设置为抽象方法,那么不同子类在实现实现这个抽象方法的时候就有统一的格式
二十四:接口
1.定义:public interface 接口名字{}
2.接口的实现关键字: implements
接口能够多实现
接口成员的特点
1.默认修辞符:public
2.没有构造方法
3.接口方法在jdk8之前默认是public abstract 修辞,后面可以定义实例方法
jdk8新增有方法体的方法
设计模式:解决问题的套路
适配器设计模式:
有一个接口定义了非常多的方法,这时候如果创建一个类A去实现它,那么就产生了太多不必要的方法实现,这时候我们可以创建一个类B(类B一般设置为抽象类)去实现这个接口,然后用A去继承B接口,这样就能只针对我们想要的方法进行重写
二十五:内部类
内部类中外部类不能访问内部类的变量,但是内部类能随意访问外部类的成员变量.
如果要访问外部类中的变量,需要在外部类的方法中创建一个内部类的对象,通过对象去调用属性
内部类的分类
1.成员内部类
在类中再创建一个类
2.静态内部类
3.最重要的匿名内部类
二十六:常见的API
Math
常见方法
开平方根 sqrt(),开立方根 cbrt();\
System
runtime:需要先创建runtime对象,然后才能调用相关方法 ,即Runtime.getRuntime
object
equals方法,a.equals(b),会先判断b是不是string类型的,如果不是,直接返回false,如果是,再判断内容
public class Demo1 {
public static void main(String[] args) {
//1.BigInter的第一种创建方式,第一个参数为指定随机数的大小为2的4次方
BigInteger bigInteger=new BigInteger(4,new Random());
System.out.println(bigInteger);
//2.获取一个指定大小的数
BigInteger bigInteger1=new BigInteger("1000");
System.out.println(bigInteger1);
//3.获取规定进制的最大整数
BigInteger bigInteger3=new BigInteger("1110011",2);
System.out.println(bigInteger3);
}
}
bigInteger的方法
Bigdecimal:用于表示精确小数
方法
二十五:正则表达式
作用:1.用来校验字符串是不是满足一定的规律
2.用来查找我们要找的内容
规则
\转义字符
// 转义字符
System.out.println("\"");
System.out.println("C:\\itcast\\javaSE");
\\代表第一个\将第二个\转义为正常的\
简单记忆:java中\\就代表一个\
简单案例
package regex;
public class Demo {
public static void main(String[] args) {
String s="643904304";
System.out.println(s.matches("[0-9]\\w{5,10}"));
//存在a
System.out.println("a".matches("[abc]"));
System.out.println("ab".matches("[abc][bcd]"));
//不存在a
System.out.println("a".matches("[^abc]"));
//如果前面有两个字符,那么后面匹配的规则就有多少个[];
//匹配a-zA-Z
System.out.println("a".matches("[a-zA-Z]"));
//如果要写两个范围的交集,要用&&
System.out.println("a".matches("[a-z&&[A-Z]]"));
//匹配任意一个字符
System.out.println("唉y".matches(".."));
//匹配\\d
System.out.println("10".matches("\\d\\d"));
// \\w只能代表一个英文或者数字
System.out.println("a".matches("\\w"));
// \\W代表非单词字符
System.out.println("a".matches("\\W"));
// {6,}代表某个数至少出现6次
System.out.println("abcdef".matches("\\w{6,}"));
System.out.println("abcdef".matches("[a]{1}"));
}
}
在工作中,一般不需要我们去写正则表达式,只需要在百度或者其他渠道去匹配就好了,这里推荐一个插件any-rule
爬虫:用来在文本中找到我们要查找的内容
package regex;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Demo3 {
public static void main(String[] args) {
String str="java自充面世以来,已经冲java7更新到java18了";
//指定爬虫规则,即正则表达式规则
Pattern p = Pattern.compile("java\\d+");
//找到对应的索引
Matcher matcher = p.matcher(str);
//通过索引找到符合条件的段落
while (matcher.find()) {
//找到匹配的字符串,按照索引进行截取
String group = matcher.group();
System.out.println(group);
}
}
}
二十六:常用API
1.时间类
SimpleDatefornat
Calender类:抽象类.不能直接创建对象
jdk8的新时间
包装类:将基本数据类型包装起来,然后转换成引用数据类型
1.包装类如果要进行数值运算,是需要拆箱的,也就是说将其转换为基本类型,但是在jdk5之后,就引入了自动装箱和自动拆箱
当我们用Scanner键盘录入的时候,如果点击空格,回车就会停止输入,所以应该用nextLine方法避免该情况
算法:
1.查找
顺序查找:将数组中的元素按照索引依次查找,直至找到对应的元素
二分查找:在有序的数组中,每次查找排除一半的数字
2..排序算法
冒泡排序:相邻元素两两比较,小的放左边,大的放右边,第一轮循环能找到最大值,每轮都能找到剩下数据中的最大值
3.插入排序:先将一个数组分为两部分,第一部分是有序的,第二部分无序,依次将无序部分的每一个数与有序部分每个数进行比较,然后找到对应的位置插入进去
4.递归算法
方法A里面引用了A方法,一定要设置出口
5.快速排序
Arrays:操作数组的工具类
Arrays的sort方法可以直接对Integer类型的数组做正序或者倒序的排序
package Arrays;
import java.util.Arrays;
import java.util.Comparator;
public class Demo2 {
public static void main(String[] args) {
Integer[] arr={3,4,1,2,5,6,7};
Arrays.sort(arr, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;
}
});
System.out.println(Arrays.toString(arr));
}
}
lambda表达式
格式
lambda表达式的限制:只有函数式接口才能使用
lambda表达式的省略规则
二十七:集合进阶
分为两大类:
体系结构
collection的主要方法
Collection 是一个接口,不能直接创建对象,我们需要通过多态的方式创建其子类对象
集合遍历的三种通用方式
由于set集合没有索引,所以不能使用fori形式遍历
迭代器遍历
package collection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class Demo2 {
public static void main(String[] args) {
Collection<String> collection=new ArrayList<>();
collection.add("aaa");
collection.add("bbb");
collection.add("ccc");
collection.add("ddd");
Iterator<String> iterator = collection.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
}
}
增强for遍历:简化迭代器遍历
package collection;
import java.util.ArrayList;
import java.util.Collection;
public class Demo3 {
public static void main(String[] args) {
Collection<String> collection=new ArrayList<>();
collection.add("aaa");
collection.add("bbb");
collection.add("ccc");
collection.add("ddd");
for (String s:collection){
System.out.println(s);
}
}
}
lambda遍历
List
List遍历选型
二十八:数据结构
概念:计算机底层存储,组织数据的方式
1.栈:先进先出
2.队列:先进先出,后进后出
3.数组:通过索引查找数据,查询快,删除慢(数据会前移)
4.链表:每个节点包含数据和指针,链表查询慢.增删快
ArrayList的底层原理
LinkedList底层原理
泛型
好处:1.统一了数据类型
2.将运行时的问题提前到了编译阶段
泛型的细节
泛型的使用场景
泛型的通配符:可以指定泛型的范围
? extends A 代表A和A的子类才能作为形参执行到方法里面
? super B 代表B和B的父类才能作为形参执行
二叉树
二叉树的遍历方式
平衡二叉树:每个节点的左右子树高度差不超过1
红黑树