
JavaEE
Java初级的一些总结
慕北丶
面向对象面向君,不负代码不负卿
展开
-
线程习题
1、请设计一个程序证明使用wait()休眠的线程会释放锁,使用sleep()休眠的线程不会释放锁。而且说明证明的过程。证明:使用wait休眠的方法会释放锁。让A线程访问对象的一个同步方法,之后在该方法中使用wait休眠,此时再让B线程访问该对象同步方法,如果B线程能访问则证明A线程在休眠的时候释放了锁,如果不能访问则A线程休眠的时候没有释放锁。package com.sun.test;im...原创 2019-03-02 16:13:50 · 203 阅读 · 0 评论 -
线程的生产者和消费者模型
生产者和消费者模型:该代码模型的目的就是让我们对多线程更加深入的理解,所谓的生产者就是负责生产对象的一个线程(生产者线程),消费者就是负责消费(取出对象)生产者生产的对象的另外一个线程(消费者线程)。创建一个Animal类:package com.sun.test;import java.io.Serializable;class Animal implements Serializab...原创 2019-03-02 14:42:28 · 308 阅读 · 0 评论 -
线程的深入研究
多线程的三个特性:1.原子性(非常重要)原子性是指操作是不可分的,其表现在于对于共享变量的某些操作是不可分的,必须连续完成。例如a++,对于共享变量a的操作,实际上会执行三个步骤,1,读取变量a的值,2,a的值 +1,3,将值赋予变量a。这三个操作中任何一个操作过程中,a的值被人篡改,那么都会出现我们不希望出现的结果。所以我们必须保证这是原子性的,Java中的锁的机制解决了原子性的问题(在执行...原创 2019-03-02 12:16:56 · 194 阅读 · 0 评论 -
线程的同步
线程的同步:多个线程可以共享一个数据,这样有其优点,也有弊端,弊端是可能因为线程的不同步导致数据出现一些逻辑的错误,没有考虑线程安全性,如果要避免这些数据错乱风险的出现可以让线程实现同步。线程同步是什么呢?线程同步就是在多个线程访问某个对象的方法或者是某代码的时候同一时间只能一个线程访问,其他线程等待上一个线程访问完毕之后再进行访问。观察代码:package com.sun.test;c...原创 2019-03-02 10:04:00 · 183 阅读 · 0 评论 -
简单使用线程
使用三个线程出售10张票:package com.sun.test;class MyThread extends Thread { private int ticket=10; @Override public void run() { for(int i=0;i<10;i++) { if(this.ticket>0) { System.out...原创 2019-03-01 17:08:19 · 238 阅读 · 0 评论 -
线程的优先级,线程的休眠
线程的优先级:我们知道线程是并发的,是随机的,先抢到cpu资源的线程就先执行,但是可以通过改变线程优先级的方式来影响线程执行的先后顺序。原理上说线程优先级越高则越先执行,但是这只是线程优先级高的先被执行的概率增大而已,不是线程优先级高的一定先执行。操作线程优先级的方法:public final int getPriority()【取得线程的优先级】public final void s...原创 2019-03-01 16:29:20 · 356 阅读 · 0 评论 -
线程的名称
线程的名称:每个都有自己的名字,jvm区分线程之间的关系也是基于线程名称作为标准,如果没有人为的去指定线程的名称则jvm会为每个线程给出默认的唯一的名字。如果要人为的去指定线程的名称需要使用到如下的方法:public final String getName()【取得线程的名称】public final void setName(String name)【设置线程的名称】上面是使用普...原创 2019-03-01 15:30:23 · 1082 阅读 · 0 评论 -
线程
线程和进程的概念:其实在电脑上打开一个应用程序的时候就开启了一个进程,比如果我们在打开播放器在线观看电视剧的时候,此时就开启了一个进程,可以一边播放一边缓存下载,播放是一个线程完成的,缓存是另外一个线程完成的,那么我们可以认为进程是线程的载体,一个进程由多个线程组成,线程是进程最小单位。在Java中我们第一次输出Hello world的使用在一个类中定义主方法实现的,这个主方法的运行就是启动一...原创 2019-03-01 14:31:05 · 571 阅读 · 0 评论 -
动态代理
动态代理:回顾静态代理:1、定义代理类package com.sun;interface Subject{ /** * 出门的方法 */ public void out(); /** * 进门的方法 */ public void in();}//定义接口的实现类class RealSubjec...原创 2019-03-01 11:33:05 · 127 阅读 · 0 评论 -
正则表达式
正则表达式:正则表达式使用来对字符串进行验证,在很多时候我们需要指定的字符串格式或者内容,但是客户输入可能不一样,此时可以使用正则表达式对用户输入的数据进行简单的验证。去除字符串中的非数字类型的字符:package com.sun;public class Test { public static void main(String[] args) throws Exception { ...原创 2019-02-28 21:14:31 · 145 阅读 · 0 评论 -
反射操作普通方法
反射操作普通方法:之前我们使用了反射操作构造方法,步骤是先取得构造方法,而且使用到一个表示构造方法的类型,普通方法也一样需要先使用Class类对象取得普通方法,同时也需要一个类表示普通方法,这个类是“java.lang.reflect.Method”。先使用Class类对象取得普通方法:public Method[] getMethods() throws SecurityExceptio...原创 2019-02-28 14:56:38 · 190 阅读 · 0 评论 -
反射操作属性
取得类加载器和接口:可以通过反射取得当前的类的加载器或者类的接口:取得加载器:package com.sxt;public class Test { public static void main(String[] args) throws Exception { //取得反射对象 Class<?> empClass=Class.for...原创 2019-02-28 14:47:19 · 463 阅读 · 1 评论 -
反射操作构造方法
反射操作构造方法:通过以上我们知道可以使用反射机制操作类的结构,包括调用类的构造方法、操作类的普通方法、访问类的属性、取得类或者方法上注解信息等。反射操作构造方法:要使用反射操作构造方法,得先使用堆区的那个Class类对象取得构造方法的信息,构造方法的信息取得之后需要封装到一个对象中返回(到处都是面向对象的思想),这个保存了构造方法信息的对象是什么类型呢?在Java提供了一个类型专门描述构造...原创 2019-02-28 11:37:31 · 370 阅读 · 0 评论 -
反射
反射的概念:每个类加载到运行时数据区的时候会将类的结构信息保存到方法区中(JDK1.8之前的概念),再在堆中创建一个与被加载的类对应的特殊的对象,这个对象封装方法区中类的数据结构,可以使用该对象操作类的结构信息,这种使用Class对象操作方法区中对应的类的信息的方式就叫做反射机制取得Class类对象:既然要使用这个特殊的对象区操作类的信息,那么就先要取得这个对象,取得这个对象有三种方式:1...原创 2019-02-28 11:37:09 · 154 阅读 · 0 评论 -
注解,自定义注解
注解的概念:一般情况不会让你去开发注解,但是在以后的框架中会大量使用注解,当你看到注解的时候不要觉得它是什么神奇的东西,注解的主要作用的对代码进行跟踪,警告等等,尤其是在容器中使用广泛(在容器中就使用了反射操作注解实现某些功能,比如说Spring容器中就大量的使用了注解),还可以使用反射操作注解,看看几个Java定义出的几个注解。@Override注解 @Override/* 表示该方法是覆...原创 2019-02-27 19:34:45 · 189 阅读 · 0 评论 -
GC的触发,算法
GC的触发:运行时数据区中最大的区域的堆内存,我们说堆是GC主要处理的区域,所以又叫GC堆。如果要知道GC的触发过程那么对内存还需要继续划分对象的创建和上面的区域发生密切的关系,其中也会在上面的区域触发GC分析GC触发的过程:1.当创建一个新对象的时候需要为新对象申请空间,在伊甸园区申请,但是需要判断一点园区的空间是否充足,充足则申请成功,如果不充足则触发MinorGC回收不活跃的对象(...原创 2019-02-26 16:10:54 · 411 阅读 · 0 评论 -
JVM,Java类的加载机制
JVM的运行机制概要:如果要运行Java程序,首先要编写Java源文件(* .java),之后Java的编译器将源文件编译成字节码文件(* .class文件),之后再通过类加载器将字节码文件加载到JVM中,其中与程序运行最密切的是JVM中的运行时数据区(Runtime data area)运行时数据区(JVM内存模型)程序的运行最为重要的一块区域就是运行时数据区,其中运行时数据区可以分为如...原创 2019-02-26 14:47:15 · 250 阅读 · 0 评论 -
链表
链表的概念:链表属于一种数据结构,链表可以保存多个数据,以节点的形式出现,每个节点都可以保存数据,而且每个节点除了可以保存数据之外还必须有对下一个节点的引用链表是HashMap的实现原理之一,是HashMap的基础public class NodeDemo02 { public static void main(String[] args) { //创建出节点 ...原创 2019-02-25 15:46:27 · 226 阅读 · 0 评论 -
二叉树,内部类
二叉树概念:二叉树是保存数据的一种结构,二叉树由节点组成,每个节点有一个或者两个或者零个节点,子节点又分为左子节点和右子节点,一般习惯让左子节点比右子节点小。比如说一个数组中的元素就可以按照二叉树结构进行保存将数组的元素保存到二叉树结构中:{32,10,9,78,23,15,90,85,100}此时数组的元素以二叉树的结构进行保存,取数据的时候就可以升序或者降序获取了内部类:内部类就是...原创 2019-02-25 10:51:33 · 228 阅读 · 0 评论 -
递归方法
方法的递归就是自己调用自己,但是必须在方法中有让递归结束的条件,方法的调用会在虚拟机栈中出现入栈和出栈的过程,递归调用就意味着要迅速的出现很多栈帧,如果没有结束条件则会出现栈内存溢出(StackOverFlow)。package com.sun.test;public class Test { static int num=10; public static void main(S...原创 2019-02-24 21:34:42 · 214 阅读 · 0 评论 -
对象的序列化
对象的序列化:所谓的对象序列化就是将内存中对象转换成二进制之后进行传输到指定的文件,也可以在网络之间进行传输,对象的序列化需要使用到的类ObjectOutputStream类public ObjectOutputStream(OutputStream out) throws IOException构造方法,需要一个字节输出流对象作为参数public final void writeObje...原创 2019-02-24 20:17:45 · 148 阅读 · 0 评论 -
Scanner流和打印流
io中的装饰者:我们以及指导了InputStrem(处理字节输入流)和OutputStream(字节输出流)两个基本刘的作用,但是哟偶一个小问题,如果要使用OutputStream输出数据,假设输出的是一个String类型,需要将String转换成字节数组之后在输出,如果要输出的数据是int,则需要将int变成字符串之后在换成自己的数组输出,为了解决这个缺陷,java提供了另外一个类对Outpu...原创 2019-02-24 11:48:55 · 326 阅读 · 0 评论 -
装饰者模式
装饰者模式:思考问题:如果电脑最基础的功能是能够办公使用(function),但是用户买来之后可以在电脑原有的功能上增加功能,可以增加的功能是 可以进行代码开发(programing)、可以吃鸡(games)、能跑十台虚拟机(Virtual)、能看高清电影(movies),此时就是五种功能的任意组合,要在原有的电脑的基础上扩充新的功能,那么就要继承原来的功能的同时又增加新的功能,此时我们考虑使用...原创 2019-02-23 14:43:40 · 101 阅读 · 0 评论 -
字符输出流,字符输入流
字节流是以字节为单位进行数据的传输,字符流传输的一般是图片,音频,视频等格式的文件,字符流是以字符为单位进行数据的传输,要实现字符输出流操作需要使用到的类有:抽象类java.io.Writer以及其子类FileWriter类public void write(char[] cbuf) throws IOException每次输出一个数组长度的内容public void write(char[...原创 2019-02-22 20:50:51 · 689 阅读 · 0 评论 -
流的概念,字节输出流,字节输入流
流的概念:在之前的课程中我们学习类“File”,该类是对文件进行操作的,但是只能操作文件的的本身,而不能操作文件中的内容,比如要将程序中的字符串写入文件中这样的功能使用“File”是无法实现的如果要实现这样的功能需要使用流的概念,先将程序中的字符串转换成二进制的形式之后按照流的方法进行读取或者输出字节输出流:字节输出流很显然就是以字节为单位从程序文件中输出内容,如果要实现字节输出流的操作...原创 2019-02-22 16:02:44 · 305 阅读 · 0 评论 -
适配器设计模式
适配器设计模式:所谓的适配器设计模式就是在接口(或者抽象类)与子类之间定义一个中间类,让中间类去实现接口,然后子类再继承中间类,这样的好处是子类可以选择性的覆写接口的方法。package com.sun;public class Test{ public static void main(String[] args) { }}interface Animal{...原创 2019-02-21 20:47:25 · 154 阅读 · 0 评论 -
模板设计模式
模板设计模式:在生活中比如出去吃饭,①先下订单–》②吃饭–》③吃水果–》④结账,在整个过程中流程是不变的,但是第二个步骤可能因为人的不同国家或者名族吃饭方式不同(所以饭店不可能规定出吃饭的方式,客户自己选择吃饭的方式),第三个步骤可以客户可以自己选择要吃的水果,如果不选择那么商家就默认给你香蕉,第四个步骤由于商家没跟上互联网的时代,所以只能支持现金支付(这时候商家要求客户必须使用现金支付的) ...原创 2019-02-21 20:43:30 · 142 阅读 · 0 评论 -
代理设计模式
代理设计模式:代理设计模式就将一些辅助的业务程序交给代理类去完成的一种思想。其实在生活中也有类似的情况,比如说要出吃饭,需要先打开门,出去之后需要关闭门,回来也需要先开门在关门,其实人出去吃饭才是真正的要做的事情,关门和开门只是辅助性的操作,辅助完成出去吃饭的必要步骤而已,有人感觉关门和开门是一些重复性的动作,于是就出现了红外线感应,感应到人到了之后会自动打开门,然后人走开之后自动关闭,此时红...原创 2019-02-21 20:36:34 · 135 阅读 · 0 评论 -
工厂设计模式
为什么要使用接口:其实上使用接口的其中一个某地就是为了解耦合,什么是耦合?耦合就是代码之间的依赖程度,依赖程度越高耦合就越高,耦合高的代码是不好的,因为应变性差。package com.sxt;public class Test { public static void main(String[] args) { Bird bird=new Bird(); ...原创 2019-02-21 20:32:41 · 202 阅读 · 0 评论 -
单列设计模式
设计模式的概念:: 所谓的设计模式就是为了提高代码的重用性,优雅性, 实现高内聚低耦合,以及满足开闭原则提出的开发思想, 目前成熟的设计模式有23种, 其中如下的几种我们需要掌握的: 单例设计模式,工厂设计模式(简单工厂,方法工厂,抽象工厂) 代理设计模式(静态代理,动态代理(JDK原生代码实现, cglib实现)),适配器设计模式,模板设计模式, 装饰者设计模式单例设计模式:...原创 2019-02-21 20:10:54 · 228 阅读 · 0 评论 -
单元测试
单元测试的步骤: 1.书写一个方法 这个方法必须没有参数,没有返回值 访问权限修饰符必须写public 方法名称建议 test+需要测试的方法名称 2.加入单元测试注解 3.右键你写的这个测试方法,run as JUnit Testpackage com.sxt.junitdemo;import java.io.File;import java.uti...原创 2019-02-20 15:47:01 · 103 阅读 · 0 评论 -
Lambda
Lambda:函数式接口:只有一个抽象方法的接口就是函数式接口Lambda表达式的本质就是匿名内部类的简化写法package com.sxt.lambdademo;public class LambdaDemo01 { public static void main(String[] args) { new Inter() { @Override ...原创 2019-02-20 15:26:50 · 80 阅读 · 0 评论 -
文件File
File类概述:文件 File static String pathSeparator ; 与系统相关的路径分隔符字符,为方便起见,表示为字符串。 static char pathSeparatorChar ; 与系统相关的路径分隔符。 static String separator 与系统相关的默认名称 - 分隔符字符,以方便的方式表示为字符串。 ...原创 2019-02-18 22:02:01 · 213 阅读 · 0 评论 -
枚举
为什么要学习枚举?什么是枚举?枚举指的是在一定范围内取值,这个值必须是枚举类型中的任意一个,而且只能够取其中一个枚举的特点:1.枚举的本质就是构造方法私有的Java类2.switch语句可以使用枚举类型3.枚举的取值范围必须是规定范围内取值,并且只能够取范围内的其中一个4.枚举的常量成员必须是枚举体中的第一句5.如果枚举中除了常量成员还有其他成员的话,必须加上分号,没有可以省略6...原创 2019-02-18 20:12:22 · 453 阅读 · 0 评论 -
集合的练习
ArrayDeque 类 特点: 1.基于数组的双端队列的实现 2.增加删除的效率低,查询和修改的效率高 LinkedList 特点: 1.底层是基于链表的双端队列 2.增加删除的效率高,查询和修改的效率低 3.同时也实现了List接口 使用LinkedList模拟栈结构和队列结构package com.sxt.listsondemo;import...原创 2019-02-17 19:25:43 · 205 阅读 · 0 评论 -
集合的总结
集合单列集合 Collection 常用方法: 1.添加功能 boolean add(Object obj) boolean addAll(Collection c) 2.删除功能 void clear() boolean remove(Object o) boolean removeAll(Collection<?> ...原创 2019-02-17 15:56:03 · 105 阅读 · 0 评论 -
Collections工具类
Objects object的 Arrays 数组的 Collections 集合的 Files... 文件的 单列集合 务必记住ArrayList 双列集合 务必记住HashMap和TreeMap,LinkedHashMap 但是实际开发中还是要根据效率选择不同数据结构的集合package com.sxt.collectionsdemo;impor...原创 2019-02-17 15:37:59 · 122 阅读 · 0 评论 -
Map集合,HashMap,TreeMap,LinkedHashMap,WeakHashMap
为什么需要mpa集合?学生id 姓名 年龄 成绩2018050401 张三 18 80.02018050402 李四 20 85.02018050403 李四 21 89.02018050404 王五 21 89.0如果使用已经学习过的知识点,如何来存储如上数据?第一列:HashSet&lt;String&gt; idList第二列...原创 2019-02-16 21:56:18 · 207 阅读 · 0 评论 -
Set接口,HashSet类,TreeSet,LinkedHashSet类
Set接口特点:1.唯一2.无序3.可以存储null值,但是null值不能重复package com.sxt.setdemo;import java.util.HashSet;import java.util.Set;public class SetDemo01 { public static void main(String[] args) { Set&lt;Stri...原创 2019-02-15 21:19:22 · 168 阅读 · 0 评论 -
泛型
泛型1.为什么需要有泛型:没有泛型之前的做法是使用Object接收任意类型,这样在向下转型的过程中会出现类型转换异常,类型转换异常我们可以使用instanceof关键字做判断,但是这样对于集合的变量来说没有遍历完全,因为集合的特点是能够存储所有的引用类型,而我们知道Object有无数个子类,我们无法对每一个子类做逐一判断,所以安全隐患永远存在,如果不逐一判断,没有安全问题,但是不能完...原创 2019-02-15 20:59:02 · 133 阅读 · 0 评论