• 博客(31)
  • 资源 (8)
  • 收藏
  • 关注

原创 让idea飞起来,3秒启动,jvm参数优化

idea参数设置选项一般最小堆内存设置512m-1024就可以了最大堆内存设置2048m就ok了代码容量设置480m就可以了idea默认设置的收集器是cms(并发性老年代收集器)jvm参数设置-xmn设置年轻代的内存大小-xss设置线程内存大小...

2020-07-06 18:07:11 501

原创 jvm调优介绍

jvm内存模型jvm内存管理及模型:共享数据区:堆区(存放对象,需要被gc处理)方法区数据隔离区(私有):java栈(栈区)本地数据栈程序计数器gc简单模型

2020-07-05 08:44:21 180

原创 总结-SSM整合&高级查询

SSM整合&高级查询第一部分:SS【Spring+SpringMvc】整合一. Spring整合SpringMvc=========================第一阶段|-- 创建动态web工程,名称【day0412-sssm|-- 注意:web.xml和classes的位置都在WEB-INF下测试1:在根路径WebContent下新建index.jsp进行测试=====...

2020-04-13 19:49:22 505

原创 SpringMVC总结-理论

总结_SpringMVC谈谈你对SpringMvc的理解?答:SpringMvc是一个优秀的web层或表现层框架,是对Servlet的封装,是Spring的一个模块【web】,可以和Spring集成。SpringMvc前端控制器匹配方式有那三种,有什么区别?答:后缀匹配:范围小/*:匹配所有请求/:匹配所有请求,但是会拦截静态资源。SpringMvc获取请求参数的方式?...

2020-04-11 21:14:15 224

原创 各种第三方接口使用

**使用第三方接口注意:**1.参考文档1.1:请求接入点/ API point1.2:请求参数/ Request parameter1.3:返回参数/ Return parameter2.解析json2.1:多层json嵌套2.1:多层嵌套加数组上面都ok了,那么就可以驾驭大部分api了。易源:https://www.showapi.com/share(每天20次调用api...

2020-04-09 22:57:56 1082

原创 支付宝第三方支付接口-对接,接入

感谢网络,感谢csdn每一位大佬。(参考并修改,忘记是哪一位大佬了。不好意思,初衷为了分享技术)效果图忘记保存了,就不展示了。配置请求参数和日志文件import java.io.FileWriter;import java.io.IOException;/* * *类名:AlipayConfig *功能:基础配置类 *详细:设置帐户有关信息及返回路径 *修改日期:2017-04...

2020-04-09 22:46:19 1906

原创 Mybatis基础总结-理论

Mybatis是什么答: Mybatis是一个ORM的数据库持久化框架,Mybatis的是apache的一个开源项目iBatis,MyBatis前身就是【iBatis】。什么叫数据库持久化答:持久化 = 数据持久化:就是将数据保存在磁盘【文档 +数据库】中,将对象和数据保存在数据库中什么是ORM答:Object Relational Mapping - 对象关系映射,为了解...

2020-04-09 22:36:54 178

原创 Spring基础总结-理论

Spring中对象的生命周期答: Spring中管理的对象从创建到销毁的一个过程Spring中如何配置单例的Bean和多例的Bean答:单例 = singleton,默认状态【绝大多数】多例 = 原型 = prototype,scope=“prototype”ApplicationContext与BeanFactory的区别答:ApplicationContext:默然是在...

2020-04-09 22:34:30 150

原创 java基础第23天-xml解析

1.XML1.1. 概念:XML(eXtensible Markup Language),是一种可扩展的标记语言1.2. 作用:XML是跨平台和跨语言的不同的语言都支持XML解析(将XML转换为对应语言中的数据)1. 数据交换格式(一般不用了,用json代替了)2. 配置文件都使用XML格式,框架都是用xml和Properties作为配置文件。1.3. 使用:(掌握) 语法: ...

2020-03-20 20:55:41 132 1

原创 java基础第22天-lambda

lambda:概念:就是对函数式接口匿名内部类的简写作用:简化代码使用:语法:函数式接口 变量名 = (参数1,参数2…) -> {//方法体}(参数1,参数2…)表示参数列表;->表示连接符;连接符号后是方法体{}内部是方法体特点说明:普通方法的写法1、=右边的类型会根据左边的函数式接口类型自动推断;2、如果形参列表为空,只需保留();3、如果形参...

2020-03-20 20:54:35 119

原创 java基础第22天-jdk8新特性和lambda

lambda:(重点)概念:就是对函数式接口匿名内部类的简写作用:简化代码使用:语法:函数式接口 变量名 = (参数1,参数2…) -> {//方法体}(参数1,参数2…)表示参数列表;->表示连接符;连接符号后是方法体{}内部是方法体特点说明:普通方法的写法1、=右边的类型会根据左边的函数式接口类型自动推断;2、如果形参列表为空,只需保留...

2020-03-17 20:02:31 141

原创 java基础第21天-反射和注解

反射:Class 类的实例表示正在运行的 Java 应用程序中的类和接口;枚举是一种类,注解(指的是注解Annotation)是一种接口;每个数组都是 Class字节码类中的一个具体 对象基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象;注意 :1、 Class类 ...

2020-03-16 19:56:24 153

原创 java基础第20天-继承加强和设计模式

单元测试:(掌握)写一个单元测试类,命名方式:XxxTest(测试类没有main方法)导入包,Junit4包选中项目,右键 => Build Path => Add Library => 选中Junit选中Junit4 => finish在测试类中,设计测试方法,命名方式:testXxx()在方法上方会自动添加一个@Test注解运行,...

2020-03-15 20:23:00 171

原创 一个简单的断点续传方法案例

public static void keep(){ File sourceFile = new File("E:/a.txt"); File targetFile = new File("E:/b.txt"); byte[] buf = new byte[1]; try( FileInputStream fis = new FileInputStrea...

2020-03-14 22:35:42 328

原创 IO不关流之转换流

public class Change {public static void main(String[] args) throws IOException { try ( FileReader fr = new FileReader("a.txt"); FileWriter fw = new FileWriter("e:/a.txt"); BufferedReader b...

2020-03-13 21:07:34 123

原创 字节字符互转

/** * 字节转字符 * */ byte[] byte1 = "撒娇和id急啊的".getBytes("utf-8"); String str = new String(byte1); System.out.println(str); /** * 字符转字节 * */ String str3 = "撒到货啊回答说"; byte[...

2020-03-13 21:05:16 190

原创 java基础第19天IO流

扩展:1. 对象序列化和反序列化生成一个2. 流的种类:io包下扩展nio包下IO分类:输入流 输出流字节流 InputStream(抽象类) OutputStream(抽象类)字符流 Reader (抽象类) Writer(抽象类)2.字节流:(重点)使用场景:1.字节流处理除了文本、文字相关所有的流问题,如,png/jpg/avi...

2020-03-13 21:02:47 105

原创 一个简单,不实用的枚举类案例

public enum Vip { vip1, vip2, vip3, vip4,vip5; public static void main(String[] args) { Vip vip=vip1, vip2, vip3, vip4,vip5; switch (vip) { case vip1: System.out.println("当前等级为vip1"); b...

2020-03-13 20:54:42 141

原创 java基础第11天接口,抽象案例

需求:长安汽车员工管理系统。* 该项目有一个Employee员工基类,其下有3个工厂员工子类,分别为:EmployeeFactory1、* EmployeeFactory2、EmployeeFactory3* 1. 所有工人都有 上班打卡方法clockIn()(所有员工打卡方式相同)* 2. 所有工人都有 下班打卡方法clockOut()(所有员工打卡方式相同)* ...

2020-03-13 20:53:29 144

原创 (补)java基础第11天面向对象-枚举、抽象与接口

枚举enum (掌握)1.1. 概念:就是一种跟类平级的新结构1.2. 作用:就是简化类中全局常量这种代码1.3. 语法:声明语法:public enum 枚举类名字{字段(全大写、下划线。简化的就是全局常量)实例变量(尽量是private final修饰的)实例方法类方法构造方法 - 枚举中的构造方法默认都是private修饰,不能够是public,protected修饰...

2020-03-13 20:49:34 187

原创 递归统计文件夹里面大小

/** * 递归判断文件夹大小 * */public static long fh(File dir) { int len = 0; File[] f = dir.listFiles(); for (File f1 : f) { if (f1.isFile()) { len += len + f1.length(); } else { len += fh(f1);...

2020-03-12 22:32:52 173

原创 创建一个文件并写入内容

File file1 = null; if (!file.isFile()) { file1 = new File("E:\\a\\aa\\b\\test.txt"); boolean createNewFile = false; try { createNewFile = file1.createNewFile(); } catch (IOException e) { ...

2020-03-12 22:30:53 686

原创 java基础第18天File和递归 笔记

IO:(Input Output)是输入输出流从内存到硬盘就是输出流Output从硬盘到内存就是输入流InputIO操作的最基础的是文件FileFile概念:就是java中的一个文件或者文件夹。如果没有后缀就表示是一个文件夹,如果有后缀就表示文件。作用:为了IO流提供操作的基础使用:常量:1.1. static String pathSeparator与系统相关的...

2020-03-12 22:19:32 120

原创 输出文件以什么格式结尾的两种方式绝对路径和相对路径

/*** 相对路径* */String[] list = file.list(new FilenameFilter() { @Override public boolean accept(File dir, String name) { if(name.endsWith(".txt")){ return true; } return false;...

2020-03-12 21:51:25 292

原创 用File类创建文件夹

File file = new File("E:\\a\\aa\\b"); if(!file.exists()){ file.mkdirs(); }

2020-03-12 21:49:43 131

原创 给定一个字符串,判断该字符串中是否包含某个子串.如果包含,求出子串的所有出现位置和出现次数

public static int getoccur(String src, String find) { int cs = 0; int index = -1; while ((index = src.indexOf(find, index)) > -1) { ++index; ++cs; } return cs;}public static void getoc...

2020-03-10 22:37:13 1458

原创 java基础第17天Map和泛型

在这里要感谢吕老师的贡献一个简单的HashMap理解图(上图)Map:地图1. 概念:Map:就是用来装键值对集合的容器2. 作用:解决了需要成对出现的这种关系结构键(key) : 质就是一个数据值(value) : 本质也是一个数据键值对: 就是一对(和两个是有区别的),一对一般是有某种关系例如:1、例如QQ的账号+密码:想象场景-需要使用一个集合搜集各位1...

2020-03-10 21:52:51 166

原创 编写一个方法,判断一个字符是否有小写字母,如果是,将它转换成大写字母,否则,不转换。三种方法

public static void small(String a) { String aa[] = new String[a.length()]; for (int i = 0; i < a.length(); i++) { aa[i] = a; if (!aa[i].toLowerCase().equals(aa[i])) { aa[i] = aa[i].toUpper...

2020-03-10 21:24:08 1219

原创 有如下的一个字符串 String str = “AAAABBBBCCCDDDEFF”; ① 请统计出其中每一个字母出现的次数,② 请打印出字母次数最多的那一对

public static void main(String[] args) { String str = "AAAABBBBCCCDDDEFF"; Map<String, Integer> m = new ConcurrentHashMap<String, Integer>(); int count = 0; for (int i = 0; i < str....

2020-03-10 21:22:29 1504

原创 java基础第16天集合

集合框架:Iterable(迭代器接口,实现了该接口可以使用foreach,还可以获取集合对象的迭代器对象,通过迭代器遍历集合)||—iterator() =======>Iterator| | | listIterator()获取 ListIterator|Collection(所有集合的根接口)|----List(接口)表示有序(存入和取出)可重复...

2020-03-09 20:43:11 151

原创 重写HashSet简单了解去重

HashSet就是限制了功能的HashMap,对于HashSet中保存的对象,主要要正确重写equals方法和hashCode方法,以保证放入Set对象的唯一性HashSet没有提供get()方法,愿意是同HashMap一样,Set内部是无序的,只能通过迭代的方式获得如果需要有序可以使用LinkedHashSet源码分析侵权请告之,立马删除public class HashSetext...

2020-03-09 15:36:14 353

day023-xml解析笔记和代码.rar

1.XML 1.1. 概念:XML(eXtensible Markup Language),是一种可扩展的标记语言 1.2. 作用: XML是跨平台和跨语言的 不同的语言都支持XML解析(将XML转换为对应语言中的数据) 1. 数据交换格式(一般不用了,用json代替了) 2. 配置文件都使用XML格式,框架都是用xml和Properties作为配置文件。 1.3. 使用:(掌握) 语法: <?xml version="1.0" encoding="UTF-8"?> <!--注释快捷键:ctrl + shift + / --> <!-- 第一行,必须有。定义XML的版本和字符集 --> <!-- XML中的注释 --> XML的语法格式: 第一行用了定义xml文件的,写版本号和字符集 1.注释不能放到第一行 1.必需有声明,声明必需在第一行。 2.文档声明的字符编码必需和文档本身的编码一致 2.标签不能交叉嵌套使用(标签名字随便定义) 1. 双标签 : <双标签></双标签>一般是有下一级的 2. 单标签 :<单标签/> 如果没有下一级,就可以用单标签 3.有开始有结束 4.不数字开头,只能以字母或下划线开头; 5.只能有一个根标签;表示不能再有其他平级标签 6.严格区分大小写 7.一个标签不能有两个相同属性(属性名随便定义) 属性直接写在头标签内,格式:属性名="属性值" 8.特殊符号需要转义 或者可以放到CDATA区 <![CDATA[这里写特殊符号]]> html特殊符号,转义符号 9.编码格式统一: 1.开发环境:项目环境、系统环境 2.当前文件内encoding字符集 10.不能以xml(或者XML,Xml等)开头W3C保留日后使用; 例如:最好不要使用 <xml:xx></xml: xx>W3C保留以后在使用 11.名称字符之间不能有空格或者制表符; 例如<四川 省> 12.名称字符之间不能使用冒号;<xml:xx></xml: xx> 注意: 1.Xml中空格和换行都表示数据,严格区分大小写 1.4 XML约束:(了解) 1. 概念:就是限制一个XML文件中标签和属性等的使用,只能按照某种规则书写 便于其他程序员学习。 2. 作用: 1. 代码校验 2. 代码提示 3. 利于达成共识形成规范 3. 约束分类: 1. DTD约束:Document Type Definition文档类型定义 例如: <!ELEMENT contacts (linkman+)> <!ELEMENT linkman (name,email,address,group)> <!ELEMENT name (#PCDATA)> <!ELEMENT email (#PCDATA)> <!ELEMENT address (#PCDATA)> <!ELEMENT group (#PCDATA)> 2. schema约束:xml Schema Definition xsd文件 例如: <?xml version="1.0" encoding="UTF-8" ?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://itsource.cn" elementFormDefault="qualified"> <xs:element name="contacts"> <xs:complexType> <xs:sequence maxOccurs='unbounded'> <xs:element name="linkman"> <xs:complexType> <xs:sequence> <xs:element name='name' type='xs:string' /> <xs:element name='email' type='xs:string' /> <xs:element name='address' type='xs:string' /> <xs:element name='group' type='xs:string' /> </xs:sequence> <xs:attribute name="id" type="xs:long" use="required"/> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> 1.5. XML解析(最重要) DOM: 文档对象模型 将一个XML(html)文档 的每一个元素解析成java中的一个一个的对象 D Document 文档(XML文档) : 磁盘上面的xml文件 O Object 对象(Java对象) : 把xml文件封装成Java对象 M Model 模型 解析过程中用到的类: Document Node(节点) Element (元素) Attribute(属性) - Attr Text(文本) dom4j解析: 支持xpath解析,就可以可以直接输入一个路径查找: 由于DOM4J在解析XML时只能一层一层解析,所以当XML文件层数过多时使用会很不方便, 结合XPATH就可以直接获取到某个元素 使用dom4j支持xpath的操作的几种主要形式   第一种形式     /a/b/c: 表示一层一层的,a下面 b下面的c   第二种形式      //b: 表示和这个名称相同,表示只要名称是b,都得到 第三种形式     /* : 所有元素 第四种形式     a[1]: 表示第一个a元素     a[last()]:表示最后一个a元素 第五种形式     //a[@id]: 表示只要a元素上面有id属性,都得到 第六种形式     //a[@id='b1'] 表示元素名称是a,在a上面有id属性,并且id的属性值是b1 使用dom4j支持xpath具体操作 默认的情况下,dom4j不支持xpath,如果想要在dom4j里面是有xpath, 第一步需要,引入支持xpath的jar包,如下: jaxen-1.1-beta-6.jar 在dom4j里面提供了两个方法,用来支持xpath     selectNodes("xpath表达式"),获取多个节点        selectSingleNode("xpath表达式"),获取一个节点 步骤: 1. 在项目下创建一个lib文件夹folder 2. 复制dom4j的jar包到lib文件夹中 3. 选中jar右键buildpath 4. 在测试类中使用dom4j解析XML。(今天开始学习别人的api) dom4j中使用到的方法: 1.创建SaxReader对象 SAXReader reader = new SAXReader(); 2.设置命名空间 reader.getDocumentFactory().setXPathNamespaceURIs(map); 3. SAXReader对象调用read方法,将当前XML文件,转换为Document对象 document = reader.read(file); 4. 获取根节点 root = document.getRootElement(); 5. 通过父签添加子标签(元素) Element element = root.addElement("标签名");//返回值就是要添加的元素对象 给子标签添加值 element.setText("标签值"); 6. 给当前标签添加属性:xxx ,值是:xxx Element attribute = linkman.addAttribute("属性名","值"); 通过属性对象attribute获取属性值 attribute.setText("值"); 通过属性对象attribute获取属性值 String 值 = attribute.getText(); 7. 获取当前元素标签名 String name = e.getName(); 获取当前元素标签值 String text = e.getText(); 8. 获取指定名字的子标签(元素) root.element(String name); 9. 获取所有子标签(元素) root.elements(); 10.在dom4j里面提供了两个方法,用来支持xpath      selectNodes("xpath表达式"),获取当前名字的多个节点 selectSingleNode("xpath表达式"),获取一个节点

2020-03-20

day022-jdk8新特性和lambda表达式 代码和笔记.rar

1. lambda: 1. 概念:就是对函数式接口匿名内部类的简写 2. 作用:简化代码 3. 使用: 语法: 函数式接口 变量名 = (参数1,参数2...) -> { //方法体 } (参数1,参数2…)表示参数列表; ->表示连接符;连接符号后是方法体 {}内部是方法体 特点说明: 普通方法的写法 1、=右边的类型会根据左边的函数式接口类型自动推断; 2、如果形参列表为空,只需保留(); 3、如果形参只有1个,()可以省略,只需要参数的名称即可; 4、如果执行语句只有1句,且无返回值,{}可以省略, 若有返回值,则若想省去{},则必须同时省略return,且执行语句也保证只有1句; 5、形参列表的数据类型会自动推断; 6、lambda不会生成一个单独的内部类文件; 7、lambda表达式若访问了局部变量,则局部变量必须是final的, 若是局部变量没有加final关键字,系统会自动添加,此后在修改该局部变量,会报错;

2020-03-20

day021-反射和注解笔记和代码.rar

1. 反射: Class 类的实例表示正在运行的 Java 应用程序中的类和接口; 枚举是一种类,注解(指的是注解Annotation)是一种接口; 每个数组都是 Class字节码类中的一个具体 对象 基本的 Java 类型(boolean、byte、char、short、int、long、float 和 double)和关键字 void 也表示为 Class 对象; 注意 : 1、 Class类 和它的实例的产生: Class的对象是已经存在的类型, 所以不能够直接new一个Class对象出来,是通过Class类中的一个方法获取到的。 例如:通过全限定路径类名 2、同一种类型不管通过什么方式得到Class的实例都是相等的;一个类型的字节码对象只有一份,在元空间。 3、Class的实例就看成是Java中我们学过的所有的数据类型在JVM中存在的一种状态(字节码对象) String.class int.class List.class int[].class 1.概念:通过一个全限定类名,获取字节码文件 2.作用: 1. 提高开发灵活度,提高程序的扩展性 2. 框架(提高开发效率的别人封装好的代码)底层都是使用反射技术。例如:Tomcat、Spring... 3. 缺点:破坏封装性,性能低下(以后,能不用反射技术就不用) 3. 使用:(重点) 1. 获取字节码文件 1. 1.1 Class clazz = Class.forName(全限定路径名) (最多使用)默认就是调用下面的方法 1.2 static 类<?> forName(String name, boolean initialize, ClassLoader loader) name:全限定路径名 initialize:表示是否初始化,默认是false loader:可以指定一个类加载器加载字节码文件 2. 全限定类名.class 3. 对象名.getClass() Class类中方法newInstance():创建当前字节码对象(只能调用无参且是public修饰的构造方法) 2. 根据字节码文件获取构造方法、普通方法、字段等 构造方法 Constructor[] constructors = clazz.getConstructors() 获取public修饰的构造方法数组 Constructor[] constructors = clazz.getDeclaredConstructors() 获取任意权限的所有造方法数组 Constructor constructor = clazz.getConstructor(Class 参数字节码)根据参数类型获取public修饰的指定的的构造方法 Constructor constructor = clazz.getDeclearConstructor(Class 参数字节码) 获取任意访问权限指定的构造方法 //通过构造方法对象去用构造方法创建对象 => 相当于new 一个对象 Object instance = constructor.newInstance(Object 实参);//可以创建任意访问权限的有参或者无参构造 普通方法 Method[] methods = clazz.getMethods() 获取public修饰的构造方法数组,有父类中的方法 Method[] methods = clazz.getDeclaredMethods() 获取任意访问权限所有造方法数组,并且都是自己的方法 Method method = clazz.getMethod(String methodName,Class... 参数字节码)根据方法名和参数类型获取指定的的方法 methodName:方法名 Class:形参类型。如果方法没有形参,则Class可变参数不用写 Method method = clazz.getDeclaredMethod(String methodName,Class... 参数字节码)根据方法名和参数类型获取指定的的方法 methodName:方法名 Class:形参类型。如果方法没有形参,则Class可变参数不用写 //通过普通方法对象调用执行方法 method.invoke(Object obj,Object... args); obj:对象。如果是对象的方法,就传入一个当前字节码创建的对象,如果是static方法,则写null args:就是具体实参 字段 Field[] fields = clazz.getFields() 获取public修饰的字段 Field[] fields = clazz.getDeclaredFields() 获取任意权限所有字段 Field field = clazz.getDeclaredField(String fieldName) 根据字段名获取任意访问权限的指定字段 Field field = clazz.Field(String fieldName)根据字段名获取public的指定字段 //通过当前的字段对象,给某一个字段赋值取值 field.get(Object obj);//如果是属于非static,就传入一个对象,如果是静态的,就传入null obj:对象 field.set(Object obj, Object value);//如果是属于非static,就传入一个对象,如果是静态的,就传入null obj:对象 value:值 String getName() 获取全限定类名(全限定,包含包名) Class类中方法 String getSimpleName() 获取类名简称 Class类中方法 Package getPackage() 获取包名 Class类中方法 T newInstance() 根据当前字节码创建对应的对象 Class类中方法 注意: 1. Class类中方法newInstance():创建当前字节码对象(只能调用无参且是public修饰的构造方法) 2. Constructor类中方法newInstance(Object 实参);//可以创建任意访问权限的有参或者无参构造 3. 私有化方法、字段、构造方法都必须破坏封装才能使用: public void setAccessible(boolean flag) true表示破坏封装,false是不破坏 是哪个private修饰的方法、字段、构造方法需要执行,就需要用这个对象破坏哪一个的封装 例如: //获取cn.itsource.reflect.User字节码文件 Class<?> clazz = Class.forName("cn.itsource.reflect.User"); //获取User的有String参构造 Constructor<?> constructor = clazz.getConstructor(String.class); //调用有参String构造,创建一个User对象 Object newInstance = constructor.newInstance("某文"); //获取private修饰的方法:testPrivate Method method2 = clazz.getDeclaredMethod("testPrivate"); method2.setAccessible(true);//破坏普通方法Method封装 //破坏封装后就可以执行了 Object invoke2 = method2.invoke(newInstance);//没有形参就不用写 System.out.println(invoke2); 4. 调用static方法、字段: 例如: Field field = clazz.getDeclaredField("country");//获取任意访问权限静态变量country field.set(null, "中国");//因为字段country是static修饰,所以不用对象调用,就传入null。字段country赋值:中文 Object object = field.get(null);//字段country取值 System.out.println(object); 2. 注解: 1.概念: 就是一个标签,有标签后,就具有某一些标签的特性。 本质就是跟类、接口、枚举平级的新结构 2.作用: 1. 帮助程序员校验代码 2. 可以提高开发效率和程序的扩展性 @Test @Before @After 3. 可以生成文档说明 api 操作步骤: 1.选中项目/代码,右键选中Export 2.输入Javadoc 3.第一个next(可以设置生成文档注释的目录),第二个next,设置字符集 如果是UTF-8编码,且有中文,请输入-encoding UTF-8 -charset UTF-8 4. 勾选一个生成完毕后,直接通过浏览器打开的选项 5. finish 3.使用:(重点) 1. 使用jdk或者别人定义好的标签 @ + 注解的名称 -- 比如@Override ->注解 2. 使用自定义的标签 1.JDK的元注解:就是专门用来声明其他注解的注解 作用:通过元注解了解其他注解的使用特点,还可以自定义注解 2.元注解: 1. @Target @Target 作用 用来限制被修饰注解的使用范围,即注解可以在类的哪些成员上使用 @Target 取值使用ElementType.() 1. CONSTRUCTOR:可以在构造器上使用注解 2. FIELD:可以在字段上使用注解 3. LOCAL_VARIABLE:可以在局部变量上使用注解 4. METHOD:可以在普通方法上使用注解 5. PACKAGE:可以在包上使用注解 6. PARAMETER:可以在参数列表上使用注解 7. TYPE:可以在类、接口(包括注解类型) 或enum上使用注解 例如:@Target(ElementType.METHOD)//意味着@Override只能在普通方法上使用 public @interface Override { } 2. @Retention

2020-03-16

day020-继承加强和设计模式代码和笔记.rar

1. 单元测试:(掌握) 1. 写一个单元测试类,命名方式:XxxTest(测试类没有main方法) 2. 导入包,Junit4包 选中项目,右键 => Build Path => Add Library => 选中Junit 选中Junit4 => finish 3. 在测试类中,设计测试方法,命名方式:testXxx() 在方法上方会自动添加一个@Test注解 4. 运行,右键run as JUnit方式 如果是全部执行,直接选中 @Test注解,右键run as JUnit方式 如果是某一个方法,直接选中方法名,右键run as JUnit方式 @Before// 预执行注解,每次执行方法前都会执行该注解 @After// 每次执行方法后都会执行该注解 5. 运行后结果解释: 绿条:表示成功执行 红条:表示执行失败 1. 代码有异常 2. 执行失败,逻辑异常 6. 自己扩展(测试类中的断言assert) 2. 工具类:(掌握) 1. 概念:就是类中只有(静态、非静态)方法,就是为了调用方法。 2. 作用:就是一个轮子 3. 分类: 1. 静态的 方法全部都是static修饰的,调用方式:类名.方法名(...); 2. 非静态的 通过单例模式获取到对象后。就是只有一个对象的类 方法全部都是非static修饰的,调用方式:对象名.方法名(...); 4. 工具类命名: XxxUtil、XxxUtils、XxxTool、XxxTools 3. jar 包 (掌握) 1. 什么是jar包:就是别人封装好的字节码文件 2. 作用:就是提高开发效率的。使用轮子 3. 使用: 3.1 使用别人写好的jar包 step1:在当前项目下,创建一文件夹folder,叫lib step2:将jar包复制到当前的lib文件夹中 step3:将所有的jar包选中右键,build path add library step4:在我们代码中通过创建对象或者类名的方式使用即可 3.2 使用自己的jar包 (造轮子) step1:选中自己想要封装成jar包的类,右键export导出 在输入框中输入 jar: 1. jar File : 普通的jar包,没有main方法(最常用) 在下面写一个jar包的名字,然后选择生成jar包的路径,finish即可 2. Runnable jar File:可以自己执行的jar包,有main方法 (几乎不用) 要封装为可以执行的jar包,必须先运行一下当前类。 然后在下面写一个jar包的名字,然后选择生成jar包的路径,finish即可 在cmd控制台中,切换路径到jar文件所在的目录。 输入 :java -jar jar包名.jar step2:剩下的就是按照 3.1中的步骤使用即可 4. Properties资源(配置)文件的解析(重点) ---------------------------------(注意:重点)------------------------------------- 以后配置文件都要放到项目中的一个或者几个单独的文件夹中,为了好管理。 该文件夹类型是source folder类型,源文件夹,eclipse工具会自动编译 --------------------------------------------------------------------------------- 传统方式获取流是new创建的,而在web开发中有可能获取不到配置文件,为了避免这种情况,用以下方式获取流: 1. 通过当前类字节码文件的方式,一般是用当前类的字节码文件 当前类.class.getResourceAsStream("/文件路径/文件名"); /:如果是resource文件夹,直接写文件名,如果是普通文件夹写文件夹名/文件名 2. 通过类加载器的方式 1.同当前类的加载器获取 1.当前类.class.getClassLoader();//获取当前类加载器 2.classLoader.getResourceAsStream("文件路径/文件名");//通过类加载器获取流对象,如果是源文件夹,直接文件名 2.通过当前线程的类加载器获取流 1、ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); //获取当前线程类加载器 2、InputStream is = classLoader.getResourceAsStream("文件路径/文件名");//通过当前线程的类加载器获取流对象,如果是源文件夹,直接文件名 建议用当前线程类的加载器方式获取流,线程安全问题 类加载器:( 扩展,5个月后会讲) 加载字节码的一个类而已: 1. 启动类加载器(Bootstrap classLoader) c++ 本地代码实现的类加载器,它负责将 <JAVA_HOME>/lib下面的核心类库 或 -Xbootclasspath选项指定的jar包等 虚拟机识别的类库 加载到内存中。 由于引导类加载器涉及到虚拟机本地实现细节,开发者无法直接获取到启动类加载器的引用, 所以 不允许直接通过引用进行操作。 2. 拓展类加载器(Extension classLoader): 扩展类加载器是由Sun的ExtClassLoader(sun.misc.Launcher$ExtClassLoader) 实现的,它负责将 <JAVA_HOME >/lib/ext或者由系统变量-Djava.ext.dir指定位置 中的类库 加载到内存中。开发者可以直接使用标准扩展类加载器。 3. 系统类 (应用类)加载器(Application classLoader): 系统类加载器是由 Sun 的 AppClassLoader(sun.misc.Launcher$AppClassLoader)实现的, 它负责将 用户类路径(java -classpath或-Djava.class.path变量所指的目录, 即当前类所在路径及其引用的第三方类库的路径,如第四节中的问题6所述)下的类库 加载到内存中。 开发者可以直接使用系统类加载器。 5. 设计模式:(框架中使用,是程序设计的高级思想) 1. 单例模式:(重点) 1. 概念:设计一个类,这个类只能创建一个对象。(限制创建对象对象数量) 2. 怎么设计? 控制创建对象的数量 => 创建对象通过new 调用构造方法 => 控制构造方法就能控制创建对象 控制调用构造方法 => 用private修饰 => 需要给外部提供一个对象 => 先在类中创建一个对象 (联想到封装) => 提供一个公共的 getInstance给外部返回一个对象 3. 步骤: 1. 私有化构造方法 2. 在类中创建一个对象,并且用private、static、final修饰 private为了避免在外部直接访问当前对象 static是为了在静态方法中可以返回当前类中的对象 final:可加可不加,加了可以保证不可修改,且提供获取效率 3. 提供一个public修饰的方法getInstance给外部返回一个对象 4. 单例模式获取方式: 1. 饿汉模式:预加载模式 (优化方式:静态内部类) 优点:在类加载的时候,就创建好对象放到静态区了,获取对象效率高。线程安全 缺点:类加载效率低,并且static修饰的成员占用资源。 2. 懒汉模式:懒加载模式 (优化方式:双重校验锁) 优点:节省资源,在需要的时候创建对象。 缺点:线程不安全。获取对象的时候,效率低 最简单的线程安全的方式:同步方法,效率低 更好的的线程安全的方式:双重校验锁 3. 枚举: public enum Singleton{ INSTANCE; } 5. 作用: 1. 全局配置文件 2. 全局日志文件 3. 节省资源,例如,回收站、资源管理器、游戏单开窗口 6. 使用选择: 一般用饿汉模式,如果有序列化(自己百度扩展)要求,用枚举。 7. 不需要频繁创建对象的时候;不允许多个对象 用单例 2. 装饰者模式:(了解) 装饰者模式指的是在不必改变原类(Input)文件和使用继承的情况下,动态地扩展一个对象的功能。 它是通过创建一个包装对象,也就是装饰来包裹真实的对象。 实现步骤 :通过对原类文件继承,对原有方法功能的基础上,增强新的功能 使用场景: 不必改变原类,并且对原有功能进行加强的时候,就需要用装饰者模式 3. 适配器模式:(了解) 适配器类: 命名方式: XxxXxxAdaptor 解决了两个功能的协同工作。(苹果充电器和华为手机充电的问题) 扩展性强,成本低廉 使用场景: 不同的类需要配合完成功能 4. 简单工厂模式:(了解)Spring框架中有用到 简单工厂模式:(后面可以用反射优化代码) 优点: 1.将生产和消费分离(解耦),即创建对象和使用对象的功能分离,便于管理 缺点: 1.扩展性弱,如果添加了新的产品,则需要修改工厂方法 使用场景: 适用于产品数量较少,且不经常改变的情况 6. ThreadLocal类 (掌握简单使用): 解决了线程安全问题,通过线程隔离有安全问题的数据实现的,底层是通过map保存线程id和值的。

2020-03-15

day019-io笔记和代码.rar

IO流: Input Output 输入输出流 自己去扩展: 1. 对象序列化和反序列化生成一个 2. 流的种类: io包下 扩展nio包下 1. IO分类: 输入流 输出流 字节流 InputStream(抽象类) OutputStream(抽象类) 字符流 Reader (抽象类) Writer(抽象类) 2.字节流:(重点) * 使用场景: * 1.字节流处理除了文本、文字相关所有的流问题,如,png/jpg/avi/map4/mp3/exe * 2.字符流只处理文本、文字相关(编码乱码问题) * * 1.输入流 abstract class InputStream:这个抽象类是表示输入字节流的所有类的超类。 * | * FileInputStream 子类:文件字节输入流 * 1. 构造方法 * FileInputStream(String name) name:表示(绝对路径、相对路径)文件名 * FileInputStream(File file) * * 2. 普通方法: //1. int read(byte[] b) 从输入流读取一些字节数,并将它们存储到缓冲区 b 。 最常用 * //2. int read() 从输入流读取数据的下一个字节。 //3. int read(byte[] b, int off, int len) 从输入流读取最多 len字节的数据到一个字节数组。 * 2.输出流 abstract class OutputStream:这个抽象类是表示输出字节流的所有类的超类。 * | * FileOutputStream 子类:文件字节输出流 * 1. 构造方法 FileOutputStream(String name) name:表示(绝对路径、相对路径)文件名 FileOutputStream(String name, boolean append) append:表示是否在该文件末尾追加数据,如果为true,表示追加,false,表示从头开始覆盖 * FileOutputStream(File file) FileOutputStream(File file, boolean append) * * 2. 普通方法: //1. void write(byte[] b, int off, int len) 将 len字节从位于偏移量 off的指定字节数组写入此文件输出流。 最常用 * //2. void write(byte[] b)将 b.length个字节从指定的字节数组写入此文件输出流。 //3. void write(int b) 将指定的字节写入此文件输出流。 3. 注意事项: 1. 必须要关闭IO流,节约资源开销 2. 关闭IO流原则,先开后关 3. IO流工具类的抽取,将所有的关流(字节流和字符流)方法抽取出来,优化代码 4. 字符流:(重点) * 使用场景:使用于处理文本相关的文件 * * Reader 抽象类: * |子类 * InputStreamReader(转换流) * |子类 * FileReader:适用于读取字符相关的文件 * 1. 构造方法: * 1.FileReader(File file) 2.FileReader(String fileName) fileName:文件名(相对路径/绝对路径) * * 2. 读取方法: * 3. int read(char[] c)读取字符到char数组中 最常用 * 2. int read()读取一个字符 * 3. int read(char[] c,int start,int length)读取制定长度的字符到char数组中 * * Writer 抽象类: * |子类 * OutputStreamWriter(转换流) * |子类 * FileWriter:适用于写出字符相关的文件 * 1. 构造方法: * 1.FileWriter(File file) 默认是false 2.FileWriter(File file, boolean append) append:表示是在文件末尾追加还是从头覆盖,如果true追加,false覆盖,默认是false 3.FileWriter(String fileName) 默认是false 4.FileWriter(String fileName, boolean append) fileName:文件名(相对路径/绝对路径) * 2. 写出方法: * 1. public Writer append(CharSequence csq,int start,int end) * 2. public Writer append(char c) * 3. public Writer append(CharSequence csq) * 4. public void write(char[] c) * 5. public void write(String str) * 6. public void write(String str,int start,int end) 5. 乱码问题:(掌握) GBK: 中文2个字节 英文、数字:1字节 UTF-8: 中文3~6个字节 英文、数字:1字节 编码:将字符串转换为字节 * 1. byte[] getBytes() 根据默认字符集将当前字符串转换为字节数组 * 2. byte[] getBytes(String charsetName) UTF-8/GBK * 按照指定的字符集将将当前字符串转换为字节数组 * * 解码:将字节转换为字符 * 1.String(byte[] bytes, int offset, int length) * 根据默认字符集将字节数组中从指定下标开始到指定长度结束的数据转换为字符串 * * 2.String(byte[] bytes, int offset, int length, String charsetName) * 根据指定字符集将字节数组中从指定下标开始到指定长度结束的数据转换为字符串 * charsetName:字符集名 例如 : "GBK"、"UTF-8" 、"ISO-8859-1" * * 不常用 * 3.String(byte[] bytes) 根据默认字符集将字节数组转换为字符串 * 4.String(byte[] bytes, String charsetName) * 根据默认字符集将字节数组转换为字符串 * * 这里会有乱码问题: * 产生的原因: * 1、因为字符集不统一,即编码和解码new String(b,0,read,"gbk")字符集不一致 * 2、因为字节流读取汉字的时候,字节数组长度不够,将一个汉字拆开了 * 解决: * 1. 用字符流用统一的字符集(最常用) * * 浏览器 : UTF-8 * 前台: * HTML :UTF-8 * CSS :UTF-8 * JS、JSP :UTF-8 * * 后台: * java :UTF-8 * * 数据库: * mysql、oracle、DB2 :UTF-8 * * 开发工具:UTF-8 * 2. 文本文件用统一的字符集 且用字符流读取和写出文本相关文件(最常用) * 3. 用一个大的字节数组(一般不用) 6. 转换流:(重点) 目前唯一一个可以设置字符集的流 (简单的理解为包装流,就是将字节流包装以下,方便操作文本相关的文件) * 使用场景: * 别人给提供了字节流,而需要处理文本文件,这时候,就需要用转换流转换一下,更方便处理文本文件 * * 作用:就是一字符流的方式读取或写出文本相关的数据 * * InputStreamReader:将字节输入流包装一下,让其更适合读取文本文件 * 构造方法: * 1.InputStreamReader(InputStream in) 创建一个使用默认字符集的InputStreamReader。 * 2.InputStreamReader(InputStream in, String charsetName) 创建一个使用指定字符集的InputStreamReader。 * 普通方法: * public int read(char[] cbuf) * int read(char[] cbuf, int offset, int length) * OutputStreamWriter:将字节输出流包装一下,让其更适合写出文本文件 * 构造方法: * 1. OutputStreamWriter(OutputStream out) 创建一个使用默认字符编码的OutputStreamWriter。 * 2. OutputStreamWriter(OutputStream out, String charsetName) 创建一个使用指定字符集的OutputStreamWriter。 普通方法: void write(char[] cbuf, int off, int len) append(CharSequence csq,int start,int end) 只有转换流可以设置字符集 7. jdk7关流的新方式: 用新结构可以自动关流 前提:该流必须是实现了一个接口 AutoCloseable 语法: try( //只能写创建流的操作,不能写其他业务操作 ){ //可能有异常的代码 }catch(异常类型1 e){ }...不需要finally关流了 8. 缓冲流:(重点)包装流 * 1.概念: 提高读取和写出效率的流 * 2.作用: 提高效率 3.使用场景:以后一律都要使用,以提高效率 建议以后都是用字节或者字符数组的方式复制文件,这样效率最高 * 4. * BufferedInputStream * 字节输入缓冲流构造方法: 1.BufferedInputStream(InputStream

2020-03-13

day018-File类代码以及笔记.rar

1. IO:(Input Output)是输入输出流 从内存到硬盘就是输出流Output 从硬盘到内存就是输入流Input IO操作的最基础的是文件File 2. File 1. 概念:就是java中的一个文件或者文件夹。如果没有后缀就表示是一个文件夹,如果有后缀就表示文件。 2. 作用:为了IO流提供操作的基础 3. 使用: 1. 常量: 1.1. static String pathSeparator 与系统相关的路径分隔符字符,为方便起见,表示为字符串。 1.2. static String separator 2. 构造方法: 2.1 File(String pathname) 根据文件名创建一个File对象, pathname:(如果有后缀就是一个文件对象,如果没有后缀会默认为是一个文件夹对象) 1. 相对路径:相对于当前Java类的项目 2. 绝对路径:从根目录或者盘符开始 /都表示从根目录或者盘符开始 2.2 File(String parent, String child) 在父级目录下创建一个文件或文件夹 parent:父级目录 child:当前目录或者当前文件 2.3 File(File parent, String child) 在父级目录下创建一个文件或文件夹 3. 常用方法: 常用方法:获取子文件夹或者子文件方法 * 1.String[] list()获取当前文件夹下所有的子文件夹或者子文件的名 //文件没有下一级 2.File[] listFiles() 获取当前文件夹下所有的子文件夹或者子文件对象 ===================================有过滤功能=================================== * 3.String[] list(FilenameFilter filter) 获取根据文件名过滤后的文件名 FilenameFilter:文件名过滤器接口 4.File[] listFiles(FilenameFilter filter) 获取根据文件名过滤后的文件对象 FilenameFilter:文件名过滤器接口 -----------------------------上面只能根据文件名或者文件夹名过滤,下面的可以通过文件的其他属性过滤,例如:文件大小等----------------------------- 5.File[] listFiles(FileFilter filter) 获取根据文件过滤后的文件对象 FileFilter:文件过滤器接口 2. 递归: 1. 概念:是一种思想,也是一种算法。在方法内部调用自己的方法。(自己干自己) 2. 作用:就是简化有相似的业务逻辑(循环)代码。 3. 使用规律特点: 1. 通过数值带入的方式,查找逻辑规律: 将所有的已知条件写出来 就是有相似运算逻辑的代码 2. 通过条件判断(条件/循环)的方式,在满足条件的时候根据规律调用自己的方法。 如果不满足就不会自己的方法,这就是出口 4. 使用场景: 1. 树状结构数据、菜单结构、上下级关系等的数据查询 2. 有相似逻辑运算的结构 3. 适用于层级结构少,数据量小的场景。(最重要)如果层级多,且数据量大用循环。 5. 解决了哪些问题: (1)数据的定义是按递归定义的。(Fibonacci函数:斐波拉契数列) (2)问题解法按递归算法实现。(汉诺塔问题) 这类问题虽则本身没有明显的递归结构,但用递归求解比迭代求解更简单,如Hanoi问题。 (3)数据的结构形式是按递归定义的。 如二叉树、广义表等,由于结构本身固有的递归特性,则它们的操作可递归地描述。 6. 注意事项: 1. 递归必须 有出口 2. 能用循环用循环,不要用递归,因为效率极其低下。 为什么效率低下? 方法的调用都是创建新栈帧,入栈,而栈层级是有限制的 StackOverflowError : 栈内存溢出错误。

2020-03-12

day017-Map和泛型 代码和笔记.rar

day017-Map和泛型 代码和笔记.rar 1. Map:地图 2. Properties类:常用来做配置文件 (掌握) 3. 泛型:就是一个占位符号而已,在设计类的时候,占用位置就是在设计类(接口等)的时候,没有给规定具体是什么类型的参数,在实例化或调用的时候再传入具体的类型,告诉编译器这是什么类型。

2020-03-10

day016-list和set笔记以及代码.zip

总结一下: ArrayList:如果是查改多,用ArrayList LinkedList:如果是增删插多,用LinkedList Vector:如果是有线程安全要求用Vector 如果是不能存放重复的元素,用Set接口下的实现类 HashSet:如果没有任何排序要求,用HashSet,因为效率高 TreeSet: 如果有排序要求用TreeSet, 如果是自然排序,需要元素实现Comparable接口,重写compareTo方法 如果是定制排序,需要创建TreeSet对象的时候,传入一个Comparetor接口实现类对象,重写compare方法 一般是默认排序用自然排序(Comparable接口),特殊排序用定制排序(Comparetor接口实现) LinkedHashSet:如果需要元素不重复,并且,有存入和取出顺序要求用LinkedHashSet

2020-03-09

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除