
JAVA-语法基础
文章平均质量分 87
李思苇
不忘初心,方得始终。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Stream: Core Java 2 第一章
jdk8的Stream API,提供的是数据视图,这种数据视图可以让我们在在比集合更高的概念级别上指定计算。我们可以指定要完成什么任务,而不用给出具体实现。例如:假如我们想计算某个属性的平均值,我们可以指定数据源和该属性,但我们不用写代码来对一系列属性的值做加总、再求均值、也不用写Runnable开启多个线程来提高效率,以上这些计算代码都由流库去实现并优化。也就是说流库让开发者以“做什么而非怎么做”的方式处理集合。比如上例中,做什么:求平均值,怎么做:如何实现求平均值原创 2022-05-21 22:52:48 · 519 阅读 · 1 评论 -
55分钟学会正则表达式
原文:Learn regular expressions in about 55 minutes @ Things Of Interest伯乐在线补充:推荐几个正则表达式编辑器Debuggex :Debuggex: Online visual regex tester. JavaScript, Python, and PCRE. PyRegex:PyRegex Regexper:Regexper正则表达式是一种查找以及字符串替换操作。正则表达式在文本编辑器中广泛使用,比如正则表达式被用于:转载 2022-05-18 11:38:02 · 248 阅读 · 0 评论 -
一文搞懂jdk8时区、日期、时间:Instant、LocalDateTime、ZonedDateTime,以及与旧版本代码的互操作
Instant类定义的是UTC时间,即格林威治时间、零时区的时间。不是UTC+1 或者UTC-1时区时间,也不是UTC+2或者UTC-2时区时间。不论当前服务器所在本地时区是什么,Instant对象永远只表示UTC时间。因此如果服务器操作系统设置的本地时区不是0时区,那么Instant给出的时间会与服务器本地时间不一致。...原创 2022-05-13 00:41:11 · 6196 阅读 · 0 评论 -
设计模式之简单工厂、工厂方法、抽象工厂
转自:https://www.zhihu.com/question/27125796/answer/1615074467作者:阿里巴巴大淘宝技术链接:https://www.zhihu.com/question/27125796/answer/1615074467来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。工厂模式包括:简单工厂(不在23种设计模式中)、工厂方法和抽象工厂。下面我们详细唠嗑下这几类的用法和区别。(点击头像关注我们,查收更多阿里工程师一线干货分享)—转载 2022-05-09 22:56:57 · 435 阅读 · 0 评论 -
Java 如何生成 UUID
java uuid转载 2022-05-09 20:32:32 · 13700 阅读 · 0 评论 -
java 泛型
jdk 1.5之前没有泛型。jdk 1.5开始,增加了一系列泛型相关的接口和类:其中两个顶级接口是Type和AnnotatedElement。Type和Class的区别在jdk 1.5之前,一个类型用一个Class对象表示,一个类型必对应一个Class对象,一个Class对象代表一个类型。在jdk 1.5之后,一个类型可能用一个ParameterizedType对象表示、一个变量的类型可能用一个TypeVariable对象表示,一个方法的参数或者返回值的类型可能用一个wildcardType对象表示原创 2022-02-19 20:44:13 · 602 阅读 · 0 评论 -
JDK代理:Proxy源码详解
Proxy类中定义了一个缓存,用于存储当前应用生成的所有代理类。缓存的数据实际存储在一个ConcurrentHashMap中,我们称之为cache-map。cache-map对所有代理类的存储,是以每个代理类的类加载器为分组依据,将同一个类加载器加载的所有代理类分为一组。如此,将有相同类加载器的一组代理类的类加载器对象作为key,将这组代理类构成的一个集合作为value,存储在cache-map中。cache-map的key的类型是ClassLoader,存储代理类的类加载器。cache-map的val原创 2021-11-15 15:15:09 · 1714 阅读 · 0 评论 -
java 集合的迭代器模式源码分析
接口 java.lang.Iterable此接口的javadoc:所有实现了java.lang.Iterable接口的类对象,都可以被应用for-each loop语句。建议使用 for-each loop 遍历此接口的类对象,除非需要对元素做更新(增加、删除)操作。public interface Iterable<T>{ default void foreach(Consumer<T> consumer){ for (T t : this) { // for-e原创 2021-08-16 16:56:24 · 212 阅读 · 0 评论 -
关于Java的Class类概念:isLocalClass,isMemberClass,isAnonymousClass,isPrimitive,isSynthetic()
作者:weishu链接:https://www.zhihu.com/question/67270393/answer/251059300来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。第一个问题,「本地类,成员类,合成类具体是什么概念?」 其实这些名词本身已经说明了他们自己的意思了,写个例子来说明一下到底何种情况对应这些概念:public class ClassTest { static class StaticMemberClass { i转载 2021-08-12 22:01:50 · 1339 阅读 · 0 评论 -
Unsafe API及 Unsafe对java并发的支持
Unsafe类提供了直接操作内存的方法// 以下方法是获取字段在内存中的偏移量offsetpublic native long objectFieldOffset(Field f); // 获取某个对象的实例域相对于此对象在内存中的偏移量public native long staticFieldOffset(Field f); // 获取某个类的字段相对其所在类的class对象在内存中的偏移量offsetpublic native Object staticFieldBase(Field原创 2021-07-29 20:30:29 · 359 阅读 · 0 评论 -
NIO相关基础篇
转自:NIO相关基础篇用户空间以及内核空间概念我们知道现在操作系统都是采用虚拟存储器,那么对32位操作系统而言,它的寻址空间(虚拟存储空间)为4G(2的32次方)。操心系统的核心是内核,独立于普通的应用程序,可以访问受保护的内存空间,也有访问底层硬件设备的所有权限。(内核也是一个应用程序,即操作系统应用程序,它会启动一个或多个进程,内核各个进程也都有各自的内存空间。用户进程可以通过调用系统调用,调用内核进程提供的服务,获取内核空间的数据)为了保证用户进程不能直接操作内核,保证内核的安全,操心系统将虚转载 2021-05-06 15:46:44 · 238 阅读 · 0 评论 -
IO :Core Java 2-2
IO流:数据相对内存的流入(In)流出(Out)字符流:以字符为最小数据单元、java中字符是Unicode编码、一个字符占两个字节。只能处理纯文本数据。字节流:以字节位最小数据单元。节点流:File、Memery Array(CharArray、ByteArray)、Memery String、Pipe每种节点流针对字符类型的和字节类型的流的流入流出都有2个类:xxInputStrea...原创 2020-12-04 13:40:54 · 378 阅读 · 0 评论 -
WeakHashMap源码解析及使用场景
目的让Map中不再使用的Entry被GC及时回收,释放内存空间用途Map本身生命周期很长,需要长期贮留内存中,但Map中的Entry可以删除,使用时可以从其它地方再次取得。实例:tomcat中的缓存有用到。实现方式对于WeakReference可以参考另一篇文章:弱引用——WeakReference——所引用的对象的回收规则在WeakHashMap类中定义了一个实例域ReferenceQueue<Map.Entry> queue。内部的Entry直接继承了WeakRefere原创 2020-10-26 15:27:49 · 2087 阅读 · 0 评论 -
并发:core java 14
Core Java 第14章 并发基本概念线程进程使得一台计算机能够同时执行多个应用程序,进程是多个应用程序的并发执行。线程使得一个应用程序能够同时执行多个任务,线程是一个应用程序内的并发执行。线程的定义及创建建议通过实现Runnable接口的方式定义线程,便于扩展。线程的中断如果一个线程启动后,用户就对其失去了控制,无法中止其执行,是非常不友好的。用户可以通过thread.interrupt();来中断线程thread,这个方法会调用native方法interrupt0(),会将线程的原创 2020-07-08 09:29:00 · 253 阅读 · 0 评论 -
弱引用——WeakReference——所引用的对象的回收规则
弱引用 WeakReference 相关的GC回收规则当一个对象仅被一个弱引用实例引用(持有)时,这个对象就会被GC回收。注意上述规则中,会被GC回收的是弱引用实例引用的对象,而非弱引用实例本身如果显式地声明了一个变量E e = new E();指向一个对象,而这个对象e被WeakReference实例持有引用,则由于对象的引用被变量e持有,对象并不符合上述回收规则,因此对象至少在变量e的作用域范围内都不会被回收。例如:class Apple{ String color; void Ap原创 2020-07-08 05:22:21 · 10582 阅读 · 8 评论 -
unsafe源码
/* * Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU Gen转载 2020-06-22 08:48:05 · 290 阅读 · 0 评论 -
HashMap源码详解:Core Java 9.3
Map接口keySetvaluessizecontainsKeyputremoveentrySetisEmptycontainsValuegetclear以下为部分JDK1.8添加的默认方法,defaultgetOrdefault(Object o,V v)replaceAll(BiFunction<K,V,V> f)remvoe(K k,V v)forEach(BiConsumer<K,V&g原创 2020-05-09 10:44:53 · 205 阅读 · 0 评论 -
Core Java(第1-3章)
1.2.6 体系结构中立/编译器jdk>jre>jvm>解释器编译器生成一个体系结构中立的目标文件格式,即字节码。只要有Java运行时系统(JRE,包括了JVM-即java解释器),这些字节码就可以在许多处理器上运行。精心设计的字节码不仅可以很容易地在任何机器上通过JVM解释执行,而且还可以动态地翻译成本地机器代码。虚拟机有一个选项,可以将执行最频繁的字节码序列翻译成机器码...原创 2020-05-08 23:44:23 · 644 阅读 · 0 评论 -
【转】java Map 遍历速度最优解
java Map 遍历速度最优解 第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Map.Entry entry = (Map.Entry) iter.next(); Object key = entry.getKey...原创 2012-11-13 12:16:51 · 127 阅读 · 0 评论 -
Java Collection-new:Core Java 9
Collection├List│├LinkedList│├ArrayList│└Vector│ └Stack└SetMap├Hashtable├HashMap└WeakHashMapVector:可以实现可增长的对象数组。它可以试用正数索引进行访问,它的大小可以跟需要增大或者缩小。 使用时注意:原创 2020-04-20 16:06:45 · 363 阅读 · 0 评论 -
流程控制及break、continue、label的用法:Core Java 3.8
while / do while确定循环:for循环for循环语句是有确定循环次数的,因此称为确定循环。for循环语句用每次迭代后更新的计数器或者变量的方式来控制循环次数。for 语句内定义的变量,其作用域仅在for循环语句和循环体内部。也就是说,如果在一个代码块内定义了两个非嵌套的for循环,则这两个for循环语句或者循环体内可以定义名称相同的变量。格式:for ( 语句1; 条件语...原创 2020-05-04 14:20:01 · 409 阅读 · 0 评论 -
JAVA的堆排序实现及优先队列
堆:用数组存储的完全二叉树。堆中二叉树的特性:树的所有父节点都必须是小于等于其节点(小顶堆),或者所有父节点都大于等于其子节点(大顶堆)。存储堆的元素的数组的特性:节点a[i] 的 左孩子节点存储在a[2i+1]、右孩子节点存储在a[2i+2]。在排序过程中,将所有元素将逻辑上划分为两部分,一部分是经过排序过程后有序的元素,另一部分为还未排序的所有待排序元素。以从小到大的堆排序为例:每...原创 2020-05-02 20:51:19 · 428 阅读 · 0 评论 -
java中default关键字的语法语义
switch-case-default接口中的方法的默认实现原创 2020-04-22 15:21:29 · 449 阅读 · 0 评论 -
UML图符号:Core Java 4.1
类之间的关系在类之间,最常见的关系有依赖(“ uses a ”)继承(“ is a ”)聚合(“ has a ”)依赖:如果类A的方法操纵B类的对象,我们就说类A依赖于类B。如Order类使用Account类是因为Order对象需要通过Account对象查看用户的账户余额。应该尽可能的将相互依赖的类减至最少,即让类之间的耦合度最小。聚合:如一个Order对象包含一些Item对象...原创 2020-04-20 13:29:12 · 187 阅读 · 0 评论 -
调试技巧:Core Java 7.6
打印变量System.out.println(“x=”+x);Logger.getGlobal().info(“this=”+this);每个类一个main方法这样就可以对每个类进行单元测试Junit组织测试用例套件日志代理,对JDK源码调试详见:举个例子e.printStackTrace() 和 Thread.dumpStack();Thread.setDefaultUncau...原创 2020-04-15 20:38:40 · 195 阅读 · 0 评论 -
日志:Core Java 7.5
开发人员应该用logger.fine( obj )来取代System.out.println( obj );当调用 System.out.println 时, 实际上生成了下面的日志消息:logger.fine();JDK的日志系统有以下几个主要的类和概念:日志记录器 Logger记录器负责暂存日志数据到内存中只有当某条日志的级别高于记录器设定的阈值时,此条日志才会被记录器记录到内存。...原创 2020-04-15 16:32:21 · 324 阅读 · 0 评论 -
断言Assert:Core Java 7.2
断言 Assertassert,是断定、坚称的意思。assertion,是主张、肯定的意思。对于断言代码assert i>0;如果i的值实际是小于或者等于0,那么系统就会抛出一个AssertionError异常。注意,AssertionError异常是Error的子类,性质相当于JVM自身内部异常。什么时候应该选择使用断言呢如果在条件不成立的情况下继续执行的话,会发生致命的、不可...原创 2020-04-15 10:31:58 · 327 阅读 · 0 评论 -
异常:Core Java 7.1
异常:程序运行过程中,由于程序本身的错误或者外部环境的影响,而出现的异常情况断言:为确保程序能正常运行或者排查程序出现异常的原因,需要编写一些测试代码进行测试。但程序正式运行时,是不允许测试代码工作的。如果直接删掉这些测试代码,再次遇到异常时,可能又需要重复编写相同的测试代码。可以通过断言来避免这些问题。日志:当程序遇到异常时,并不能总是能同用户或者终端沟通。此时可以通过日志记录下问题,以备日...原创 2020-04-15 10:14:57 · 306 阅读 · 0 评论 -
代理Proxy:Core Java 6.5
利用代理可以在运行时创建一个实现了一组接口的新类。这种功能只有在编译时无法确定需要实现哪个接口时才使用。对于应用程序设计人员来说,遇到这种情况的机会很少。这是一种高级技术,对于系统程序设计人员来说,代理带来的灵活性十分重要。代理如何工作的代理类可以在运行时创建全新的类。在运行时直接生成类,即Class类的一个实例。而非生成一个类的源码,然后经过编译后再生成类的字节码文件,再经过JVM加载、生...原创 2020-04-14 10:56:37 · 235 阅读 · 0 评论 -
内部类:Core Java 6.4
如果一个类定义在另一个类的内部,这个类就是内部类。为什么要用内部类,什么场景下需要用内部类根据面向对象设计原则,需要定义一个新的类,并对相关操作和属性进行封装。新类仅同另一个类有密切依赖关系或者逻辑关系,其它类基本不会用到它;或者这个新的类仅是为了另一个类提供服务。当发现一个类需要继承一个以上的类时,此时需要检查一下此类是否符合类的单一功能原则,是否应该定义新的类,是否需要定义...原创 2020-04-12 18:44:54 · 156 阅读 · 0 评论 -
jdk8的比较与排序(Comparator & sort):Core Java
ComparatorCore Java 6.3.8Comparator提供了许多静态方法和默认方法,为大数据的比较和排序提供了支持。对于静态方法,调用格式是:Comparator.<T>method()如获取String类的比较器:Comparator.<String>naturalOrder();如果做了静态导入,类型又能推导出来,则直接方法名即可import...原创 2020-04-06 19:24:16 · 1250 阅读 · 0 评论 -
lambda表达式、函数式接口、方法引用、高阶函数:Core Java 6.3
当参数为代码块时,如何传递参数为代码块的应用场景及实现实例当应用Arrays::sort( T[] a, Comparator<? supter T> c)方法对数组中的对象进行排序时,需要传递一个比较器对象(即Comparator接口的实例c)为参数。最终目的,是将比较器中实现的接口方法Comparator::compare(T first, T second)中的代码块传递给...原创 2020-04-01 22:43:04 · 487 阅读 · 0 评论 -
接口(Interface)与 回调(callback):Core Java 6.1
接口 interface接口技术主要用来描述类有什么功能,而并不给出每个功能的具体实现。接口不是类,而是对类的一组需求描述,这些类要遵从接口描述的统一格式进行定义。如果类遵从某个接口,那么就履行这项服务。例如:方法Arrays :: sort(T [] elements ),可以对数组中的元素进行排序,但要求类型T必须实现了接口方法Comparable<T> :: comp...原创 2020-03-30 22:25:18 · 665 阅读 · 0 评论 -
枚举类Enum:Core Java 5.6
类Enumpublic abstract class Enum<E extends Enum<E>> implements Comparable<E>, Serializable { private final String name; private final int ordinal; //序号 //构造函数 protected Enum(...原创 2020-03-30 18:38:47 · 169 阅读 · 0 评论 -
包装器类(Wrapper):Core Java 5.4
Wapper包装器类有:Void 、Boolean、Character、Integer …Wrapper类都是final的,不可被继承、重写。Wrapper类的值都是final的,不可变。如Integer类中定义的值域:private final int value;自动装箱:autoWrapping对于代码:Integer n = 3;javac编译器会自动插入一条装箱的指令,In...原创 2020-03-30 12:54:09 · 253 阅读 · 0 评论 -
参数传递:值传递:Core Java
Java方法调用时的参数传递都是值传递基本类型的参数值传递void methodA(){ int a=5; methodB(i);}void methodB(int i ){ //创建一个栈帧,创建一个本地变量i,并在栈帧中开辟4个字节空间,将传递来的数值5存储到这个空间中。 i=i+3;}在上例中,A调用B方法后,将int型变量a的值,传递给方法B的参数i,无论变量i怎么...原创 2020-03-30 12:19:05 · 140 阅读 · 0 评论 -
ArrayList 泛型数组列表:Core Java 5.3
菱形语法<>ArrayList<String> ss = new ArrayList<>(); // 不会报warningArrayList<String> ss = new ArrayList(); // 会报warning : unchecked conversionnew 操作符后的ArrayList的<>中不是必须指明泛型的...原创 2020-03-29 22:03:00 · 197 阅读 · 0 评论 -
自定义类中equals方法的一般实现中instanceof与强制转换的区别:Core Java 5.2.1
kk原创 2020-03-29 17:17:34 · 269 阅读 · 0 评论 -
自定义类的hashCode()实现方式:Core Java 5.2.3
JDK提供的工具类Object :: hashCodepublic native int hashCode()默认为的存储地址,十进制;null 会 java.lang.NullPointerException;Objects :: hashpublic static int hash(Object ... values){ return Arrays.hashCode(values...原创 2020-03-29 12:37:21 · 1450 阅读 · 0 评论 -
Java Bean详解
JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBean 通过提供符合一致性设计模式的公共方法将内部域暴露成员属性,set和get方法获取。众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制(反射机制)发现和操作这些JavaBean 的属性。功能特点用户可以使用JavaBean...转载 2019-12-05 16:32:50 · 651 阅读 · 0 评论