零基础,历时一个月半,完成了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<ClassName>(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
标题:<h1><h2><h3>
换行:</br>
注释:<!--xxxx-->
段落:<p>,标签中的文字会自动换行
粗体:<b>,<strong>
斜体:<i>,<em>
预格式(保留原来文本中的格式):<pre>
删除线:<del>
下划线:<ins>
图像:<img src="full_path"/>,绝对路径:"file://full_path"
图像大小:<img width="" height="" src=""/>
居中:<div align="center">
替换图片上的文字:<img src="" alt=""/>
超链接:
<a href="url">
新页面打开:<a href= "url" target="_blank">
使用图片作为超链接:<a href="url"><img src=""/></a>
表格:
<tr>:行
<td>:列
<table border="">:带边框
<table width="">:表宽
<td width>:列宽
<td align="center">:文字水平居中
<td valign="middle">:垂直居中
<td colspan="2">:跨越2列,水平合并
<td rowspan="2">:跨越两行,垂直合并
<tr bgcolor="gray">:行背景色为灰色
列表:
<ul>:无序
<ol>:有序
<li>:列表项
布局标签:
<span>:内联,不分行
<div>:分行
字体:
<font color="" size="+2">:字体颜色,大小(大2号)
内联框架:
浏览器页面中打开浏览器页面:<iframe src="url" width="" height="">
文本框:
<input type="text" size="10" value="初始值" placeholder="背景文字">
密码框:
<input type="password">
表单;
<form action ="url">:将数据提交到url中去
<form method = "get">:默认,地址栏可见输入框中信息
<form method = "post">:地址栏不可见输入框信息,提交二进制文件必须为post
访问超链接和地址栏输入地址是get方式
单选框:
<input type = "radio" checked = "checked" name="xx" value="xx">
name相同则单选框在同一个组
复选框:
<input type = "checkbox">
下拉列表:
<select size="2" multiple="multiple">
<option selected = "selected">xx</option>
<option>xx</option>
</select>
size:设置高度
multiple:设置可以多选
selected:设置选中
文本域:
<textarea cols="10" rows="8">:设置宽度和高度
按钮:
<input type = "button" value="xx">:普通按钮,不具有提交form功能
<input type = "submit">:提交按钮,提交form
<input type = "reset">:重置按钮,重置输入框中的数据
<input type = "image" src="url">:使用图像作为按钮,能提交form
2、CSS
语法:selector {property:value}
选择器{属性:值}
<style>
p{
color:red;
}
</style>
选择器:
元素选择器:
<style>
p{
color:red;
}
h1{
color:red;
}
</style>
id选择器:
<style>
p{
color:red;
}
#p1{
color:blue;
}
#p2{
color:green;
}
</style>
<p>没有id的p</p>
<p id="p1">id=p1的p</p>
<p id="p2">id=p2的p</p>
类选择器:
<style>
.pre{
color:blue;
}
.after{
color:green;
}
</style>
<p class="pre">第一个</p>
<p class="after">第二个</p>
注释:/**/
字体:
font-size:尺寸
font-style:风格
font-weight:粗细
font-family:字库
鼠标:
cursor:
表格:
table-layout:automatic:自动适应大小
table-layout:fixed:固定大小
border-collapse:separate:边框分离
border-collapse:collapse:边框合并
边框:
border-style:边框风格
solid:实线
dotted:点状
dashed:虚线
double:双线
border-color:边框颜色
border-width:边框宽度
内边距:
padding-left:左内边距
padding-right:右内边距
padding-top:上内边距
padding-bottom:下内边距
padding:上下左右
外边距:
margin-left:左外边距
margin-right:右外边距
margin-top:上外边距
margin-bottom:下外边距
超链接:
link:初始状态
visited:已访问过
hover:悬停
active:点击未弹起
隐藏:
disply:none:隐藏一个元素,让出空间
visibility:hidden:隐藏一个元素,不让出空间
CSS文件:
直接写在html style标签里
写在css文件里,在html文件中包含
<link rel="stylesheet" type="text/css" href="/study/style.css" />
优先级:
style标签优先级高于css文件
style属性优先级高于style标签
!important优先级最高
绝对定位:
position:absolutely:相当于该元素从原来格式中删除
z-index:谁小谁被覆盖
相对定位:
position:relative:不会删除元素,而是相对原来位置移动到某个位置
浮动:
float:right:原本高度向右浮动,让坑
float:left:原本高度向左浮动,占坑
clear:left:禁止向左浮动
CSS显示:
内联:不换行,不能指定大小,如span
块级:指定大小,换行,如dev,h1
list-item:显示为列表
table:显示为表格
inline-table:显示为前后无换行的表格
table-cell:显示为单元格
居中:
内容:
align=“center”
style=“text-align:center”
元素:
span的居中可以通过放置在div中,然后让div text-align实现居中
垂直:
line-height:适合单独一行居中
设置上下边距
表格:display:table-cell ;vertical-align:middle
八、Maven
作用:
用于管理和构建java项目的工具
相同的项目结构
pom.xml用于维护当前项目都用了哪些jar包
src/main/java存放所有的java代码
src/test/java存放所有测试代码
统一维护jar包
九、JavaScript
组成:
语言基础+BOM+DOM
注释:
和java一样
变量:
在开头定义,可用var关键字或者不用
规则和java类似,可用$开头
调试:
alert(1):弹出对话框,表明正确
f12---console
变量:
var声明
typeof variablename:查看变量类型
变量是伪对象,有属性和方法,如:
variablename.length:查看变量长度
variablename.toString():转换为字符串
variablename.parseInt():转换为整型
variablename.Boolean():转换为bool型
Number和parseInt都可用来进行数字转换,但Number转换对象仅限数字,而parseInt可以是字符串
String和toString都会返回字符串,如遇空串,String会返回null,而toString会报错
函数:
格式:function funname(para){return xx;}
调用:funname(para);
获得或设置输入框的值:document.getElementById("id").value
变量作用域:
局部变量
全局变量
运算符:
和C++一样
条件语句:
if
else if
switch
循环语句:
for
while
do-while
forEach
continue
break
异常捕获:
try{
}catch(err){}:使得出现错误,程序继续执行下去
数字对象:
new Number:创建一个数字对象
NaN:不是数字
toFixed(2):保留两位小数
toExponential():返回一个数字的科学计数法表达
valueOf():返回一个数字对象的基本类型
字符串对象:
new String:创建字符串对象
length:字符串长度
charAt:返回指定位置的字符
concat:字符串合并
indexOf:字符串第一次出现的位置
localeCompare:比较字符串是否相同
substring:截取一段字符串
split:字符串转换为数组
replace:替换字符串
数组:
长度可变
和java类似
日期:
Date
和java类似
Math:
和java类似
自定义对象:
var xx=new Object();
xx.xxxx="";
xx.xxx=function(){};
通过function设计一个对象
给对象增加新方法:prototype
----7.16JavaScript
BOM:浏览器对象模型
窗口
浏览器
客户端屏幕
访问历史
浏览器地址
窗口:
内部高度:window.innerHeight
内部宽度:window.innerWidth
外部高度:window.outerHeight
外部宽度:window.outerWidth
History:
返回上一次的访问:history.back();
返回上上次的访问:history.go(-2);
Location:
刷新当前页面:location.reload();
跳转到另一个页面:location=“/"或location.assign("/");
主机名:location.host
端口号:location.port
弹出框:
alert(“”):警告
confirm(“”):确认框
prompt(“”):输入框
计时器:
setTimeout(functionname,距离开始的毫秒数):只执行一次
setInterval(函数名,重复执行间隔毫秒数):多次执行
clearInterval:终止重复执行
十、JSON
JSON=JavaScript对象表示法:Java Script Object Notation
创建JSON对象:
由名称/值对组成,名称和值之间用:隔开,名称用“”包含起来
不同名称值对用,隔开
var gareen = {“name”:“盖伦”,“hp”:616};
访问JSON对象:
.运算符访问
gareen.name
JSON数组:
[]创建JSON数组
var heros=[{"name":"hehe","hp":123},{"name":"haha","hp":234}]
heros[0].name:访问第一个元素的name
JSON对象转换:
JavaScript分内置对象和自定义对象,JSON就是自定义对象
字符串转为JSON对象:JSON.parse(“str”);
JSON对象转换为字符串:JSON.stringify(object);
十一、Ajax
AJAX=A synchronous JavaScript And XML
用于用户名校验,不需要提交数据刷新页面,在输入框中输入数据则自动校验
Ajax解析步骤:
创建XHR:XML Http Request与服务器进行交互
var xmlhttp = new XMLHttpRequest();
设置响应函数:
xmlhttp.onreadystatechange=checkResult;
编写checkResult函数
设置并发出请求:
xmlhttp.open("GET",url,true);
使用POST时,或者需要发送参数时,使用send:xmlhttp.send("user="+username+"");
处理响应信息:
function checkResult(){
if(xmlhttp.readyState == 4&&xmlhttp.status==200)
document.getElementById('checkResult').innerHTML=responseText;
}
表示请求已完成
200表示响应成功
responseText用于获取服务器端传回来的文本
innerHTML设置span的内容为服务器传回来的文本
十二、MVC
MVC设计模式:结合了Servlet和JSP各自的优势
M:模型(Model),数据,dao,bean
V:视图(View),展示数据,网页,JSP
C:控制器(Controller),不同的数据显示在不同的视图上,servlet
十三、Servlet
1、开发步骤:
创建web应用项目
编写servlet代码
部署到Tomcat中
2、web.xml提供路径与servlet的映射关系
十四、Mybatis
1、作用:
JDBC访问数据库太繁琐,Mybatis封装了连接数据库、异常处理的细节,使得只需关注增删改查等操作。
2、原理:
应用程序找Mybatis要数据
Mybatis从数据库中找来数据
mybatis-config.xml:指定数据库
Category.xml执行select *from tablename,把数据记录封装在list<obj>集合对象中
返回一个对象集合
3、步骤
创建实体对象
创建对应数据库
导入mybatis和mysql的jar包
新建src目录新建mybatis-config.xml指定响应数据库
新建Category.xml执行select *from
新建测试类,包含主方法,导入mybatis-config.xml配置文件,获得对象集合
4、xml文件配置
CRUD:#{id}
模糊查询:concat('%',#{0},'%'),session.selectList()
多条件查询(使用map):
parameterType="map"
Map<String,Object> params = new HashMap<>();
params.put("id", 3);
params.put("name", "cat");
List<Category> cs = session.selectList("listCategoryByIdAndName",params);
if标签:应付各个字段的查询
where(set)标签:匹配if
when和otherwise标签:类似if-else
bind标签:做一次字符串拼接
5、注解
@Insert(“insert into tablename (xx)values(#{xx})”)
6、日志
7、分页
十五、Spring
1、Spring是一个基于IOC和AOP的结构J2EE系统的框架
IOC反转控制是Spring的基础
Spring即拿到对象已经注入相应值的属性,可以直接使用
2、类中注入另外一个对象需要通过ref=“other bean namevalue”
3、Spring注解方式
属性或set方法前加上@Autowired或@Resource注解
对Bean的注解:
在类定义前加上@Component(“”)注解
4、面向切面编程Spring AOP
把功能分为核心业务功能和周边功能
核心业务功能包括登陆、增删、查询数据
周边功能包括性能统计、日志和事物管理,被定义为切面
AOP中,核心业务功能和切面功能独立开发,然后将切面功能和核心业务功能编织在一起,就是AOP
5、AOP的注解方式
@Aspect注解表示一个切面
@Component表示一个bean,由Spring管理
@Around(value=“execution(*com.classname).*(..)”)表示对类中所有的方法进行切面操作
6、测试
@RunWith(SpringJUnit4ClassRunner.class):表示这是一个测试类
@ContextConfiguration(“classpath:applicationContext.xml”)定位Spring的配置文件
@Autowired:给这个测试类装配Category对象
@Test测试逻辑,打印c对象名称
十六、Spring MVC和SpringBoot
一、spring MVC
1、原理
用户访问/index
所有访问都会经过web.xmlDispatcherServlet
根据配置文件spring-servlet.xml,访问路径/index会进入IndexController
在IndexController中指定跳转到页面index.jsp,传递message数据
在index.jsp中显示message信息
2、注解方式
类前面加上@Controller,表示该类是一个控制器
方法handleRequest前面加上@RequestMapping(“/index”)表示路径/index会映射到该方法上
不再实现Controller接口
3、接受表单数据
4、客户端跳转
5、中文问题
6、上传文件
7、拦截器
二、SpringBoot
1、目的和定义:
简化配置工作,使开发人员只关心业务层功能。
SpringBoot是简化了、按照约定开发的SSM(H),但最好还是有SSM(H)基础
本质上是一个Java程序,风格是maven风格,所以按照maven方式创建
2、Application类的主方法已嵌入tomcat,不需要再手动启动
3、热部署
在pom.xml中增加一个依赖和一个插件
4、端口和上下文路径
server.port=8888
server.content-path=/test
5、配置切换
核心配置文件:application.properties
开发环境的配置文件:application-dev.properties
生产环境的配置文件:application-pro.properties
6、yml格式
和properties作用差不多,写法不同
项目中要么都用properties,要么都用yml
写法规则:
不同等级用冒号隔开
次等级前面是空格,不能使用tab键
冒号之后如果有值,那么冒号和值之间至少有一个空格,不能紧贴着
spring:
mvc:
view:
prefix: /WEB-INF/jsp/
suffix: .jsp
server:
port: 8888
context-path: /test
7、JPA
是Sun公司提出的Java持久化规范,方便操作数据库
8、springboot的注解方式和xml方式
9、CRUD和分页
10、Mybatis做一个完整的CRUD和分页,在xml文件中使用PageHelper插件
11、SpringBoot SQLite:跑在JVM中,就不用安装和配置mysql了
十七、补充:JSP
1、JSP=Java Server Pages
动态网页开发技术,<%....%>,在HTML网页中插入Java代码
网页开发者结合HTML代码、XHTML代码和XML元素及嵌入JSP来编写JSP
2、功能
通过网页表单获取用户输入数据、访问数据库及其它数据源,然后动态地创建网页
JSP标签有多种功能:访问数据库,记录用户选择信息,访问JavaBean组件,在不同的网页中传递控制信息和共享信息
3、优势
动态部分用Java编写
易于移植
**补充**数据校验
1、核心jar包
hibernate-validator
validation
jboss-logging
十八、补充:Java多线程
1、线程三态:就绪态,运行态,阻塞态
线程实现:继承Thread类和实现Runnable接口
2、进入就绪态:start();,Os调度时进入运行态
运行-就绪:时间片用完,yield(),让其他线程运行
运行-阻塞:等待资源,join(),等待线程终止
阻塞-就绪:join()的线程结束
notify():唤醒线程
十九、补充:流式编程
1、步骤
获取数据源,将数据源读取到流中
对流中的数据进行各种各样的处理
对流中的数据进行整合
2、数据源获取