JAVA
文章平均质量分 79
sweeeeeet
越努力越幸运
展开
-
【Java】---Lock体系与AQS详解
AQS-同步器同步器是用来构建锁(Lock体系)以及其他同步组件的基础框架,他的实现主要依赖一个int状态变量以及通过一个FIFO队列共同构成同步队列。子类必须重写AQS用protected修饰的来改变同步状态的方法,其他方法主要是实现排队与阻塞机制。int状态的更新使用getState()、setState()以及compareAndSetState()。子类推荐使用静态内部类来继承AQS...原创 2019-09-03 08:48:57 · 479 阅读 · 0 评论 -
【JavaSE】线程的同步与死锁
线程的同步与死锁由于每一个线程轮番抢占资源而引起的问题,由于多个线程可以同时进入共享资源,但是由于共享资源有限,线程虽然能同时进入共享资源,但是由于出来的时间不一致,有可能导致资源已经消耗殆尽而还有线程在享用.解决方案:为这个共享资源"上一把锁",保证同一时间只有一个线程进入共享资源.synchronized称为内建锁。在Java中,任意一个对象都有一个同步锁:对象O的同步锁在任何时刻最多...原创 2019-01-14 11:41:09 · 161 阅读 · 0 评论 -
【Java】---JVM内存模型
JVM简介概念:JVM==Java Virtual Machin,意为Java虚拟机。JVM是通过软件模拟Java字节码的指令集,JVM中只是主要保留了PC寄存器,其他的寄存器都进行了裁剪, JVM是一台被定制过的现实当中不存在的计算机。.VMwave与VirtualBox是通过软件模拟物理CPU的指令集,物理系统中会有很多的寄存器Java内存区域与内存溢出异常JVM会在执行Java程序...原创 2019-01-23 19:41:04 · 191 阅读 · 0 评论 -
【JavaSE】泛型
泛型:只允许接受类,所有基本类型必须使用包装类。①泛型类:指在类定义时不会设置类中的属性或方法中参数的具体类型(Object),而是在类使用的时候再定义。优点:不需强转,需要什么类型,使用时定义什么类型即可。若类型不匹配,编译时就会报错,避免了运行时异常。(因为Object类需要强转或向下转型,若没有做到,只能在运行时报出异常,非常不安全)语法:class 类名<T>{pr...原创 2018-12-10 16:18:46 · 220 阅读 · 0 评论 -
【javaSE】文件I/O(下)
转换流1.输入字节流—InputStreamReader类InputStreamReader是Reader的子类,可以将一个字节输入流转为字符输入流。构造方法:InputStreamReader(InputStream in) 创建一个使用默认字符集的InputStreamReader。 InputStreamReader(InputStream in, Charset cs) ...原创 2018-12-10 14:28:48 · 130 阅读 · 0 评论 -
【javaSE】JDK1.8之lambda表达式
java为支持函数式编程,引入lambda表达式:lambda表达式是实现仅有一个抽象方法的接口的简化实现.在jdk1.8支持的新特性中,接口可以拥有普通方法.1.通过default关键字定义接口中的普通方法.需通过对象调用interface NewInterface { void print(); //新特性中1.可以使用default定义普通方法 public d...原创 2018-12-04 09:50:41 · 256 阅读 · 0 评论 -
【JavaSE】JCF集合框架介绍(上)
集合集合的数目是可变的,并且集合只能存储引用数据类型,不能存放基本数据类型.数组的长度不可变,数组既可以存放基本数据类型,又可以存放引用数据类型.集合类的继承关系:java.util.Collection是集合类的顶层接口,Collection使用泛型技术.List接口List接口在集合中被作为首选,因为List接口相比于Collection接口有一个get方法,可以根据索引取得内容...原创 2018-12-12 16:32:36 · 198 阅读 · 0 评论 -
javaSE高级开发之文件I/O(上)
1.数据流的概念和划分流的概念类似于管道,通过管道来实现程序或进程之间的通信.输入流:将数据源传递给程序.输出流:从程序传递到目标(内存,文件,网络等).不管是字节流还是字符流,其基本操作基本相同,本质区别是:字节流是原生操作,而字符流是经过处理后的操作.根据组成流的不同,将流分为字节流和字符流.字节流是由字节(1字节=8bit)组成,主要用于处理二进制数据;字符流时由字符(1字符=2字...原创 2018-12-05 18:00:14 · 140 阅读 · 0 评论 -
javaSE高级开发----文件I/O应用
打印出指定目录下的所有文件,并按级排列public class FileTest { public static void main(String[] args) { File file = new File("D:" + File.separator + "TL-BITE" + File.separator + "Test")原创 2018-12-05 16:37:42 · 108 阅读 · 0 评论 -
【JavaSE】常用基础类库
1.Java程序入口main函数public static void main(String[] args) {}参数列表为字符串数组,根据调用规则,谁调用谁传参,因为main()方法由JVM调用,因此args形参由JVM负责赋值,空格作为参数分割符,若参数本身包含空格,则一个将该参数用双引号括起来。2.使用Scanner获取键盘输入语法:Scanner scan=new Scann...原创 2018-12-07 17:17:55 · 528 阅读 · 0 评论 -
【JavaSE】线程锁详解
JDK1.5提供的Lock锁体系synchronized是性能低效的,提供隐式的上锁解锁,而Lock接口中提供能够由开发者实现自定义上锁解锁的显式锁,性能更高一些。实例化Lock对象private Lock ticketLock = new ReentrantLock() ; 上锁void lock()解锁void unlock();public class LockTest { ...原创 2019-01-14 11:42:04 · 153 阅读 · 0 评论 -
【JavaSE】JCF集合框架(下)(HashMap源码分析)
集合输出在进行集合输出时都利用了数据类型中定义的toString方法,或是利用了List接口中的get方法。集合输出共有四种手段:1.Iterator 2.ListIterator 3.Enumeration 4.foreach1.Iterator(单向迭代器)在Collection接口中定义由iterator方法,因此通过集合的实例化对象调用此方法就可以使用迭代器输出集合.Iterato...原创 2019-01-09 12:04:17 · 169 阅读 · 0 评论 -
【JavaSE】多线程的概念与线程的五种状态
进程知识在面试中占到80%的问题!!进程与线程的概念进程:操作系统中一个程序的执行周期称为进程。线程:一个进程执行多个任务。通常来讲,每一个任务就称为一个线程。DOS系统属于单进程,许多嵌入式系统也是单进程。进程与线程的比较:1.与进程相比,线程更加轻量级,创建,撤销一个线程比启动。撤销一个进程开销小得多。一个进程中的所有线程共享此进程的所有资源。2.没有进程就没有线程,进程一旦终止...原创 2019-01-09 18:12:39 · 232 阅读 · 0 评论 -
【Java】----对象的深浅拷贝
对象的深浅拷贝如果一个类要调用clone方法,需要实现Cloneable接口。深拷贝:会同时拷贝一个实例化对象,实现深拷贝需用序列化实现(类实现序列化接口)浅拷贝:拷贝的对象虽然是双份的,但是其对象的引用是共享的,没有被拷贝,因此若拷贝对象改变原对象的属性,会真实改变此对象。//深拷贝public class CloneTest2 { public static void mai...原创 2019-09-03 08:44:32 · 107 阅读 · 0 评论 -
【Java】---GC垃圾回收详解
垃圾回收器与内存分配策略程序计数器、虚拟机栈、本地方法栈的生命周期与相关线程有关,随线程生而生,死而死。这三个区域的内存分配与回收具有确定性,因为当线程结束,内存就跟着线程被回收了。判断对象已死的三种方法1.引用计数法:给对象增加一个引用计数器,每当有一个地方引用他时,计数器就加一,当引用失效就减一,任何时刻计数器为0的对象就是不能再被使用,判定对象已死。python语言采用引用计数法进行...原创 2019-09-03 08:43:50 · 347 阅读 · 0 评论 -
【读书笔记】多线程编程核心技术
多线程与单线程的区别?单线程下,任务是排队执行的,也就是同步,就像是在cmd下输入一条命令后, 必须等这条命令执行完才可以执行下一条命令;而多线程是异步的,线程被调用的时机是随机的,因此代码的运行结果与代码的执行顺序或是调用顺序(执行start()方法的顺序) 是无关的。实现多线程编程的方式:一共有两种: 1.继承Therad类 2.实现Runnable接口使用Thread类的方式...原创 2019-06-01 16:56:02 · 105 阅读 · 0 评论 -
【JavaSE】生产者消费者模型
生产者消费者模型生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通过阻塞队 列来进行通讯,生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要数据,而是直接从 阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力与生产者消费者模型相关的两个方法: wait()与notify()方法wait()-痴...原创 2019-08-28 09:54:43 · 156 阅读 · 0 评论 -
【JavaSE】线程池的概念及使用
线程池Java线程池是运用最多的并发框架,线程池的优点如下:1.降低资源消耗:通过重复利用已创建的线程降低线程的创建和销毁带来的消耗。2.提高响应速度:当任务到达时,任务可以不需要等待线程创建就能立即执行。3.提高线程的可管理性:由线程池统一管理调度进行线程分配和监控。线程池的处理流程:1.首先判断核心线程池里的线程是否都在执行任务。若不是,则创建一个新的工作线程来执行任务,如果核心线...原创 2019-08-19 10:04:07 · 238 阅读 · 0 评论 -
JDK1.8新特性之Stream数据流
Stream数据流Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation)。Stream API 借助于同样新出现的 Lambda 表达式,极大的提高编程效率和程序可读性当我们需要使用一个流时,通常包含三个基本步骤...原创 2019-05-23 15:57:16 · 184 阅读 · 0 评论 -
【读书笔记】java解惑
Java取余操作符(%)与操作数的符号有关,负数的取余操作结果依然是负数在Java中计算钱数最好扩大倍数,以分为单位,避免小数运算,使用int或long型,亦或是使用BigDecimal类,但是须知BigDecimal效率低,并且一定要用BigDecimal(String)构造器,使用其他参数类型的构造器可能依然会有精度问题。将两个int数值相乘时会得到另一个int型的值,若结果中需要强转为...原创 2019-04-23 22:35:25 · 142 阅读 · 0 评论 -
Java的JDBC编程
JDBC为多种关系数据库提供了统一的访问方式,真正的数据库访问操作实现是由各自数据库厂商提供的,通常把厂商提供的特定于数据库的访问API称为数据库JDBC驱动程序。JDBC使用流程加载数据库驱动Class.forName("")建立数据库连接创建操作命令执行SQL语句返回结果集处理结果关闭结果集关闭操作命令关闭连接...原创 2019-03-25 17:09:11 · 202 阅读 · 0 评论 -
【JavaSE】反射与注解
Java反射(没有反射就没有任何EE框架)1.认识反射反射指的是对象的反向处理。根据对象倒退类的组成反射由JDK1.0产生反射的核心处理在于Object类的方法:取得类的对象public final native Class<?> getClass();Class类描述各个类的组成(构造方法,普通方法,普通属性)Class对象的三种实例化方式任何一个类的Class对象由原创 2019-01-23 15:56:16 · 206 阅读 · 0 评论 -
【javaSE】JDK1.8之枚举与可变参数
1.枚举(enum)enum关键字与class interface同级,代表是一个类的创建用枚举取代通过使用构造方法开辟新对象的方式枚举类中也可以拥有成员属性,通过构造方法尾成员赋初值,定义枚举类的实例对象时,其参数列表要与构造方法的参数列表对应,多个对象用逗号分隔,且要放在类括号中的行首一个源文件只能定义一个public类型的枚举类型所有的枚举类型都隐式继承java.lang.Enu...原创 2018-11-28 15:45:28 · 1076 阅读 · 0 评论 -
JavaSE————面向对象应用题
class Student{private String name="Mary";private String post="HR Director";private String sex="female";private int age=26;private String tel="18081318888&原创 2018-11-15 14:52:43 · 319 阅读 · 0 评论 -
Java中的方法定义与数组使用
方法定义方法是一个过程体一段被封装的,可重复调用的代码块。方法的声明:public static 方法返回类型 方法名称 ([参数类型1 变量1,参数类型2 变量2.....]){方法代码块;[return 返回值;]}除void类型外,其他类型的方法必须有返回值。当方法返回类型为void 时,可以有返回语句用来结束调用,也可以没有。有无返回值与有无形参无关。方法重载定义:...原创 2018-11-08 22:18:41 · 1525 阅读 · 0 评论 -
【JavaSE】内部类知识详解
1.继承(关键字extends)继承是两个类之间的关系。当类Son继承了一个已存在的类Father后,类Son就拥有了类Father所有的非private属性和方法,同时还可以在Son类中添加新的属性和方法。原来已存在的类称为父类或基类,也可以称为超类。新派生的类称为原来的子类或是派生类。子类继承父类语法:访问控制符 [修饰符] class 子类名 extends 父类名{[属性定义][...原创 2018-11-13 11:40:08 · 285 阅读 · 0 评论 -
JavaSE之面向对象(下)(java中关键字的使用)
1.static静态修饰符使用static修饰的成员变量、常量、方法和代码块统称为静态成员。静态成员归整个类所有,但不依赖于类的实例,只是别所有的实例所共享,只要这个类被JVM加载,就可以根据类名在全局数据区域中找到他们,因此,静态成员可以在任何实例对象创建之前访问。1.1static变量——静态变量static关键字修饰的成员变量称为静态变量,在没有创建实例对象之前就可以通过类名.变量名...原创 2018-11-11 16:57:25 · 631 阅读 · 0 评论 -
Java基础语言要素之标识符与注释
1.标识符标识符由字母、数字、下划线(_)和美元符号$组成,但标识符不能由数字开头,根据阿里命名规范,标识符最好不要由下划线和美元符号开头。标识符不能是Java关键字和保留字(const、goto)。标识符大小写敏感,abc和ABC不是同一个表示。标识符长度没有限制标识符不能含有空格2.好的命名习惯包名:所有字母一律小写,包的前缀可以为任何小写的ASCII字符,但必须是顶级域名(co...原创 2018-11-02 19:45:15 · 298 阅读 · 0 评论 -
JAVA的前世今生
Java起源于一个名为Green的项目,这个项目是为开发嵌入式家用电器的分布式系统,但由于C++过于复杂且安全性差,项目团队最后决定基于C++语言开发一种新的Oka语言(又称橡树语言,是Java的前身,于1991年出现)。时至今日,Java有三个主要发展方向:1.J2ME:主要用于在移动设备和嵌入式设备(手机、PDA、电视机顶盒和打印机)上运行的应用程序提供一个健壮且灵活的环境。2.J2SE...原创 2018-11-02 14:35:27 · 1437 阅读 · 0 评论 -
JavaSE之面向对象编程(上)
Java语言的三大特性:平台无关系、安全性、网络移动性。Java是面向对象的编程语言,Java的三大特性与面向对象的封装、继承、多态、抽象有着千丝万缕的关系。1.封装封装是一种信息隐蔽技术,就是把属性私有化,提供公共方法访问私有对象。封装还指把对象的属性和行为看成是一个密不可分的整体。封装的优点:隐藏类的实现细节在setter函数中加入控制逻辑,限制对属性的不合理操作便于修改,增强代码...原创 2018-11-09 11:37:19 · 250 阅读 · 0 评论 -
JAVA---数组与方法相互操作的应用
public class ArrayDemo{//普通方法,打印字符数组public static char[] printArray(char[] data){ for(int i=0;i<data.length;i++){ System.out.println(data[i]); } return data;}//方法返回数组public stat...原创 2018-11-09 08:50:16 · 135 阅读 · 0 评论 -
JAVA---面向对象之从生活中抽取实例对象
public class Car{ private String brand; private int num; private String colour; private int seats; //构造函数 public Car(String brand){ this.brand=brand; } //构造函数重载 public Car(String b...原创 2018-11-09 08:41:41 · 415 阅读 · 0 评论 -
JavaSE—————数组操作
public class ArryTest{//最大值public static int arrayMaxElement(int[] data){ //参数检查 if(data==null){ throw new IllegalArgumentException("数组不能为空"); } int max=Integer.MIN_VALUE; for(int i=0;i<d...原创 2018-11-14 10:15:34 · 122 阅读 · 0 评论 -
JavaSE————面向对象练习
public class Car{ private String brand; private int num; private String colour; private int seats; //构造函数 public Car(String brand){ this.brand=brand; } //构造函数重载 public Car(String b...原创 2018-11-14 10:19:38 · 278 阅读 · 0 评论 -
JavaSE————String类功能扩展
//String类扩展功能实现public class Strings{public static void main(String[] args){ // System.out.println(repeat('a',0)); // System.out.println(repeat('a',-4)); // System.out.println(repeat('a',...原创 2018-11-21 20:16:22 · 206 阅读 · 0 评论 -
JavaSE单链表、双链表的Java语言实现
用于保存数据的结构可以是对象数组,但是数组一旦定义,长度不能改变,因此引入链表,就像火车组成一样,有数据部分,有连接点,若需添加数据,在连接点再挂载一节车厢即可。链表:插入删除时间复杂度O(1),随机访问O时间复杂度(n)数组:插入删除时间复杂度O(n),随机访问O时间复杂度(1)单向链表:(只含有一个连接节点)Node类:保存节点内容,客户使用需要手动挂载节点public class ...原创 2018-11-28 14:27:35 · 117 阅读 · 0 评论 -
【javaSE】单例设计模式的五种实现方式
单例设计模式的特点:1.一个类只允许实例化一个实例对象2.在其他类中不允许通过构造方法实例化对象单例模式如何完成:1.将构造方法私有化(外部类不能访问,进而不能使用构造方法实例化对象)2.通过静态的public方法,返回值为此类的对象来获取实例化对象单例设计模式的五种实现方式:1.饿汉式(静态方法)优点:简单易理解,类加载时就实例化了对象缺点:若一直为使用此对象,浪费了内存空间,...原创 2018-11-26 18:31:48 · 150 阅读 · 0 评论 -
javaSE之包的相关知识
需要用到其他包内的类的时候,需要导入包,并且倒包的语句需定义在行首1.使用指定类导入方式import 包名.类名2.使用*(只有在代码中真正使用到的时候才会加载)import 包名.*类使用class和public class的区别:public class 定义的类名必须与Java文件名一致,且其他包可访问class无文件名要求,此类不能被其他包访问3.静态导入(需访问其他包中...原创 2018-11-26 16:20:11 · 108 阅读 · 0 评论 -
JavaSE之三个特殊的类
1.java.lang.String类String类是一个引用数据类型,是被final修饰的类,不能被继承String也有构造方法。1.String类的两种赋值方式1.1直接赋值:直接赋值的数据在堆上开辟空间java为String类提供了缓冲池机制的功能,当直接给字符串赋值时,JVM会先到缓冲池寻找是否存在内容相同的字符串,若有就直接使用,不另辟空间,若没有,就在缓冲池内创建一个新的空...原创 2018-11-26 15:27:21 · 97 阅读 · 0 评论 -
JavaSE之异常与捕获
异常的继承机制所有的异常类都是Throwable的子类Error描述的是Java运行系统内部错误及资源耗尽情况下的错误只要不是程序员捕获的异常,最终都会被默认异常处理程序处理,默认处理程序会打印异常的类型和异常发生时所处的堆栈,并且立即终止程序。常见异常异常处理语法try{ 有可能出现异常的语句 ; }[catch (异常类 对象) { } ... ][finall...原创 2018-11-28 21:33:29 · 138 阅读 · 0 评论