JAVA开发体系基础学习

零基础,历时一个月半,完成了Java体系基础内容的学习,现将学习笔记贴出来,共零基础玩家一起撸。

文章目录

    • @[TOC]
    • 一、类和对象
    • 二、继承
    • 三、接口
    • 四、集合和映射
    • 五、线程
    • 六、数据库
    • 七、HTML+CSS
    • 八、Maven
    • 九、JavaScript
    • 十、JSON
    • 十一、Ajax
    • 十二、MVC
    • 十三、Servlet
    • 十四、Mybatis
    • 十五、Spring
    • 十六、Spring MVC和SpringBoot
    • 十七、补充:JSP
    • 十八、补充:Java多线程
    • 十九、补充:流式编程

一、类和对象

1、类之间的关系
	依赖
	聚合
	继承
2、new 构造函数;
	实例化对象
	返回值为引用
	可赋值给一个对象变量
3、所有的对象都保存在堆中
4、构造器
	与类名相同
	每个类可以拥有一个或者多个构造器
	总伴有new关键字出现
	可以有0个或多个参数
	没有返回值
5、final
	修饰不可变类的对象,相当于常量
	修饰可变类的对象,相当于变量
6、static
	属于类且不属于类对象的变量和函数
	不需要使用对象调用静态方法
	全局变量,构造对象不会改变其值
7、java类包含方法区、堆区和栈区
	方法区:程序入口,包含所有代码的字节码,static,main()以及类的成员和方法
	堆区:动态分配内存
	栈区:出入栈执行函数,main()中变量,以及堆中分配内存的地址
	程序代码以字节码形式存储在硬盘中,当执行程序时,字节码调入内存区域。从方法区中找到
main()方法,并入栈,方法区中的变量可共享,存在于整个程序执行过程中。如果main()中有
变量,则在栈中初始化变量;如果有new关键字,则在堆中分配一个内存区域,分配成功后返回给栈
一个该区域的地址,new出来的对象的函数通过地址调用在栈中出入栈执行,而成员赋值则在堆中进行。
8、OOP
	数据成员私有
	对数据成员提供初始值
	将复杂的类进行分解
	优先使用不可变的类

二、继承

1、super
	调用超类构造器和方法
	必须在子类第一句
2、继承
	is-a:每个...都是...
	子类包含父类
	父类不能调用子类中的方法
	子类可以退化成父类
	父类不能进化成子类
3、强制类型转换
	只能在继承层次内进行
	父类强制转换成子类时,要用instanceof进行检查
4、抽象类
	abstract声明的类
	抽象类中可能包含具体方法
	没有抽象方法的类也可以声明成抽象类
	有抽象方法的类一定是抽象类
	抽象类子类不一定要全部实现父类中的抽象方法
	抽象类不能实例化
	抽象父类的对象指向具体子类
	编译器只能调用类中的方法
5、Java权限修饰符
	public:外部完全可见
	private:本类可见
	protected:同包和子类可见
	本包可见:默认
6、编写equals方法
	(1)方法中的参数为Object对象
	(2)判断this对象和Object对象是否相等
	(3)判断Object对象是否为空
	(4)比较this和Object的类。多字段比较用this.getClass,单一字段比较用instanceof
	(5)将Object对象强制转换为this对象
	(6)根据字段使用==运算符一一比较
7、Object三大方法(类里重写)
	equals:判断相等
	hasCode:equals返回true,则哈希值相等
	toString:打印调试信息
8、ArrayList
	可变容量的数组列表
	声明数组列表:var xx = new ArrayList(capacity);
	添加元素:xx.add();
	目前容量:xx.size();
	删除元素:xx.remove();
	访问元素:xx.get(i);
	设置元素:xx.set(i,xx1);
9、继承设计
	(1)公共操作和字段放在超类中
	(2)不使用受保护的数据成员
	(3)使用继承实现is-a关系
	(4)使用多态

三、接口

1、接口属性
	不是类,可看成没有数据成员的抽象类
	能声明接口变量,但只能指向实现了这个接口的类对象
	可以包含常量
	一个类可以实现多个接口
	接口中所有方法都默认public(不必显式写)
2、lambda表达式
	()->{};
	接口调用

四、集合和映射

1、集合
	第一层(接口):Collection
	第二层(接口,继承):List,Set,Queue
	第三层(类,实现):ArrayList,LinkedList,HashSet,TreeSet,LinkedHashSet,PriorityQueue
2、映射
	存放键值对
	散列映射对键进行散列,树映射根据键的顺序将元素组织为一个搜索树
	HashMap,TreeMap
3、迭代器
	先固定好集合(add,remove)后,再操作迭代器(add,remove)
	定义好迭代器后,集合对象本身不能操作了
	Iterator不支持add和remove
	ListIterator支持add和remove
	先next(),后remove()

五、线程

1、创建多线程的3种方式
		继承线程类Thread
		实现接口Runable
		匿名类
2、
**----补充**
1、Java产生随机数的方法
		Random类:如,random.nextInt(1000);就会产生一个1000以内(不含1000)的随机整数
		Math.random():产生一个[0,1)的随机数
2、时间
		Date date = new date();
		格式化:
		日期转字符串:
			SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			String str = format.format(date);
		字符串转日期:
			SimpleDateFormat format1 = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
			String str1 = "2020/7/10 8:55:55";
			Date date1 = format1.parse(str1);

六、数据库

1、建库
		create database dbname
2、建表
		create table tablename(
		variablename 数据类型(length),
		...
		PRIMARY KEY variablename
		)DEFAULT CHARSET utf8;
3、添加
		insert into tablename values(...);
4、查找
		select * from tablename where...;
5、更新
		update tablename set variablename = newvalue where ...;
6、删除
		delete from tablename where variablename=xx;
7、备份
		库-输出-输出类型
8、还原
		库-输入-输入类型
9、内联、左(外)联、右(外)联
		内联:inner join.两表相同字段相连
		左联:left join...on.两表相同字段相连,并显示左表中有而右表中并无对应数据的项
		右联:right join...on.与左联相反

七、HTML+CSS

>1、HTML
标题:

换行:
注释: 段落:

,标签中的文字会自动换行 粗体:, 斜体:, 预格式(保留原来文本中的格式):

删除线:
下划线:
图像:,绝对路径:"file://full_path"
	图像大小:
居中:
替换图片上的文字: 超链接: 新页面打开: 使用图片作为超链接: 表格: :行 :列 :带边框
:表宽 :行背景色为灰色 列表:
    :无序
      :有序
    1. :列表项 布局标签: :内联,不分行
      :分行 字体: :字体颜色,大小(大2号) 内联框架: 浏览器页面中打开浏览器页面:
:列宽 :文字水平居中 :垂直居中 :跨越2列,水平合并 :跨越两行,垂直合并