
JavaSE
文章平均质量分 82
好的好的,你是对的
越不可越之山,则登其巅;度不可度之河,则达彼岸。
展开
-
enum 1.0 java 枚举类
文章目录枚举类1. 使用静态常量表示枚举2. 通过定义类的方式表达枚举3. 枚举类4. 枚举类实现接口每个枚举实例实现自己的方法5. 包含抽象方法的枚举类枚举类在某些情况下,一个类的对象是有限而且固定的,比如季节类,他只有四个对象。这种实例有限而且固定的类,在java 中被称为枚举类。1. 使用静态常量表示枚举public static final int SEASON_SPRING = 1;public static final int SEASON_SUMMER = 2;public st原创 2021-08-19 15:57:03 · 323 阅读 · 0 评论 -
java 数据类型转化
不能对boolean类型进行类型转换。不能把对象类型转换成不相关类的对象。在把容量大的类型转换为容量小的类型时必须使用强制类型转换。转换过程中可能导致溢出或损失精度,例如:int i =128; byte b = (byte)i;因为 byte 类型是 8 位,最大值为127,所以当 int 强制转换为 byte 类型时,值 128 时候就会导致溢出。浮点数到整数的转换是通过舍弃小数得到,而不是四舍五入,例如:(int)23.7 == 23; (..原创 2021-07-15 14:11:33 · 125 阅读 · 0 评论 -
fx 泛型
小插曲java 有个口诀:左编译,右运行。(编译时看左边,运行时看右边)List<String> list = new ArrayList<>();编译时是List ,运行时是 ArrayList背景Java 集合有个缺点,他把一个对象丢到集合中后,就忘记了这个对象的数据类型。当再次取出该对象时,该对象的编译类型就变成了 Object 类型(运行时类型没变)因为集合的设计者也不知道应该我们会用集合来保存什么类型,所以干脆就设计成 Object 类型。带来的问题:原创 2021-07-14 23:49:25 · 98 阅读 · 0 评论 -
stream 流
Stream 支持 顺序和并行 聚合操作的元素序列。以下示例说明了使用Stream和IntStream的聚合操作: int sum = widgets.stream() .filter(w -> w.getColor() == RED) .mapToInt(w -> w.getWeight()) .sum();在这个例子中, widgets是一个Collection 。 我们通过C原创 2021-07-14 21:30:40 · 159 阅读 · 0 评论 -
bl 遍历集合方式集锦
使用 foreach() Lambdajava 8 为 Iterable 接口新增了一个 foreach (Consumer action) 默认方法,该方法所需参数类型是一个函数式接口,而 Iterable 接口是 Collection 接口的父接口,因此 Collection 集合也可以直接调用该方法。public static void main(String[] args) { ArrayList<String> list = new ArrayList<>原创 2021-07-14 20:42:45 · 198 阅读 · 1 评论 -
I18N java实现 国际化和格式化
背景国际化是指应用程序运行时,可根据客户端请求来自的国家语言的不同而现实不同的界面。国际化的英文单词是:internationalization,所以简称 I18N,18表示中间省略了18个字母。思路将程序中的标签、提示等信息放在资源文件中,程序需要支持哪些国家、语言环境,就提供对一个的资源文件。资源文件就是 key-value 对,每个资源文件中的 key 是不变的,但是value 随着不同的国家语言而改变。如下图所示:提供了中文、英语、法语三种语言business.ok=成功busine原创 2021-07-13 21:36:50 · 1378 阅读 · 2 评论 -
sz 小小数组
问题提出在 Java 中,声明一个数组的过程中,是如何分配内存的?java 数组的初始化一共有哪几种?基本类型数组和引用类型数组中间,在初始化时内存分配机制有什么区别吗?数组的初始化静态初始化:由程序员显示指定每个数组元素的初始值,有系统决定数组的长度。String[] str = {"两只老虎", "蜗牛与黄鹂鸟"};String[] str2 = new String[]{"两只老虎","蜗牛与黄鹂鸟"};动态初始化:有程序员指定数组长度,系统为数组元素分配初始值。Str原创 2021-07-12 21:40:25 · 186 阅读 · 1 评论 -
dxc 5.0 多线程同步
线程同步之前的 线程创建与启动中就有提到 资源共享的问题。当 继承 Thread 类并且使用 类变量的时候,类变量是所有线程对象共享的。当 实现 Runnable 接口,然后作为 Thread 成员变量的时候也是可以实现共享的,只要使用同一个 Runnable 接口的子类实例即可生活中有很多地方是需要用到共享资源的,比如卖票,比如银行取钱。同样之前的 线程的生命周期 也提到线程也是抢占式运行的,谁抢到资源控制权谁运行。但是这样一种情况也是需要考虑的,一个线程执行共享资源到一半,还没有执行完而原创 2021-07-10 00:20:54 · 126 阅读 · 3 评论 -
dxc 4.0 控制线程
控制线程java 的线程支持提供了一些便捷的 工具方法,通过这些便捷的工具方法可以很好的控制线程的执行。joinThread提供了让一个线程等待另一个线程完成的方法——join()方法。当在某个程序执行流中调用其他线程的join()方法时,调用线程将被阻塞,直到被join()方法加入的join线程执行完为止。join()方法通常由使用线程的程序调用,以将大问题划分成许多小问题,每个小问题分配一个线程。当所有的小问题都得到处理后,再调用主线程来进一步操作。package com.rrz;publ原创 2021-07-09 11:28:01 · 161 阅读 · 2 评论 -
dxc 3.0 线程的生命周期
生命周期又回到了生命周期,在漫长的内存时间线中存在的那短暂的一刹那进程有生命周期,线程有生命周期,Servlet 有生命周期,这些都是需要显示定义的。至于变量那些的生命周期都是随着方法栈的开始结束来决定、类的创建和JVM 结束,都是被动的。线程生命周期当线程被创建并启动以后,他既不是一启动就进入执行状态,也不是一直处于执行状态,在线程的生命周期中,他要经过新建(New)、就绪(Ready)、运行(Running)、阻塞(Blocked)和死亡(Dead)5种状态。尤其是当线程启动以后,它不可能一直“原创 2021-07-09 10:46:29 · 129 阅读 · 2 评论 -
Lambda 表达式
Lambda 表达式支持将代码作为方法参数,Lambda 表达式允许使用更加简洁的代码来创建只有一个抽象方法的接口的实例。(这种接口被称为函数式接口)函数式接口为Lambda 而生那为何会有 Lambda 表达式呢,那就不得不提匿名内部类,可以转到内部类模块查看。...原创 2021-07-08 23:24:56 · 186 阅读 · 0 评论 -
内部类系列
大部分时候,类被定义成一个独立的程序单元。在某些情况下,也会吧一个类放在另一个类的内部定义,这个定义在其他类内部的类被称为“内部类”,包含内部类的类也被称为 外部类。内部类的作用:内部类提供了更好的封装,可以把内部类隐藏在外部类之内,不允许同一个包中的其他类访问该类。假设需要创建 Cow 类,Cow 类需要组合一个 CowLeg 对象, CowLeg 类只有在 Cow 类中才有效,离开了 Cow 类之后没有任何意义。在这种情况下 ,就可以把 CowLeg 定义成 Cow 的内部类,不允许其他类访问 Co原创 2021-07-08 22:12:02 · 143 阅读 · 0 评论 -
浅谈类、抽象类、接口
代码本质代码不是凭空产生的,代码是对现实世界的模拟,而面向对象的 java 更是对现实世界对象的模拟。万物皆对象。思考如果我们是上帝,我们如何创造这个世界呢!像女娲一样,一个一个的捏吗?可以这样,但是世界很大,捏起来太慢了,毕竟我不想一甩藤条造几个那么随便,甩出来大小不一样。如果有个模子,放进去材料就出来一个,那就很快了,而且还能保证大家都差不多。这个模子就是 class在造模子前我先想了想,世界上的东西都一样,那也太无聊了,所以得多造几个模子出来。说做就做,第二天就开始学着自己的模样造原创 2021-07-08 13:43:39 · 102 阅读 · 0 评论 -
dxc 2.0 线程的创建和启动
Thread 类代表线程,所有的线程对象都必须是 Thread 类或其子类的实例。每个线程的作用是完成一定的任务:实际上就是执行一段程序流(一段顺序执行的代码),使用线程执行体来代表这段程序流。继承 Thread 创建线程类Thread 使用类变量package com.rrz;public class MyThread extends Thread { private static int count; public void run() { for (原创 2021-07-07 22:19:10 · 132 阅读 · 1 评论 -
dxc 1.0 多线程详解
进程几乎所有的操作系统都支持进程的概念,所有运行中的任务通常对应一个进程(Process)。当一个程序进入内存运行时,即变成一个进程。进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位。一般而言,进程包含如下三个特征。独立性:进程是系统中独立存在的实体,它可以拥有自己独立的资源,每一个进程都拥有自己私有的地址空间。在没有经过进程本身允许的情况下,一个用户进程不可以直接访问其他进程的地址空间。动态性:进程与程序的区别在于,程序只是一个静态的指令集合,而进程原创 2021-07-07 13:27:35 · 167 阅读 · 0 评论 -
io 16.0 序列化版本
序列化版本根据前面的介绍可以知道,反序列化Java对象时必须提供该对象的class文件,现在的问题是,随着项目的升级,系统的class文件也会升级,Java如何保证两个class文件的兼容性?Java序列化机制允许为序列化类提供一个private static final的serialVersionUID值,该类变量的值用于标识该Java类的序列化版本,也就是说,如果一个类升级后,只要它的serialVersionUID类变量值保持不变,序列化机制也会把它们当成同一个序列化版本。分配serialVer原创 2021-07-06 08:49:48 · 107 阅读 · 0 评论 -
io 15.0 对象引用的序列化
前面介绍的Person类的两个成员变量分别是String类型和int类型,如果某个类的成员变量的类型不是基本类型或String类型,而是另一个引用类型,那么这个引用类必须是可序列化的,否则拥有该类型成员变量的类也是不可序列化的。注:String 类型也是引用类型如下Teacher类持有一个Person类的引用,只有Person类是可序列化的,Teacher类才是可序列化的。如果Person类不可序列化,则无论Teacher类是否实现Serilizable、Externalizable接口,则Tea原创 2021-07-05 09:49:21 · 289 阅读 · 0 评论 -
io 14.0 使用对象流实现序列化
使用对象流实现序列化如果需要将某个对象保存到磁盘上或者通过网络传输,那么这个类应该实现Serializable接口或者Externalizable接口之一。使用Serializable来实现序列化非常简单,主要让目标类实现Serializable标记接口即可,无须实现任何方法。一旦某个类实现了Serializable接口,该类的对象就是可序列化的,程序可以通过如下两个步骤来序列化该对象。创建一个ObjectOutputStream,这个输出流是一个处理流,所以必须建立在其他节点流的基础之上。代码如原创 2021-07-02 17:29:57 · 220 阅读 · 1 评论 -
io 13.0 序列化的含义和意义
序列化的含义和意义序列化机制允许将实现序列化的Java对象转换成字节序列,这些字节序列可以保存在磁盘上,或通过网络传输,以备以后重新恢复成原来的对象。序列化机制使得对象可以脱离程序的运行而独立存在。对象的序列化(Serialize)指将一个Java对象写入IO流中,与此对应的是,对象的反序列化(Deserialize)则指从IO流中恢复该Java对象。Java 9增强了对象序列化机制,它允许对读入的序列化数据进行过滤,这种过滤可在反序列化之前对数据执行校验,从而提高安全性和健壮性。如果需要让某个对象原创 2021-07-02 17:21:07 · 191 阅读 · 0 评论 -
io 12.0 对象序列化
对象序列化对象序列化的目标是将对象保存到磁盘中,或允许在网络中直接传输对象。对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久地保存在磁盘上,通过网络将这种二进制流传输到另一个网络节点。其他程序一旦获得了这种二进制流(无论是从磁盘中获取的,还是通过网络获取的),都可以将这种二进制流恢复成原来的Java对象。...原创 2021-07-02 17:19:50 · 92 阅读 · 0 评论 -
io 11.0 RandomAccessFile
RandomAccessFile是Java输入/输出流体系中功能最丰富的文件内容访问类,它提供了众多的方法来访问文件内容,它既可以读取文件内容,也可以向文件输出数据。与普通的输入/输出流不同的是,RandomAccessFile支持“任意访问”的方式,程序可以直接跳转到文件的任意地方来读写数据。由于RandomAccessFile可以自由访问文件的任意位置,所以如果只需要访问文件部分内容,而不是把文件从头读到尾,使用RandomAccessFile将是更好的选择。与OutputStream、Write原创 2021-07-02 17:18:26 · 137 阅读 · 0 评论 -
io 10.0 重定向标准输入和标准输出
Java的标准输入/输出分别通过System.in和System.out来代表,在默认情况下它们分别代表键盘和显示器,当程序通过System.in来获取输入时,实际上是从键盘读取输入;当程序试图通过System.out执行输出时,程序总是输出到屏幕。在System类里提供了如下三个重定向标准输入/输出的方法。➢ static void setErr(PrintStream err):重定向 “标准”错误输出流。➢ static void setIn(InputStream in):重定向“标准”输入流原创 2021-07-02 17:10:02 · 211 阅读 · 0 评论 -
io 9.0 推回输入流
在输入/输出流体系中,有两个特殊的流与众不同,就是PushbackInputStream和PushbackReader,它们都提供了如下三个方法。➢ void unread(byte[]/char[] buf):将一个字节/字符数组内容推回到推回缓冲区里,从而允许重复读取刚刚读取的内容。➢ void unread(byte[]/char[] b, int off, int len):将一个字节/字符数组里从off开始,长度为len字节/字符的内容推回到推回缓冲区里,从而允许重复读取刚刚读取的内容。➢原创 2021-07-02 16:57:48 · 176 阅读 · 0 评论 -
io 8.0 转换流 字节转字符
转换流输入、输出流体系中还提供了两个转换流,这两个转换流用于实现将字节流转换成字符流,其中 InputStreamReader 将字节输入流转换为字符输入流, OutputStreamWriter 将字节输出流转换成字符输出流。提问:怎么没有把字符流转换成字节流的转换流? 想一想字符流和字节流的差别:字节流比字符流使用的范围更广,但字符流比字节流操作方便。如果有一个流已经是字符流,也就是说,是一个用起来更方便的流,为什么要转换为字节流呢?反之,如果现在又一个字节流,但可以确定这个字节流的内容都是文本原创 2021-07-02 16:45:18 · 151 阅读 · 1 评论 -
io 7.0 处理流的用法
处理流的用法处理流的功能,它可以隐藏底层设备上节点流的差异,并对外提供更加方便的输入/输出方法,让程序员只需关心高级流的操作。使用处理流时的典型思路是,使用处理流来包装节点流,程序通过处理流来执行输入/输出功能,让节点流与底层的I/O设备、文件交互。实际识别处理流非常简单,只要流的构造器参数不是一个物理节点,而是已经存在的流,那么这种流就一定是处理流;而所有节点流都是直接以物理IO节点作为构造器参数的。提示: 关于使用处理流的优势,归纳起来就是两点:①对开发人员来说,使用处理流进行输入/输出操作原创 2021-07-02 16:37:10 · 234 阅读 · 0 评论 -
io 6.0 OutputStream 和 Writer
OutputStream和Writer也非常相似,它们采用如图15.6所示的模型来执行输出,两个流都提供了如下三个方法。➢ void write(int c):将指定的字节/字符输出到输出流中,其中c既可以代表字节,也可以代表字符。➢ void write(byte[]/char[] buf):将字节数组/字符数组中的数据输出到指定输出流中。➢ void write(byte[]/char[] buf, int off, int len):将字节数组/字符数组中从off位置开始,长度为len的字节/字原创 2021-07-02 16:25:22 · 362 阅读 · 0 评论 -
io 5.0 InputStream 和 Reader
InputStream和Reader是所有输入流的抽象基类,本身并不能创建实例来执行输入,但它们将成为所有输入流的模板,所以它们的方法是所有输入流都可使用的方法。在InputStream里包含如下三个方法。➢ int read():从输入流中读取单个字节(相当于从水管中取出一滴水),返回所读取的字节数据(字节数据可直接转换为int类型)。➢ int read(byte[] b):从输入流中最多读取b.length个字节的数据,并将其存储在字节数组b中,返回实际读取的字节数。➢ int read(by原创 2021-07-02 16:05:07 · 619 阅读 · 1 评论 -
io 4.0 流的概念模型
Java把所有设备里的有序数据抽象成流模型,简化了输入/输出处理,理解了流的概念模型也就了解了Java IO。Java的IO流共涉及40多个类,这些类看上去芜杂而凌乱,但实际上非常规则,而且彼此之间存在非常紧密的联系。Java的IO流的40多个类都是从如下4个抽象基类派生的。➢ InputStream/Reader:所有输入流的基类,前者是字节输入流,后者是字符输入流。➢ OutputStream/Writer:所有输出流的基类,前者是字节输出流,后者是字符输出流。对于InputStream和Rea原创 2021-07-02 15:36:59 · 155 阅读 · 0 评论 -
io 3.0 java 流的分类
按照不同的分类方式,可以将流分为不同的类型,下面从不同的角度来对流进行分类,它们在概念上可能存在重叠的地方。1.输入流和输出流按照流的流向来分,可以分为输入流和输出流。➢ 输入流:只能从中读取数据,而不能向其写入数据。➢ 输出流:只能向其写入数据,而不能从中读取数据。此处的输入、输出涉及一个方向问题,对于如图所示的数据流向,数据从内存到硬盘,通常称为输出流——也就是说,这里的输入、输出都是从程序运行所在内存的角度来划分的。提示:如果从硬盘的角度来考虑,如图所示的数据流应该是输入流才对;但划分输原创 2021-07-02 15:25:36 · 353 阅读 · 0 评论 -
io 2.0 IO流介绍
Java的IO流是实现输入/输出的基础,它可以方便地实现数据的输入/输出操作,在Java中把不同的输入/输出源(键盘、文件、网络连接等)抽象表述为“流”(stream),通过流的方式允许Java程序使用相同的方式来访问不同的输入/输出源。stream是从起源(source)到接收(sink)的有序数据。Java把所有传统的流类型(类或抽象类)都放在java.io包中,用以实现输入/输出功能。提示: 因为Java提供了这种IO流的抽象,所以开发者可以使用一致的IO代码去读写不同的IO流节点。..原创 2021-07-02 15:19:27 · 140 阅读 · 0 评论 -
io 1.0 File 类
File 类File 类是 java.io 包下代表与平台无关的文件和目录,也就是说,如果希望在程序中操作文件和目录,都可以通过 File 类来完成。值的指出的是,不管是文件还是目录都是使用 File 来操作的, File 能新建,删除、重命名文件和目录, File 不能访问文件内容本身。 如果需要访问文件内容本身,则需要使用输入、输出流。需要知道,文件和目录与文件内容本身是两个对象。就比如在 linux 系统中,a 目录中 有b、c、d三个文件,在 a 目录中实际存在的不是b、c、d 的内容,而原创 2021-07-02 14:55:11 · 147 阅读 · 0 评论