JavaSE
文章平均质量分 67
QLH0101
坚持就是胜利
展开
-
整形数据大的类型转小类型,小类型转大类型
**整形:**Java中,任何一个整型常量都是int类型Java中声明long常量,需要在数字后添加L(l)范围小的数据类型可以自动提升为范围大的数据类型(进行数学运算时)范围大的数据类型只有强转才能转为范围小的数据类型(可能存在精度丢失问题)所有数据类型默认值需要结合类来观察,方法中的局部变量不存在默认值(局部变量必须先赋值后使用)原创 2018-11-29 17:01:54 · 1186 阅读 · 0 评论 -
自己设计一个打印流(装饰模式)
打印流1.打印流的设计意图2.设计一个简单的打印流3.使用系统提供的打印流4.装饰设计模式1.打印流的设计意图打印流设计的主要目的是为了解决OutputStream的设计缺陷,属于OutputStream的加强版本,如果操作不是二进制数据,只是想通过程序向终端目标输出信息,则使用打印流更加方便。OutputStream存在以下缺陷:1.1所有数据必须转换转换为字节数组1.2如果需要输出in...原创 2019-05-19 11:04:57 · 249 阅读 · 0 评论 -
序列化与反序列化详解
对象序列化指的是,将内存中保存的对象变为二进制数据流的形式进行传输,或者将其保存在文本中(反序列化与序列化相反,实现对象持久化,即外部序列化)。但是并不是所有类的对象都可以被序列化,严格来说,需要被序列化的类的对象往往需要传输使用,同时这个类必须实现java.io.Serializable 接口 (Externalizable需要手动保存,很少用)),才具备对象序列化的功能。这个接口并莫有任何方法,它只是个标识而已。序列化对象时所需要保存的就是对象中的属性,所以默认情况下对象的属性将被转化为二进制数据流存原创 2019-05-19 15:02:36 · 419 阅读 · 0 评论 -
覆写equals方法
@Override public boolean equals(Object obj){ if (obj==this){ return true; }else if(obj==null){ return false; }else if(!(obj instanceof People)){ ...原创 2019-05-19 15:05:41 · 224 阅读 · 0 评论 -
final,static关键字总结
final关键字主要用在三个地方:变量,方法,类。1.对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。2.当用final修饰一个类时,表明这个类不能被继承。final类中的所有成员方法都会被隐式地指定为final方法。3.使用final方法的原因有两个。第一个原因是把方法锁定,以防任何继...原创 2019-06-25 17:06:00 · 246 阅读 · 0 评论 -
Java中的异常处理
Java异常类层次结构图,在 Java 中,所有的异常都有一个共同的祖先java.lang包中的 **Throwable类**。Throwable: 有两个重要的子类:**Exception**(异常) 和 **Error**(错误) ,二者都是 Java 异常处理的重要子类,各自都包含大量子类。原创 2019-06-25 18:46:05 · 131 阅读 · 0 评论 -
Java中IO流的分类和BIO,NIO,AIO的区别
.到底什么是IO,我们常说的IO,指的是文件的输入和输出,但是在操作系统层面是如何定义IO的呢?到底什么样的过程可以叫做是一次IO呢?拿一次磁盘文件读取为例,我们要读取的文件是存储在磁盘上的,我们的目的是把它读取到内存中。可以把这个步骤简化成把数据从硬件(硬盘)中读取到用户空间中。原创 2019-06-25 19:57:07 · 2687 阅读 · 3 评论 -
Java多线程的基本状态
Java 线程在运行的生命周期中的指定时刻只可能处于下面6种不同状态的其中一个状态(图源《Java 并发编程艺术》4.1.4节)线程在生命周期中并不是固定处于某一个状态而是随着代码的执行在不同状态之间切换。Java 线程状态变迁如下图所示(图源《Java 并发编程艺术》4.1.4节):由上图可以看出:线程创建之后它将处于 NEW(新建) 状态,调用 start() 方法后开始运行,线程这...原创 2019-06-24 16:57:29 · 374 阅读 · 0 评论 -
java中的Iterator和Iterable 区别
Iterator和Iterable 区别java.lang.Iterable ,java.util.IteratorIterator是迭代器(抽象的),但是也是一个接口,Iterable是接口, 使用迭代器可以使访问变得方便简单。 好多类都实现了Iterable接口,这样对象就可以调用iterator()方法。 Iterator是一个专门设计迭代器的,Iterable是创建新的迭代器的。...原创 2019-07-10 00:28:41 · 1187 阅读 · 0 评论 -
秒懂,Java注解
本文装载于文章开头先引入一处图片。这处图片引自老罗的博客。为了避免不必要的麻烦,首先声明我个人比较尊敬老罗的。至于为什么放这张图,自然是为本篇博文服务,接下来我自会说明。好了,可以开始今天的博文了。Annotation 中文译过来就是注解、标释的意思,在 Java 中注解是一个很重要的知识点,但经常还是有点让新手不容易理解。我个人认为,比较糟糕的技术文档主要特征之一就是:用专业名词来...转载 2019-07-31 10:12:04 · 179 阅读 · 0 评论 -
JVM详解
JDK:Java开发工具JRE:Java运行环境JVM:Java虚拟机,对应平台虚拟机(字节码,语言跨平台)JMM:内存模型(逻辑概要,描述共享程序的结构)内存区域划分:JVM中空间划分的具体区域 虚拟机:VMWare/Virtual Box,通过软件模拟的具有完整硬件功能,运行在完全隔离环境中的计算机系统。JVM是通过软件模拟java的字节码集,JVM只保留了PC寄存器,而普遍的虚拟机有很多的寄存器。从JDK1.3至今HotSpot为默认JVM.原创 2019-07-31 21:05:42 · 446 阅读 · 0 评论 -
JDK 和 JRE 有什么区别?
JDK与JRE的区别JRE:Java Runtime Environment(java运行时环境)。即java程序的运行时环境,包含了java虚拟机,java基础类库。JDK:Java Development Kit(java开发工具包)。即java语言编写的程序所需的开发工具包。JDK包含了JRE,同时还包括java源码的编译器javac、监控工具jconsole、分析工具jvisualv...原创 2019-07-31 21:38:01 · 2828 阅读 · 0 评论 -
死锁产生的原因与解决方法详解
参考文章:死锁产生的原因及解决办法一、死锁的定义多线程以及多进程改善了系统资源的利用率并提高了系统 的处理能力。然而,并发执行也带来了新的问题——死锁。所谓死锁是指多个线程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。二、死锁产生的原因1.系统资源的竞争通常系统中拥有的不可剥夺资源,其数量不足以满足多个进程运行的需要,使得进程在 运行过程中,会因争夺资源...原创 2019-07-31 23:09:02 · 766 阅读 · 0 评论 -
HotSpot 虚拟机对象探秘
1.1 对象的创建下图便是 Java 对象的创建过程,我建议最好是能默写出来,并且要掌握每一步在做什么。①类加载检查虚拟机遇到一条 new 指令时,首先将去检查这个指令的参数是否能在常量池中定位到这个类的符号引用,并且检查这个符号引用代表的类是否已被加载过、解析和初始化过。如果没有,那必须先执行相应的类加载过程。②分配内存在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需的...原创 2019-08-10 22:53:22 · 162 阅读 · 0 评论 -
Java实现的聊天室
单线程聊天室:聊天室是客户端与服务器组成,下图可以清楚理解的它们之间的关系:一.服务器1.创建服务器(建立ServerSocket)2.等待客户端连接3.接收数据与发送数据3.1服务器接受客户端发送的信息3.2从服务器发送信息到客户端注意:服务端先接受信息时,客户端必须是先发送信息,更不能同时发送与接收,因为是单线程二.客户端1.创建客户端2.连接服务器端3.发送数据与...原创 2019-05-10 15:25:23 · 2452 阅读 · 4 评论 -
Java中的深浅拷贝
什么是深拷贝和浅拷贝浅拷贝和深拷贝都是对一个已有对象的操作,编译系统会自动调用一种构造函数——拷贝构造函数,如果用户未定义拷贝构造函数,则会调用默认拷贝构造函。在java中,一般使用=好做赋值操作的时候,对于基本数据类型,实际上是拷贝他的值,但是对于对象而言,其实赋值的指示这个对象的引用,将原对象的引用传递过去,他们实际上还是指向的用一个对象。而浅拷贝和深拷贝就是在这个基础之上做的区分,如果...原创 2019-05-05 16:51:41 · 1606 阅读 · 0 评论 -
深入理解java中的ArrayList和LinkedList
ArrayList和LinkedList的区别ArrayList和LinkedList是顺序存储结构和链式存储结构的表在java语言中的实现.ArrayList提供了一种可增长数组的实现,使用ArrayList,因为内部使用数组实现,所以,它的优点是,对于get和set操作调用花费常数时间.缺点是插入元素和删除元素会付出昂贵的代价.因为这个操作会导致后面的元素都要发生变动,除非操作发生在集合的...原创 2019-04-19 18:08:40 · 496 阅读 · 0 评论 -
Java三大特性简单说明与应用
面向对象程序设计的 3 个主要特征:封装性、继承性、多态性。**封装性(encapsulation):** 封装是一种信息隐蔽技术,它体现于类的说明,是对象的重要特性。封装使数据和加工该数据的方法(函数)封装为一个整体,以实现独立性很强的模块,使得用户只能见到对象的外特性(对象能接受哪些消息,具有哪些处理能力),而对象的内特性(保存内部状态的私有数据和实现加工能力的算法)对用户是隐蔽的。封装的目的在于把对象的设计者和对象的使用者分开,使用者不必知晓其行为实现的细节,只须用设计者提供的消息来访问该对象。原创 2018-12-28 19:21:45 · 630 阅读 · 1 评论 -
java中this关键字详解
this关键字this调用本类属性当参数与类中属性同名,类中属性无法被正确赋值,此时应使用this关键字便可以正确给对象属性赋值。package www.qi.java;class Person{ private String name; private int age; public Person(String name,int age) { th...原创 2019-02-15 23:55:20 · 1667 阅读 · 2 评论 -
java 中super关键字,以及super与this的区别详解
super关键字原创 2019-02-17 23:11:38 · 342 阅读 · 0 评论 -
给定一个英文字符串, 写一段代码找出字符串中首先出现三次的英文字母。 输入描述:输入数据一个 字符串, 包括字母,数字 输出描述: 输出首先出现三次的那个英文字符
示例: 输入:Have you ever gone shopping 输出: epublic class Test1 { public static void main(String[] args){ String str="Have you ever gone shopping"; System.out.println(getLetter(str)...原创 2019-02-27 20:13:47 · 1809 阅读 · 0 评论 -
编写一个算法来判断一个数是不是“快乐数”。 一个“快乐数”定义为:对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和, 然后重复这个过程直 到这个数变为 1,也可能是无限循环但始终变不到 1
示例:输入: 19 输出: true 解释:11+99= 8288+ 22 = 6866 + 88 = 10011+00+0*0=1public class Test1{ public static void main(String[] args) { System.out.println(isHappy(18)); System.out...原创 2019-02-27 20:23:18 · 4168 阅读 · 0 评论 -
java中方法重载,重写(覆写)的区别
方法重载 (overload)重载(overloading) 是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同。每个重载的方法(或者构造函数)都必须有一个独一无二的参数类型列表。最常用的地方就是构造器的重载。重载规则:被重载的方法必须改变参数列表(参数个数或类型不一样);被重载的方法可以改变返回类型;被重载的方法可以改变访问修饰符;被重载的方法可以声明新的或更广...原创 2019-02-18 23:43:14 · 502 阅读 · 0 评论 -
接口与抽象类应用
编程题一:利用接口做参数,写个计算器,能完成加减乘除运算。(1)定义一个接口Compute含有一个方法int computer(int n, int m)。(2)设计四个类分别实现此接口,完成加减乘除运算。(3)设计一个类UseCompute,类中含有方法:public void useCom(Compute com, int one, int two),此方法能够用传递过来的对象调用co...原创 2019-02-26 15:15:37 · 254 阅读 · 0 评论 -
反射的与类操作
1.取得父类信息2.反射调用构造3.反射调用普通方法4.反射调用类中属性原创 2019-03-29 22:22:45 · 158 阅读 · 0 评论 -
通过反射创建类的对象
class类是描述整个类的概念,也是整个反射的操作源头,在使用class类的时侯需要关注的依然是这个类的对象。而这个类的对象产生模式一共有三种:1.任何类的实例化对象可以通过Object类中的getClass()方法取得class类对象2.“类.class”,直接根据某个具体的类来取得class类的实例化对象3.使用class类提供的方法:public static Class<?&g...原创 2019-03-26 23:08:01 · 993 阅读 · 0 评论 -
Java多线程的概念及实现
多线程进程的基本概念: 操作系统中一个程序的执行周期称为一个进程。线程的基本概念: 一个程序同时执行多个任务,通常一个任务就是一个线程(一个进程中包含多个线程)。进程与线程的区别:1.每个进程拥有自己的一整套变量,是操作系统中资源分配的最小单位,线程依托进程存在,多个线程共享数据,共享变量使得线程之间通信比进程之间通信更有效,更方便。2.创建,撤销一个线程比启动一个新进程开销要小的多(线...原创 2019-04-13 23:35:46 · 262 阅读 · 0 评论 -
Java中的生产者与消费者模型
生产者消费者模式是通过一个容器来解决生产者和消费者的强耦合问题。生产者和消费者彼此之间不直接通讯,而通 过阻塞队列来进行通讯,所以生产者生产完数据之后不用等待消费者处理,直接扔给阻塞队列,消费者不找生产者要 数据,而是直接从阻塞队列里取,阻塞队列就相当于一个缓冲区,平衡了生产者和消费者的处理能力。这个阻塞队列就是用来给生产者和消费者解耦的。纵观大多数设计模式,都会找一个第三者出来进行解耦,如工厂模...原创 2019-04-22 22:53:15 · 305 阅读 · 0 评论 -
多线程的常用操作方法
一.线程的命名与取得多线程的运行状态是不确定的,所以对于多线程操作必须有一个明确标识出线程对象的信息,这个信息往往通过名称来描述,在Thread类中提供有如下的线程名称方法:1.创建线程的时候设置名称(构造):public Thread(Runnable target, String name)2.设置线程名称(普通)public final synchronized void setNa...原创 2019-04-19 16:38:24 · 265 阅读 · 0 评论 -
Java中main方法
为什么java中main方法做了限制1.public2.void3.static4.String [] args原创 2019-04-28 23:07:03 · 1101 阅读 · 0 评论 -
Java中synchronized关键字的用法
1.同步问题在多线程下每一个线程对象轮番抢占资源,这个造成了很大的问题。比如当多个线程买票出现了负数,这种问题被称为不同步操作,不同步的好处是多个线程并发执行,这样处理速度快,synchronized是Java中的关键字,它主要解决的是线程同步问题。同步处理:所有线程不是同时获取资源,而是按顺序一个一个来。那这就需要一把锁,锁住对应的资源,但是不同锁锁的是不同的资源。内建锁:(synchron...原创 2019-08-11 22:30:03 · 359 阅读 · 0 评论