- 博客(34)
- 收藏
- 关注
原创 创建和销毁对象
本文是Java 四大教科书之一的Effective Java的中文第三版的笔记整理第二章:创建和销毁对象1,用静态方法类替代构造器为什么要使用静态方法而不是public构造器:优点:1,静态方法是有名字的,构造器只能根据参数来决定返回实例的类型.但是通过静态工厂方法就可以避开这个过程.2,可以复用对象,不用每次都创建一个新的实例,而这个实例可以是提前构造好的,从而实现实例受控类.3,返回原返回类型的任何子类的对象.4,返回对象的类可以随着每次调用而发生变化,取决于参数值.5,方法返回的对象
2020-07-27 08:50:00
321
原创 Java多线程系列2: 锁
Java多线程系列2: 锁本文是作者的读博客笔记和心得整理,也引用了一些比较好的博客文章,部分内容来源于网络,如有侵权,请联系作者。什么是锁锁即为保护一个共享代码块(临界区)只能被一个线程进行访问.使用synchronized,在public后面,返回值前面被锁保护的共享变量在释放锁之前是对其他线程不可见的,在B拿到锁之后立刻可见.主要的操作是当线程A释放锁的时候,JMM会立刻把A的共享变量刷新到主内存去.这样B拿到锁的时候,B的本地内存被置为无效,从而使得B必须去主内存中获取.Synchron
2020-07-13 04:03:44
179
原创 Java多线程系列1: 并发
Java多线程系列1: 并发本文是作者的读博客笔记和心得整理,也引用了一些比较好的博客文章,部分内容来源于网络,如有侵权,请联系作者。为什么要多线程1,资源利用率高要区分是CPU密集型还是IO密集型,因为IO是阻塞等待的,这时CPU就可以去做别的,然后等这个线程可以work了切过来的时候就可以直接工作了2,程序设计简单3,程序响应快比如一个程序监听端口8080,这时进来一个请求,立刻传递给工作者线程,然后继续监听下一个.多线程的代价1,设计复杂,尤其是子线程之间的交互2,上下文切换的开销
2020-07-13 04:03:01
168
原创 JavaWeb系列8: SpringBoot
JavaWeb系列8: SpringBoot本文是作者的读博客笔记和心得整理,也引用了一些比较好的博客文章,部分内容来源于网络,如有侵权,请联系作者。什么是SpringBootspringboot的优点在于他的项目中存在大量的配置,内置好了,而且默认配置了很多框架的使用方式.使用的优点:快速的让项目跑起来.使用方式1,选择springboot初始化器,然后一路next生成之后的初始化文件包括以下内容:SpringbootApplication: 一个带有main方法的类,用于启动应用程序S
2020-06-28 07:28:58
176
原创 JavaWeb系列7: Hibernate
JavaWeb系列7: Hibernate本文是作者的读博客笔记和心得整理,也引用了一些比较好的博客文章,部分内容来源于网络,如有侵权,请联系作者。什么是Hibernate这是一种ORM的框架,全称是Object Relative DataBase-Mapping,在java对象和关系数据库之间建立某种映射,直接存取java对象.属于在MVC中的数据持久层,也就是DAO层.DAO层主要过程是:操作XML,将数据封装到XML文件上,读写XML文件实现CURD或者使用JDBC连接数据库,实现CUR
2020-06-28 07:28:28
142
原创 JavaWeb系列6: Maven
JavaWeb系列6: Maven本文是作者的读博客笔记和心得整理,也引用了一些比较好的博客文章,部分内容来源于网络,如有侵权,请联系作者。Maven在maven出来之前,都是用Ant作为一个构建工具,并未对项目中低端工程依赖和项目本身进行管理.核心是:依赖管理, 项目信息管理, 中央仓库, 约定大于配置的核心功能使得Maven成为当前Java项目构建和管理工具的标准选择。常用maven命令mvn clean:运行清理操作mvn clean compile: 表示运行清理之后进行编译mvn
2020-06-28 07:27:54
147
原创 JavaWeb系列5: Test
JavaWeb系列5: Test本文是作者的读博客笔记和心得整理,部分内容来源于网络,如有侵权,请联系作者。单元测试主要用JUnit或者TestNG,开发者编写,针对方法级别的测试.集成测试用于检测系统能否正常工作,主要是跨组件实现测试.功能性测试专门的测试团队进行测试.JUnit注解@Test:用这个注解的方法可以作为一个测试用例.@Before:这个方法必须在每个测试之前运行@BeforeClass:在本类所有测试之前运行@After/@AfterClass:类似上面@Ign
2020-06-28 07:27:21
213
原创 JavaWeb系列4: Spring
JavaWeb系列4: Spring本文是作者的读博客笔记和心得整理,部分内容来源于网络,如有侵权,请联系作者。什么是Bean比如类里面的定义一个size变量为private,然后定义一个public的get方法,保持向后兼容性,这种手法就是bean.J2EE出现的原因:我们只想关注我们的业务逻辑, 我们不想, 也不应该由我们来处理‘低级’的事务, 多线程,连接池,以及其他各种各种的‘低级’API, 此外Java帝国一定得提供集群功能, 这样我们的一台机器死机以后,整个系统还能运转。J2EE包含
2020-06-28 07:26:44
132
原创 JavaWeb系列3: Tomcat
JavaWeb系列3: Tomcat本文是作者的读博客笔记和心得整理,部分内容来源于网络,如有侵权,请联系作者。Tomcat 体系结构Tomcat是一个基于组件的服务器,它的构成组件都是可配置的,其中最外层的是Catalina servlet容器,其他组件按照一定的格式要求配置在这个顶层容器中。Tomcat的各种组件都是在Tomcat安装目录下的/conf/server.xml文件中配置的。<Server>
2020-06-27 11:46:51
131
原创 JavaWeb系列2: JSP与Servlet
JavaWeb系列2: JSP与Servlet本文是作者的读博客笔记和心得整理,部分内容来源于网络,如有侵权,请联系作者。什么是JSP和Servletservlet:使得java可以通过HttpServletResponse对象输出HTML的内容.JSP:JavaServer Pages,在静态的HTML内容中嵌入Java代码,执行后动态生成HTML的内容各自缺点JSP:HTML中混入大量业务逻辑,隔离性不好Servlet:java生成html,可读性很差.改良:MVCMVC模式,是Mod
2020-06-27 11:46:19
160
原创 JavaWeb系列1: 连接池
JavaWeb系列1: 连接池本文是作者的读博客笔记和心得整理,部分内容来源于网络,如有侵权,请联系作者。连接池连接池技术的核心是通过减少对于连接创建和关闭来提升性能,从而便利用户复用.本质是一个容器,存放创建好的线程、http连接、数据库连接、netty连接等.构建连接池分为3步;1,初始化连接池,根据设置相应参数,连接池大小、核心线程数、核心连接数等参数,初始化创建数据库、http、netty连接以及jdk线程。2,连接池使用,前边初始化好的连接池、线程池,直接从连接池、线程中取出资源即可
2020-06-27 11:45:45
162
原创 Java基础系列19: Java序列化和反序列化
Java基础系列19: Java序列化和反序列化本文是作者的读书笔记和心得整理,部分内容来源于网络,如有侵权,请联系作者。什么是序列化对象序列化在java中代表把一个对象转换成一个字节数组存储起来.如何实现序列化类通过实现 java.io.Serializable 接口以启用其序列化功能。注意内部类是不能序列化的,因为依赖于外部类.以及静态变量也不属于对象的状态,属于类的状态,所以也不保存.总结部分:1、如果一个类想被序列化,需要实现Serializable接口。否则将抛出NotSeria
2020-06-27 11:44:28
230
原创 Java基础系列18: Java8新特性
Java基础系列18: Java8新特性本文是作者的读书笔记和心得整理,部分内容来源于网络,如有侵权,请联系作者。Lambad表达式在最简单的形式中,一个lambda可以由用逗号分隔的参数列表、–>符号与函数体三部分表示eg:Arrays.asList( "a", "b", "d" ).forEach( e -> System.out.println( e ) );注意e的类型可以不写,编译器会自动推测是什么类型当然也可以把单句指令写成大括号包含的函数体Arrays.asLis
2020-06-24 14:44:48
389
原创 Java基础系列17: 集合类
Java基础系列17: 集合类本文是作者的读书笔记和心得整理,部分内容来源于网络,如有侵权,请联系作者。Collection接口最基本的集合接口,并不提供类的实现,有List和Set两个子接口在Java中所有实现了Collection接口的类都必须提供两套标准的构造函数,一个是无参,用于创建一个空的Collection,一个是带有Collection参数的有参构造函数,用于创建一个新的Collection,这个新的Collection与传入进来的Collection具备相同的元素。List接口L
2020-06-22 12:18:35
186
原创 Java基础系列16: 内部类
Java基础系列16: 内部类本文是作者的读书笔记和心得整理,部分内容来源于网络,如有侵权,请联系作者。什么是内部类在一个外部类的内部再定义一个类;注意内部类有一些限制,比如不能被外界访问,如果定义为静态的就不能再访问外部类的变量.但是内部类是可以访问外部类的所有成员变量的,包括private使用内部类的好处内部类可以继承自某个类,相当于提供了某种进入外围类的接口;而且内部类能够独立的继承或者实现一个接口,而不用管外部类如何,也就是多重继承.静态内部类主要的特点是不依赖于外部类,以及不能
2020-06-22 12:17:59
136
原创 Java基础系列15: 多线程
Java基础系列15: 多线程本文是作者的读书笔记和心得整理,部分内容来源于网络,如有侵权,请联系作者。什么是线程线程是一个独立执行的调用序列,同一个进程的线程在同一时刻共享一些系统资源(比如文件句柄等)也能访问同一个进程所创建的对象资源(内存资源)。java.lang.Thread对象负责统计和控制这种行为。实现多线程主要是继承Thread类和实现Runable接口线程的生命周期如下图,引用自:https://www.runoob.com/wp-content/uploads/2014/01/
2020-06-22 12:17:25
149
原创 Java基础系列14: 注解
Java基础系列14: 注解本文是作者的读书笔记和心得整理,部分内容来源于网络,如有侵权,请联系作者。什么是注解引用自https://how2playlife.com/2019/09/15/15%E3%80%81Java%E6%B3%A8%E8%A7%A3%E5%92%8C%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5/, 的定义,注解可以用标签来进行解释.相当于是提供一些元数据,起到说明和配置的功能,位于java.lang.annotation中注解的用途1、生成文档
2020-06-22 12:16:42
157
原创 Java基础系列13: 枚举
Java基础系列13: 枚举本文是作者的读书笔记和心得整理,部分内容来源于网络,如有侵权,请联系作者。什么是枚举类用枚举类型定义的枚举变量只能取集合中的某一元素值,且是固定的.enum weekdays { Sun,Mon,Tue,Wed,Thu,Fri,Sat };可以给上述的这些字符都进行赋值.枚举类的定义1,不能继承其他父类,默认继承java.lang.Enum类2,默认使用final修饰3,所有实例必须在第一行给出可以拥有实例,比如上面的sun,mon都是实例,有且仅有这
2020-06-22 12:16:17
128
原创 Java基础系列12: 泛型
Java基础系列12: 泛型本文是作者的读书笔记和心得整理,部分内容来源于网络,如有侵权,请联系作者。什么是泛型直接看例子List arrayList = new ArrayList();arrayList.add("aaaa");arrayList.add(100);for(int i = 0; i< arrayList.size();i++){ String item = (String)arrayList.get(i); Log.d("泛型测试","item =
2020-06-21 05:39:42
182
原创 Java基础系列11: 反射机制
Java基础系列11: 反射机制本文是作者的读书笔记和心得整理,部分内容来源于网络,如有侵权,请联系作者。什么是反射通过反射,我们可以在运行时获得程序或程序集中每一个类型的成员和成员的信息.反射的核心是JVM在运行时才动态加载类或调用方法/访问属性,它不需要事先(写代码的时候或编译期)知道运行对象是谁。也就是说有些时候我们需要在程序运行到某一步时才去创建一个类的对象,或者根据这个对象的类型去调用某个函数,而这些在编译器是未知的.也就是动态的创建对象什么时候运用反射在运行时判断任意一个对象所
2020-06-21 05:39:03
185
原创 Java基础系列10: 回调机制
Java基础系列10: 回调机制本文是作者的读书笔记和心得整理,部分内容来源于网络,如有侵权,请联系作者。几种调用机制同步调用同步调用是最基本并且最简单的一种调用方式,类A的方法a()调用类B的方法b(),一直等待b()方法执行完毕,a()方法继续往下走。这种调用方式适用于方法b()执行时间不长的情况,因为b()方法执行时间一长或者直接阻塞的话,a()方法的余下代码是无法执行下去的,这样会造成整个流程的阻塞异步调用类A的方法a()通过新建立一个线程的方式调用类B的方法b(),代码继续往后执行.
2020-06-21 05:38:26
155
原创 Java基础系列9: 异常体系
Java基础系列9: 异常体系本文是作者的读书笔记和心得整理,部分内容来源于网络,如有侵权,请联系作者。为什么要使用异常核心用法是精准定位出现错误的地方,以及把处理错误的代码和正常逻辑代码进行分割.异常出现于程序在正常情况下无法再继续运行了,此时程序就会从所给环境中跳出,抛出异常,new一个异常对象,跳转到异常处理程序异常的体系结构Throwable这个类是所有异常的父类,有error和exception两个子类.error是不能被程序员处理的,很少出现.如果出现了我们应该修正代码,而不是去捕
2020-06-20 15:39:57
151
原创 Java基础系列8: Object类
Java基础系列8: Object类本文是作者的读书笔记和心得整理,部分内容来源于网络,如有侵权,请联系作者。Object类Object是所有类的共有祖先,属于java.lang包里,没有属性但是有13个方法,有9个是所有类都继承了;1.clone方法保护方法,实现对象的浅复制,只有实现了Cloneable接口才可以调用该方法,否则抛出CloneNotSupportedException异常。2.getClass方法final方法,获得运行时类型。3.toString方法该方法用得比较多,
2020-06-20 15:35:14
214
原创 Java基础系列7: 代码块和执行顺序
Java基础系列7: 代码块和执行顺序本文是作者的读书笔记和心得整理,部分内容来源于网络,如有侵权,请联系作者。构造方法构造方法不能被static、final、synchronized、abstract 和 native 修饰,原因是构造方法用于初始化一个新对象,所以用 static 修饰没有意义;构造方法不能被子类继承,所以用 final 和 abstract 修饰没有意义;多个线程不会同时创建内存地址相同的同一个对象,所以用 synchronized 修饰没有必要。一个类可以有多个构造方法,维持
2020-06-20 15:34:30
123
原创 Java基础系列6: 抽象类和接口
Java基础系列6: 抽象类和接口本文是作者的读书笔记和心得整理,部分内容来源于网络,如有侵权,请联系作者。抽象类只给出方法的定义而不给出方法体,也就是没有’{}’包含一个或多个抽象方法的类必须被声明为抽象类使用abstract修饰符来表示抽象抽象类不能被实例化,也就是不能new.必须由子类继承实现之后才能实例化子类.这里还有一个多态的典型例子:People people=new Teacher("教师");people.work();一个核心的判断方法:抽象类可以不包含抽象方法,包
2020-06-20 08:57:38
193
原创 Java基础系列5: 文件结构
Java基础系列5: 文件结构本文是作者的读书笔记和心得整理,部分内容来源于网络,如有侵权,请联系作者。包包的作用:1、把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用。2、如同文件夹一样,包也采用了树形目录的存储方式。同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别。因此,包可以避免名字冲突。3、包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类包声明应该在源文件的第一行,每个源文件只能有一个包声明
2020-06-20 08:56:51
247
原创 Java基础系列4: final的使用
Java基础系列4: final的使用本文是作者的读书笔记和心得整理,部分内容来源于网络,如有侵权,请联系作者。final的常规使用final关键字经常和static一同使用,代表类常量;可以选择在声明的时候初始化,或者在构造函数中初始化,无默认值常量的读取和加载类是分开的,只读取变量而不会调用构造函数,缓存在常量池中public class Main { public static final int i = 2; Main() { System.out.pri
2020-06-20 08:56:26
104
原创 Java基础系列3: String类型的分析
Java基础系列3: String类型的分析本文是作者的读书笔记和心得整理,部分内容来源于网络,如有侵权,请联系作者。初始化String类有11种构造方法,提供不同的参数来初始化.String类的对象是不可变的,一旦创建就不可改变这里要理解以下,比如:str1='a'str1='b'这是允许的,但是字符串’a’并没有被改变,只不过是str1这个指针现在指向了’b’这个对象.如果需要修改可以使用StringBuffer或者StringBuilder类5大常用方法:length(),sub
2020-06-18 16:27:32
148
原创 Java基础系列2: 自动装箱与拆箱
Java基础系列2: 自动装箱与拆箱本文是作者的读书笔记和心得整理,部分内容来源于网络,如有侵权,请联系作者。内置数据类型byte:8位的,-128到127,默认值为0short:16位,(-32768,32767),默认值为0int:32位long:64位,默认值0Lfloat:32位,默认值0.0fdouble:64位,默认值0.0dboolean:1位,默认值falsechar:16位引用数据类型对象,数组都是引用数据类型,所有的引用数据类型默认值都是null常量fin
2020-06-17 15:18:47
153
原创 Java基础系列1:三大特性
Java基础系列1:三大特性本文是作者的读书笔记和心得整理,部分内容来源于网络,如有侵权,请联系作者。何为对象对象就是instance,也可以说是实例,指的是现实世界中的实体,比如一个人,一个小狗,一粒沙子,都是一个对象。对象有以下的特征:对象具有属性和行为对象具有唯一性对象都是某个类别的实例一切皆为对象,真实世界中的所有事物都可以视为对象面向对象和面向过程的区别面向过程的本质是先后顺序,也就是先有一个流程,然后对每个流程都使用函数一步一步实现,从而最后实现整个过程。典型语言是C语
2020-06-17 13:42:41
150
原创 线程安全of JAVA
Java 线程安全和锁优化4.1 概述线程安全即为多个进程无论如何调用一个代码块,它都是安全的,这样称为线程安全弱化定义:单次调用对象的行为无需担心多线程,即为线程安全4.2 Java中的线程安全1.不可变类型:Immutable 对象一定是安全的,类似于string类型2.绝对线程安全所有代码块和方法全部使用synchronized修饰3.相对线程安全一些线程安全类,vector,hashtable等4.线程兼容ArrayList 和Hashmap5.线程对立4.3 线程安全的
2020-06-17 11:35:42
167
原创 线程模型of JAVA
Java 内存模型和线程原因:计算机的运算速度和它的存储与通信子系统速度差距太大衡量一个服务性能的高低好坏,每秒事物处理数(Transactions Per Second,TPS)是最重要的指标,代表着一秒内服务端能响应的请求总数3.1 硬件效率与一致性由于计算机的存储设备与处理器的运算速度有几个数量级的差距,现代计算机都加有高速缓存Cache:把运算需要用的数据复制到缓存中,运算结束后再从缓存同步回内存中引入了一个新的问题:缓存一致性(Cache Coherence),每个处理器都有自己的高速缓
2020-06-17 11:35:09
124
原创 垃圾回收of JAVA
深入理解java虚拟机–2垃圾收集器和内存分配策略2.1概述主要关心Java 堆中的部分内存2.2 对象已死吗死亡对象=不可能再被以任何方式引用的对象2.2.1 引用计数算法 Reference Counting给对象添加一个引用计数器,每当有一个地方引用他,计数器加一;引用失效的时候计数器减1问题:很难解决对象之间循环引用的问题2.2.2可达性分析算法Reachability Analysis从GC Root作为起点向下搜索,搜索走过的路径称为引用链(Reference Chain)
2020-06-17 11:33:55
120
原创 内存管理of JAVA
深入理解java虚拟机-HumphreyJava 内存区域与内存溢出异常1.1 运行时的数据区域1.1.1程序计数器Program Counter Register改变程序计数器的值来选取下一条需要执行的指令的字节码每个线程都要有一个独立的程序计数器,称为线程私有内存,互不影响此内存区域是唯一一个没有规定任何OutOfMemoryError情况的区域1.1.2Java虚拟机栈Java Vitual Machine Stack虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行的同时都
2020-06-17 11:23:13
163
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人