
java学习
爱唱歌的瓜皮
这个作者很懒,什么都没留下…
展开
-
Java 内部类的回调
回调确实灵活,简单的方式实现复杂的需求如果A类实现Base1接口,B类实现Base2接口,但是此时C类构造器只接受Base1类型。这个时候B类对象自然是不能传给C类的构造器,但是又必须得将B类穿给C类,让C类调用B类的方法。此时就可以用一个内部类解决问题。在B类中创建一个内部类。让这个内部类实现Base1接口,内部类调用B类需要用到的函数。最后把这个内部类传给C类,即可让C类调用B类需要用到的函数。程序执行顺序大概是这样的,将B的内部类传给C的构造函数,此时base1指向B的内部类。当C执行do原创 2021-07-02 15:39:31 · 432 阅读 · 0 评论 -
Java final修饰类、方法、变量、参数
在第一遍看《Java编程思想》的时候就看的太快,关于final不初始化,final修饰参数的问题没有看到,今天回顾了一下,顺手记录1、final修饰类final修饰类好理解,被final修饰的类无法被继承final class Base { public static void doSomeThing() { System.out.println("Hhh"); }}class Main extends Base{ public static vo原创 2021-06-30 13:31:03 · 532 阅读 · 0 评论 -
Java 中“+”运算符
最常见的就是加法运算和重载为字符串连接但是今天重新回顾《Java编程思想》的时候发现还有让比int类型小的类型提升为int类型这个没有什么用的用途。class Main{ public static void main(String[] args) { char c = 'a'; System.out.println(c); System.out.println(+c); }}/* 输出a97*/但是如何证明这个所谓的int类型是int类型实在麻烦。下面搜到的是原创 2021-06-22 16:02:08 · 291 阅读 · 0 评论 -
Java 容器泛型擦除之后,为什么依旧可以控制容器内的对象的类型
这是我了解到Java泛型擦除之后一直以来的疑惑,但是今天复习的时候突然想到这个问题。原因是在容器的插入操作之前会有一个检查类型的函数,在获取操作之后会有类型强制转换的操作。拿ArrayList举例 @SuppressWarnings("unchecked") E elementData(int index) { return (E) elementData[index]; } /** * Returns the element at t原创 2021-03-10 13:52:17 · 149 阅读 · 0 评论 -
Java Arrays.asList()当参数为基本类型数组易犯的错误
项目场景:今天刷LeetCode,用到了Arrays.asList()方法,但是由于没报错,所以一时不知错在哪。public class mytest { public static void main(String[] args) { char[] cary = "abcde".toCharArray(); //举个例子 Set<Character> set = new HashSet(Arrays.asList((cary)))原创 2020-12-16 14:51:30 · 891 阅读 · 0 评论 -
Java Arrays.sort()自定义排序方法
Java Arrays.sort可以对很多数据类型进行排序,但是当需要对一个比较特殊的数组进行排序的时候,比如一个二维数组,我们要以每组的第一个数大小来排序,则需要我们自己定义一个比较方法。先看看源码 public static <T> void sort(T[] a, Comparator<? super T> c) { if (c == null) { sort(a); } else {原创 2020-10-30 12:56:53 · 6505 阅读 · 0 评论 -
Java中List.of()和Arrays.asList()区别,以及原因
动手写一下,让自己更有印象1.Arrays.asList()可以插入null,而List.of()不可以import java.util.List;import java.util.Arrays;class Solution { public static void main(String[] args) { List<Integer> ls1 = Arrays.asList(1, 2, null); //List<Integer> ls2原创 2020-10-30 11:29:35 · 26393 阅读 · 0 评论 -
Java List初始化,纠正别的博客中可能的错误
今天搜索Java List初始化的时候,看到某条博客,以及多条复制该博客内容的博客。见状觉得较为简洁,而且效率应该会较高。于是乎就使用到自己的代码中去了,但是发现编译器会对Lists报错,说cannot find symbol我就去jdk9官方文档中搜索是否有Lists(因为那个博客说JDK9)没有找到,然后接着搜newArrayList所以我觉得这些博客,好歹写的时候,自己去试一下,这不是误导大家吗,而且还有不少人,复制了这篇有错误的博客。但是用List.of 可以达到原创 2020-10-21 11:42:12 · 517 阅读 · 0 评论 -
Java List的remove()方法,参数为数字时,需要注意
当我们想删除Java List对象中的某一个的时候,可以选择根据索引删除,也可以根据对象删除,调用的方法都是remove。但是当我们对一个List<Integer>对象删除某个元素的,remove(i) 是删除索引为i的元素,还是删除值为i的元素。class Solution { public static void main(String[] args) { List<Integer> ls = new ArrayList<>();原创 2020-10-16 15:00:42 · 2546 阅读 · 2 评论 -
JAVA对象在可达性分析算法中实现自救
在JAVA垃圾回收机制中使用的可达性分析算法中,若对象没有被引用链上的任意对象引用,则要进入到F-Queue队列中,然后,根据低调度优先级执行队列中对象的finalize()方法。若此时在对象中的finalize()方法中,让对象成为引用链上任意对象的引用,就可以让对象从F-Queue中退出来,实现自救。但是在第二次进入到F-Queue中时,就不可能给他自救的机会了,因为对象的finalize()方法只会子系统自动调用一次。...原创 2020-09-29 11:37:51 · 183 阅读 · 0 评论 -
Java类中字段可以不赋予初始值原因
Java虚拟机会对类的实例对象进行分配内存,在分配内存后,会将内存空间(除了对象头)全部初始化为零值。这就保证了,在类的定义过程中,不给字段赋初始值,实例对象也能有初始值。下面是在Java类中各字段的初始值字段 默认初始值 对象 null 数值(byte,short,int,long,float,double) 0或0.0 boolean false char \u0000(输出出来是空值) class Solution { private原创 2020-09-23 11:52:07 · 1072 阅读 · 0 评论 -
Java若Stack为空,peek()会报错
今天写leetcode每日一题时给定一个只包括 '(',')','{','}','[',']'的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/valid-parentheses著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。想到用栈做,在里面当需要判断栈是否为.原创 2020-08-14 11:47:10 · 4017 阅读 · 2 评论