
java SE
java SE
yrk0556
yrk0556@foxmail.com联系我
展开
-
URLClassLoader使用以及特性详解
类加载器类型Java中有4种类加载器:BootstrapClassLoader 最顶层的加载类,主要加载核心类库(c++实现)ExtentionClassLoader 扩展的类加载器AppClassLoader也称为SystemAppClass 加载当前应用的classpath的所有类。自定义类加载器。注意:classpath即为java编译的源文件以及一些第三方库所在的文件夹或j...原创 2020-04-06 23:01:50 · 5281 阅读 · 1 评论 -
java中子类是否继承父类的构造函数
java继承中子类是不会继承父类的构造函数的,只是必须调用(隐式或者显式)1.子类会隐式调用父类的无参构造函数。public class 继承测试 { public static void main(String[] args) { new Son(); System.out.println("----------------------"); ...原创 2020-04-06 19:32:30 · 1150 阅读 · 2 评论 -
Java中的原子操作与锁
处理器如何实现原子操作总线加锁所谓总线锁就是使用处理器提供的一个LOCK#信号,当一个处理器在总线上输出此信号时,其他处理器的请求将被阻塞住,那么该处理器可以独占共享内存。缓存加锁可以这么理解,两个CPU同时操作一个变量i,i已经被缓存到两个CPU各自的缓存块去了,假设一个CPU,修改了它缓存上的变量i,其他CPU收到i已经被修改的信号,就把自己的这个i的缓存丢弃。针对以上两个机制,我...原创 2020-02-20 17:56:52 · 809 阅读 · 1 评论 -
Java自定义数组比较函数
要想改变默认的排列顺序,不能使用基本类型(int,double, char),而要使用它们对应的类原创 2020-02-16 18:10:02 · 617 阅读 · 0 评论 -
Java创建堆
大小为 k 的堆中添加元素的时间复杂度为 O(logk){O}(\log k)O(logk),我们将重复该操作 N 次,故总时间复杂度为O(Nlogk){O}(N \log k)O(Nlogk)。Java中的堆是用优先队列PriorityQueue实现的。默认创建一个最小堆,可以接受一个Comparator比较器,来创建最大堆。由于Comparator是一个函数接口,这里我们可以直接传入一个...原创 2020-02-16 12:42:09 · 2022 阅读 · 1 评论 -
Java字符串常量池
在 jdk1.6(含)之前也是方法区的一部分,并且其中存放的是字符串的实例;在 jdk1.7(含)之后是在堆内存之中,存储的是字符串对象的引用,字符串实例是在堆中;jdk1.8 已移除永久代,字符串常量池是在本地内存当中,存储的也只是引用 public static void main(String[] args) { String s1=new String("a"...原创 2020-02-15 13:43:37 · 140 阅读 · 5 评论 -
java 元空间与永久代
Java方法区是JVM规范,元空间与永久代都是方法区的不同实现。JDK1.8之前都是永久代,JDK1.8开始换成了元空间。原创 2020-02-15 13:05:48 · 248 阅读 · 0 评论 -
Java类加载过程
Java在类加载时会进行一些动作,比如初始化等等,了解类的加载过程能够使我们在写代码时避免一些错误的发生。类加载分为四个过程,分别为加载,验证,准备,解析,初始化加载验证准备准备阶段是正式为类变量分配内存并设置类变量(static修饰)初始值的阶段,这些变量所使用的内存都将在方法区中进行分配。两种情况:普通类变量(static):初始化值,int赋0,boolean赋false,引...原创 2020-02-14 19:26:09 · 153 阅读 · 0 评论 -
Java对象的内存布局
在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header)、实例数据(Instance Data)和对齐填充(Padding)。对象头HotSpot虚拟机的对象头包括两部分信息:Mark Word第一部分用于存储对象自身的运行时数据,如哈希码(HashCode)、GC分代年龄、锁状态标志、线程持有的锁、偏向线程ID、偏向时间戳等,这部分数据的长度在32位和64...原创 2020-02-14 18:58:35 · 137 阅读 · 0 评论 -
Java 内存模型与垃圾回收
堆空间根据垃圾回收又分为新生代和老年代,新生代又分为Eden,两个Survive区间原创 2020-02-14 17:24:17 · 538 阅读 · 0 评论 -
java命令行配置参数顺序
java命令行配置参数时,虚拟机参数需在类名前,类的接收参数需要在类名后,如下面的例子。public class Hello { public static void main(String[] args) { System.out.println(args[0]); }} 输出:>java -XX:+PrintGCDetails Hello 隔壁老...原创 2020-02-12 23:34:08 · 599 阅读 · 0 评论 -
Java正则匹配中的反斜杠转义问题
在Java中反斜杠本身就表示特殊含义。如\n,\t等等。在Java字符串中无法表示便是反斜杠。定义字符串String s="name\sex";是会报错的,必须写成这种形式String s="name\\sex";用反斜杠转义反斜杠。所以在正则模块中要匹配.必须要两个反斜杠,写成这样String regex = "\\.";转义两次,因为Java无法直接表示反斜杠,所以编译器处理后就变成\.,...原创 2020-02-11 21:28:33 · 1011 阅读 · 0 评论 -
避免在 finally 语句块中使用 return 语句
在try-catch-finally语句块中,finally语句块中的return/抛出异常(立即结束语句)的优先级最高,程序会优先返回finally语句块中的立即结束语句的结果,此时try-catch语句块中的return/抛出异常(立即结束语句)的结果无效,因为被覆盖了。参考:https://juejin.im/entry/5955c3215188250d841c9974https://...原创 2020-02-11 10:15:46 · 895 阅读 · 0 评论 -
java 异常分类
参考:https://www.geeksforgeeks.org/exceptions-in-java/https://www.geeksforgeeks.org/checked-vs-unchecked-exceptions-in-java/原创 2020-02-09 13:42:43 · 100 阅读 · 0 评论 -
java 初始化顺序
class A{ static { System.out.println("父类静态代码块"); } public A(){ System.out.println("父类构造方法"); } { System.out.println("父类初始化块"); }}public class B extend...原创 2020-02-09 11:29:56 · 120 阅读 · 0 评论 -
java 创建二维数组
float f[][] = new float[6][6];float []f[] = new float[6][6];float [][]f = new float[6][6];float [][]f = new float[6][];上面四种方法都行,也就是说数组命名时名称与[]可以随意排列,但声明的二维数组中第一个中括号中必须要有值,它代表的是在该二维数组中有多少个一维数组。fl...原创 2020-02-08 18:46:39 · 2383 阅读 · 0 评论 -
java map优雅插入
for(int i=0;i<s.length();i++){ char c=s.charAt(i); map.put(c,map.getOrDefault(c,0)+1); }原创 2020-02-04 15:41:47 · 922 阅读 · 0 评论 -
.class文件中方法中的代码藏在那儿
java能将一个类编译成字节码,然后放到虚拟机上执行。class文件格式Class文件是一组以8位字节为基础单位的二进制流,各个数据项按顺序紧密的从前向后排列。我们可以将class文件看做一个巨大的结构体,这个类的所有信息全部都在这儿,类似于json。ClassFile { u4 magic; u2 minor_version;...原创 2020-01-24 15:44:03 · 327 阅读 · 0 评论 -
函数接口与lambda表达式
函数接口:只有一个抽象方法的接口称之为函数接口。lambda表达式本质上是一个函数接口的实例,实现了接口内的这个唯一抽象方法,从而实现了这个接口。// Java program to demonstrate lambda expressions // to implement a user defined functional interface. // A sample functio...原创 2020-01-22 11:50:06 · 300 阅读 · 0 评论 -
java8 接口中的默认方法
在java8之前,接口中的所有方法都是abstract public的,java8引入了default关键字用来定义接口中的普通的有方法体的方法。所有实现了这个接口的类的实例都能直接执行这个普通方法,类似于继承。// A simple program to Test Interface default // methods in java interface TestInterface {...原创 2020-01-22 11:05:50 · 364 阅读 · 0 评论 -
静态内部类和非静态内部类的区别
有两点区别静态内部类可以直接创建实例,而非静态必须要创建一个父类的实例之后才能创建子类的实例静态内部类只能访问父类的静态资源,而非静态可以访问所有资源/* Java program to demonstrate how to implement static and non-static classes in a java program. */class OuterClass{ ...原创 2020-01-22 10:57:44 · 213 阅读 · 0 评论 -
.equals(),==与hashcode()
equals()和==方法有两点区别:==是引用比较,equals()是对象的内容比较如果一个类没有重写equals方法,默认使用最近的父类的equals方法// Java program to understand // the concept of == operator public class Test { public static void main(String[]...原创 2020-01-22 23:10:11 · 111 阅读 · 0 评论 -
java中的List列表
List主要方法:E get(int index);取得索引在index的元素boolean add(E e);向表尾添加元素void clear();清除所有元素remove(int index);删除索引为index的元素List有两种主要实现ArrayList和LinkedList,第一种是顺序表,第二种是链表。这两种实现都是线程不安全的,至于为什么不把他们实现为线程安全,估...原创 2020-01-19 17:12:41 · 1573 阅读 · 0 评论 -
java io之printf
System.out.printf()方法可以对日期做处理输出。它以 %t 开头并且以下面表格中的一个字母结尾。System.out.printf("%tD",new Date());输出01/17/20参考https://blog.youkuaiyun.com/junshuaizhang/article/details/40153147...原创 2020-01-17 20:09:50 · 179 阅读 · 0 评论