JAVA开发体系基础学习

零基础,历时一个月半,完成了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、数据源获取
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值