12 2019 档案
摘要:当char byte short变量参与运算时,会自动转换为int型数据进行运算。 当使用*= += /= -=等扩展运算符进行运算时,会自动进行数据类型转换。 所以:会报错。 short s = 1; short s1 = 2; short s2 = s+s1; 而:不会报错 short s =
阅读全文
摘要:接口中的方法包括:抽象方法,默认方法和静态方法。 其中抽象方法没有方法体,用public修饰。 默认方法用default修饰,必须有方法体。 静态方法必须有方法体。 interface A{ public void test1(); void test2(); default void test3(
阅读全文
摘要:toArray() toArray方法与toString、getBytes等转换数据结构的方式一样频繁被使用,所以应该掌握它。 new String[0] 在使用toArray方法时,我们在参数列表中传入new String[0] 表示这个方法将返回一个String类型的字符串。 List<Stri
阅读全文
摘要:HTTP服务器 http协议的底层是tcp/ip协议,浏览器与服务器的交互就是tcp的通信过程。所以我们可以使用先前学的tcp通讯知识点搭建一个简单的服务器。 思路 使用ServerSocket创建一个服务器端(指定端口为8888),阻塞式接受tcp请求(accept()方法) 从浏览器访问:htt
阅读全文
摘要:新:使用Dom4J的SAX解析XML 我就不详细写了 SAXReader reader = new SAXReader(); Document doc = reader.read(new File("conf/emplist.xml")); Element root = doc.getRootEle
阅读全文
摘要:字面量就是123 'a' "fff"等如此的直接量。 在创建变量初始化值推荐使用字面量,因为使用字面量可以实现复用。而使用new则必定在内存在开辟新的空间。 字面量示例 String str1 = "123"; String str2 = "123"; String str3 = "12"; str
阅读全文
摘要:1.Arrays.asList方法的问题 为什在使用Arrays.asList()方法时,当传入基本数据类型数组,返回的是List<数组>,当传入String[] 与Integer[]返回的却是List<String>与List<Integer>? int[] arr = {1,2,3}; Inte
阅读全文
摘要:三大变量 成员变量 实例变量(类变量) 静态变量(static修饰的类变量) 局部变量 初始化 实例变量在new的时候被创建在堆中,实例变量的默认值为基础数据类型与引用数据类型的默认值。 静态变量:静态变量在类加载时被存储在方法区中。如没有初始化,则为基础数据类型与引用数据类型默认值。 成员变量:无
阅读全文
摘要:GC是JVM中自带的一个线程 他会不定时来堆中回收那些不再使用的对象,以释放内存 可以通过System.gc()来主动建议jvm尽快调度gc来回收垃圾 不同的平台的jvm对GC的策略是有所不同的 我们可以使用引用=null的方法断开引用与对象的指向,使该对象变成一个垃圾,会在gc来的时候,被回收掉。
阅读全文
摘要:思路 客户端读写各一个类,可以使内部类,实现Runnable。读写类都与服务器端建立连接,一个收,一个发。 客户端实现接收和转发。多线程实现每个客户端的连接(使与各客户端的连接独立)。 服务器端中创建一个公共缓冲池,用于存放消息。通过服务器中的转发方法转发给个客户端。 客户端 代码 package
阅读全文
摘要:转自:https://blog.csdn.net/u012525096/article/details/76924627 今天写安卓向服务器发送图片,过程为:客户端发送数据->服务器接收、处理数据->服务器返回处理信息->客户端接收数据并显示。安卓客户端中,发送数据(out.write)后,调用ou
阅读全文
摘要:java中有两种内部类 成员内部类:即写在类中的类 局部内部内:写在方法中的类 静态内部类:使用static修饰的成员内部内,可以直接new 匿名内部类:使用最多的一种形式,懂就行 参考文章 :https://www.cnblogs.com/xiaoxi/p/7338771.html
阅读全文
摘要:TCP编程 TCP编程是面向连接的数据传输,所以需要时用IO流来建立连接。 用户输出流到服务器,服务器输入流接收数据。 服务器输出流到用户,用户输入流接收。 基本流程 服务器端 创建服务器端:ServerScoekt 对象 阻塞时监听用户接入:accep() 返回Socket对象 建立连接:与返回的
阅读全文
摘要:UDP编程标准步骤 服务器端 使用DatagramSocket创建服务端:DatagramSocket server = new DatagramSocket(port);//参数为自定义端口号 准备接受容器1:必须是byte数组 使用DatagramPacket创建接受容器2:DatagramPa
阅读全文
摘要:认识URI、URL、URN 详细请参考:https://blog.51cto.com/xoyabc/1905492 URI:uniform resource Indent 统一资源标识符 URL:uniform resource locator 统一资源定位符 URN:统一资源名称 它们的关系如:
阅读全文
摘要:端口与几个CMD命令 公认端口:0-1023 比如80端口分配给www,21端口分配给FTP等 注册端口:2014-49151 分配给用户进程或引用程序 动态/私有端口:49151-65535 需要知道的CMD命令 查看所有端口 :netstat -ano 查看指定端口:netstat -ano|f
阅读全文
摘要:容器,就是用来存放数据的,本文将使用两个容器俩储存一个表格数据。 使用的容器可以是任何容器,选择合适的,能满足需求即可。 本案例使用的容器是:列:使用Map 行:使用List 目标表格展示: 代码实现 提到一个词:ORM 对象关系映射 package _20191213; import java.u
阅读全文
摘要:Collections是一个工具类,它提供了与集合操作有关的方法,好比数组中的Arrays工具类。(jdk中的工具类名都是xxxs,有关工具类名参考:https://zhuanlan.zhihu.com/p/93737066) 工具类一般不提供构造方法,直接使用类名点的方式调用方法。 只能对List
阅读全文
摘要:迭代器的获取 LIst与Set容器统一使用他们的对象.Iterator()方法获得迭代器对象,然后使用while循环配合迭代器的方法hasNext()及next()来遍历容器。 List<String> myList = new ArrayList<>(); Iterator<String> it
阅读全文
摘要:方法重载与下列因素相关: 1. 参数个数不同。 2. 参数类型不同。 3. 参数的多类型顺序不同 方法重载与下列因素无关 1. 与参数的名称无关,无法根据参数名称进行重载。 2. 与方法的返回值类型无关。 思考:为什么参数的多类型不同顺序也会构成重载?
阅读全文
摘要:HashSet的特点: 无序,不可重复。 HashSet实现自Set,而Set继承自Collection,在日常使用中,我们都是以Set引用指向HashSet对象的方式。 所以,Set中的方法是我们主要学习的,而Set中的方法与属性,基本都是Collection里的方法与属性。 主要有以下 : Ha
阅读全文
摘要:红黑树是比较难以理解的一种数据结构。它能从10亿数据中进行10几次比较就能查找到需要的数据。效率非常高。 理解起内部结构也难。 现阶段我们知道有这种东西就行了。 参考文章: https://www.jianshu.com/p/e136ec79235c
阅读全文
摘要:权限从小到大: private protected default public private : 类 protected :类,包 default : 类,包,子类 public :所有地方 权限修饰符对外部类的修饰:只能使用public 与 default 对类修饰 权限修饰符对成员内部类的修
阅读全文
摘要:权限修饰符需要注意的地方 派生类重写超类中的方法的权限修饰符,只能比超类的该方法的权限修饰符大或一样大。 权限修饰符的大小顺序:public default protected private 如超类中某方法的权限修饰符为:protected 则它的派生类重写此方法时可以使用:protected d
阅读全文
摘要:多态三要素: 1.继承 2.重写父类方法 3.父类引用指向子类对象 代码: package _20191211; /** * 多态 * @author TEDU * */ public class PolymorphicTest { /** *多态三要素: *1.继承 *2.重写父类方法 *3.父类
阅读全文
摘要:向上造型(转型) 定义:超类的引用指向子类对象。 例如: Animal o1 = new Tiger();//Tiger是Animal的派生类(子类) 以上即为向上转型。 特性: 向上转型后的引用只能使用超类中的方法和属性。 向上转型后的引用不能使用派生类中自有的方法和属性,可以使用重写父类的方法
阅读全文
摘要:哈希表结构 哈希表是由数组+链表组成的,首先有一个数组,数组的每一个位置都用来存储一个链表,链表的基本节点为:【hash值,key值,value值,next】,当存入一个键值对时,首先调用hashcode()方法获得key的hashcode,然后通过算法计算出hash值,当不同的key取到相同的ha
阅读全文
摘要:HashMap的概念 HashMap底层实现了哈希表,这是一种非常重要的数据结构,对于以后我们理解很多技术都有帮助,例如 redis数据库的核心技术和HashMap一样,因此,非常有必要让大家理解。 HashMap的数据结构由数组和链表来实现对数据的存储,它们各有特点: 数组:占用空间连续,寻址容易
阅读全文
摘要:在List中,最常用的三个List为: ArrayList 频繁查询时推荐使用 LinkedList 频繁增删时推荐使用 Vector 线程安全时推荐使用 Vector的底层跟ArrayList相差无几,在需要线程安全的方法中使用了synchronized。
阅读全文
摘要:概念 LinkedList级双向链表,它的单位是节点,每一个节点都要一个头指针和一个尾指针,称为前驱和后继。第一个节点的头指针指向最后一个节点,最后一个节点的尾指针指向第一个节点,形成环路。 链表增删速度快,查询速度慢。 手写LinkedList 通过今天手写LinkedList,我觉得,我并没有体
阅读全文
摘要:方法都比较简单,这里列出来即可: add(index,ele) //忘制定下标插入元素 add(ele) addAll(Collection <C> c) 泛型必须与调用add的泛型保持一致 set(index,ele) remove(index) remove(Object) removeAll(
阅读全文
摘要:emm...记一些关键词吧 原子操作 悲观锁、乐观锁 比较交换 硬件层面 C、C#底层实现 JUC = java.util.concurrent 高级并发才使用 面试会问到 了解即可 剩下的内容交给未来的自己吧!——2019.12.9
阅读全文
摘要:我们使用的synchronized加的锁是可以延续使用的,如下: public void test() { //第一次获得锁 synchronized(this) { while(true) { //第二次获得同样的锁 synchronized(this) { System.out.println(
阅读全文
摘要:目前阶段,我只能知其然,不能做到知其所以然,这里引用一篇其所以然的文章,为以后理解ThreadLocal做准备: https://www.cnblogs.com/ldq2016/p/9041856.html 我把它大概理解为:一个线程模型,这个模型下的线程都共享这个模型下的一个泛型引用变量,但各线程
阅读全文
摘要:在多线程并发的情况下,同一个变量被多个线程调用,那修改的数据就不会每分每秒保持一致。例如,对于某个变量a,线程1对它进行一套操作,线程2又对它进行另一套操作,但如果cpu太忙了,太忙了,假设cpu都用来处理线程1了,线程2对a的值进行修改了,也没有应用到线程1中来。(这只是可能发生的事,不是绝对发生
阅读全文
摘要:线程通信 图片来源:尚学堂ppt 线程通信模型 管程法 案例一 没有加线程通信: 情景设置:工厂(生产者)生产馒头,仓库(缓冲器)存储馒头,商店(消费者)从仓库取走馒头,加线程安全,不加线程通信 package _20191206; /** * 生产者消费者模型:管程法 * @author TEDU
阅读全文
摘要:一线程持有a资源,需要获取b资源才释放a资源。 二线程持有b资源,需要获取a资源才释放b资源。 造成死锁。 下面举个例子: 两个女人化妆,需要镜子和口红,两个人一个先拿镜子,再拿口红,另一个先拿口红,再拿镜子 /** * @author TEDU * 死锁出现的情况多是锁套锁。 */ public
阅读全文
摘要:在java中,有一个专门用来处理并发容器的包:java.util.concurrent 包,其中有一个CopyOnWriteArrayList类,相当于ArrayList的线程安全版。 我们可以使用它代替ArrayList,就无需加synchronized来锁线程了。 注:本节内容了解即可(面试用)
阅读全文
摘要:一个小总结 Synchronized与同步块的形象比喻: 我们以去商店买衣服为比喻:synchrnized锁方法就好比去一家商店买衣服,一次只能进一个人,买完出来才能进第二个人。而同步块则是在整个买衣服流程的关键之处:试衣间换衣服,结账(假设只有一个试衣间,只有一个收银台)时做了排队处理,排队使得数
阅读全文
摘要:问题如图 点击 Attach Source 解决方法 下载src.zip包,src包地址:https://pan.baidu.com/s/1oAqqqHO 选择此src包即可
阅读全文
摘要:守护线程概念 线程分为守护线程与用户线程 虚拟机必需确保用户线程得以执行完毕 虚拟机无需确认守护线程执行完毕 守护线程如后台日志记录,内存监控之类 英文为:daemon 我们需要强调的就是:虚拟机无需等待守护线程执行完毕,当所有用户线程执行完毕后,程序就关闭。 讲一个进程设置为线程的方法为: 线程对
阅读全文
摘要:优先级概念 线程的优先级可以让线程获得高概率或低概率的cpu调度机会。不是绝对的优先,只是高优先级会被优先调用。 优先级为1-10,最低为1,最高为10,默认为5。可以自行设置值。 设置优先级必需在线程start()之前。 Thread类的优先级常量 MAX_PRIORITY 10 MIN_PRIO
阅读全文
摘要:线程的五大状态 线程的五大状态为: 新生状态 就绪状态 运行状态 阻塞状态 死亡状态 图示一: 图示二: 改变线程状态的方法 新生线程 :new Thread() 就绪状态:start()方法进入就绪状态,阻塞结束进入就绪状态 运行状态:通过cpu调度算法将就绪状态的线程按优先级进行调用运行 手动停
阅读全文
摘要:匿名内部类 参考:https://www.runoob.com/w3cnote/java-inner-class-intro.html 进入后搜索匿名内部类。 函数型接口 函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。 例如,我们
阅读全文
摘要:引入 在前一节我们学习了实现Runnable接口创建线程,其中提到只使用一次对象时使用匿名对象,如: new Thread(new xxx().start();//xxx为实现了Runnable的类 Thread就是一个静态代理,使用了这种方法,xxx类无需继承Thread类,就可以通过Thread
阅读全文
摘要:线程的流程 线程的创建 有三种方法,重点掌握前两种: 继承Thread类 实现Runnable接口(推荐使用:避免单继承的局限性) 实现Callable接口 根据java的思想,要少用继承,多用实现。 第一种:继承Thread类 继承Thread的类必需重写run方法,run方法即为线程体。 当程序
阅读全文
摘要:案例 设置一个异常:非法年龄异常,当Person类的setAge方法检测到参数age的值大于100或小于0时,抛出该异常。 需要注意的地方 自定义异常继承自Exception或RuntimeException 异常后显示的自定义信息定义在构造方法中,如下面代码 异常要声明在方法后面:方法() thr
阅读全文
摘要:自动转换顺序:byte->short->int->long->float->double ,char->int byte short char只要参与运算,就会自动转为int型进行运算。 如代码: public class TypeChange { public static void main(S
阅读全文
摘要:引用声明:部分内容来自文章:http://c.biancheng.net/view/1100.html 枚举Enum类是java.lang下的一个类。 枚举的命名规范 枚举名:大驼峰 枚举值:全大写,下划线分割 枚举的声明 enum-modifiers enum enumname:enum-base
阅读全文
摘要:本文讲讲几个Collection的常用方法,这些方法在它的子类中也是很常用的,因此这里先拿出来单独讲解,以后它的子类中的这些方法就不再重复讲解。 几个常用方法: add() 添加一个元素 size() Object[] toArray() 返回一个Object数组 isEmpty() remove(
阅读全文
摘要:alt+shift+w : 调出一个菜单,可以调出outline与package explorer alt+shift+s:快速构造方法 ctrl+t:查看继承 ctrl+shift+f:调整格式,或者,右键source->format 快速更改指定的所有变量:光标在变量,alt shift r 即
阅读全文

浙公网安备 33010602011771号