java学习笔记
nulizhuanzhu
High cohesion and low coupling
展开
-
补充-0303
这几天没有写博客,主要是因为在看《深入理解Android》,忘了写了,今天因为下班比较晚,所以没有写,这篇博客还是现在在公司写的。明天如果下班比较早,将这本书的一些内容理解一下,然后记录...原创 2021-03-03 00:20:32 · 58 阅读 · 0 评论 -
JNI相关-0228
在工作的时候看到有关于JNI相关用法,在Java层实现了一个方法,但是在C++层没找到对应的实现,在JNI层也没找到对应的JNI_…方法,只在JNI_onLoad方法中查找到了引号内有引用,一直没明白是啥原因,刚才知道了,这被叫做动态注册,是用来实现Java native层函数和JNI层建立联系的一种手段。代码因为保密原因就不贴出来了。...原创 2021-02-28 12:08:14 · 65 阅读 · 0 评论 -
新的起点-0225
今天把Java核心技术 I读完了。在最后多线程这一章,吸收的不是很好,主要一点是平时用的比较少,在阻塞这一块,理解的还行,到了异步多任务以及进程这块,只是大概看了一眼,并没有认真研读。后面什么时候用到,再认真研究一番吧。这本书从去年三月到今年的二月,整整看了一年,内容的话客观来讲大概吸收了30%,最多。还是自己代码写的太少了,编程这一门课,光看是很难有深入理解的,还是要靠大量的练习与coding才行。Java作为一门基础语言,后面还是要继续学习。接下来,该看下《深入理解Android》了。..原创 2021-02-25 23:29:54 · 66 阅读 · 0 评论 -
任务和线程池-0224
1.Callable与Future构建一个新的线程开销比较大,因为这涉及到与操作系统的交互。如果程序中创建了大量的生命周期很短的线程,那么不该把每一个任务映射到一个单独的线程,而是应该用线程池。线程池中包含很多准备运行的线程,为线程池提供一个Runable,就会有一个线程调用run方法。当run方法退出后,线程不会死亡,而是留在池中等待下一次使用。Callable与Runable类似,但是有返回值。Callable接口是一个参数化的类型,只有一个方法call。Future保存异步计算的结果。执行原创 2021-02-24 23:45:31 · 60 阅读 · 0 评论 -
线程安全的集合-阻塞队列-0223
很多线程问题可以使用一个或者多个队列以优雅而又安全的方式解决。生产者线程向队列插入元素,消费者线程获取元素。当试图向一个队列插入元素而队列已满,或者想取出一个元素而队列已空时,阻塞队列将导致线程阻塞。工作线程可以周期性的将中间结果存储在阻塞线程中,其他工作线程可以将中间结果移除,并进行进一步修改,队列会自动平衡负载。如果第一组线程运行的比第二组慢,那么第二组线程在等待结果时会则色。如果第一组快,那么队列会填满,直到第二组赶上来。以下程序使用阻塞队列来控制一组线程:程序在一个目录及其所有子目录下查看所有原创 2021-02-23 23:55:27 · 118 阅读 · 0 评论 -
原子性-0222
原子性:假设对共享变量除了赋值外不做其他操作,可以将其声明为volatile。在java.util.concurrent.atomic包中,就提供了一些方法,来对变量进行原子方式的操作。比如AtomicInteger类中,有incrementAndGet方法,可以让一个变量进行自增,并返回增加后的值。也就是说,获得值,增加一并设置然后生成新值的操作不会中断,这就是原子性。死锁:如果每一个需要等待的线程都被阻塞,就会形成死锁。一个疑点:suspend方法导致的死锁明天进行阻塞队列的学习。原创 2021-02-22 23:41:21 · 60 阅读 · 0 评论 -
条件对象与synchronized关键字-0219
条件对象:如果一个银行账户需要转账,但是其余额小于转账金额,那我们不希望转账的操作进行下去,此时就需要条件对象,来控制此线程暂停运行,等待其他线程向此账户转入金额,这就是条件对象的作用。来看如下的代码:package com.example.lib.sync;import java.lang.reflect.Array;import java.util.Arrays;import java.util.concurrent.locks.Condition;import java.util.co原创 2021-02-19 23:49:42 · 93 阅读 · 0 评论 -
多线程同步
先来看Bank.java的代码:package com.example.lib.threads;import java.lang.reflect.Array;import java.util.Arrays;import java.util.concurrent.locks.ReentrantLock;public class Bank { private ReentrantLock bankLock = new ReentrantLock(); private final do原创 2021-02-18 23:42:49 · 100 阅读 · 1 评论 -
线程-0205
今天开始学习并发的相关内容,今天主要是理解线程相关的概念。先通过一个demo看下多线程编程的实现:package com.example.lib.threads;public class ThreadTest { public static int DELAY = 10; public static int STEPS = 100; public static double MAX_AMOUNT = 1000; public static void main(Str原创 2021-02-05 23:26:28 · 79 阅读 · 0 评论 -
集合
今天还学习了集合的相关内容,但只是粗略的读了一遍文章,有了一个初步印象,还没掌握需要后面再看一下原创 2021-02-02 00:22:05 · 61 阅读 · 0 评论 -
映射-0129
映射的两种实现方式:HashMap和TreeMap常用方法:get()put(Key k,Value v)default void forEach()对于这个映射中的所有键/值对进行这个动作更新映射条目:利用put方法可以进行条目更新,不过有一个特殊情况就是:如果键是第一次出现,比如如下代码:counts.put(word,counts.get(word) + 1);如果word是第一次出现,那么就会报一个空指针错误解决办法:counts.put(word,counts.getOrD原创 2021-01-29 22:39:18 · 80 阅读 · 1 评论 -
Java的多态理解-0127
今天同事给我出了一道题:Parent 是 Child的父类,Parent 有一个print方法,子类继承了这个方法。Parent obj去调用print方法,会调用哪个类的方法?答案是Child。我答错了,尴尬。这块属于java的多态部分的内容。好久没写过代码了,一时还真想不起来了,所以回来翻了翻书,上网查了下,再理解一遍。看以下两端代码:package com.example.lib.Extend;public class ExtendTest { public static vo原创 2021-01-27 23:58:07 · 91 阅读 · 0 评论 -
LinkListTest-0126
今天没有学些PMP,故看了一会集合中的链表部分,掌握了迭代器的用法。代码sample如下:package linked;import java.util.Iterator;import java.util.LinkedList;import java.util.ListIterator;public class LinkedListTest { public static void main(String[] args) { LinkedList<String&原创 2021-01-26 00:05:12 · 93 阅读 · 0 评论 -
泛型实用方法_0109
由于Collection与Iterator都是泛型接口,这意味着你可以编写处理任何集合类型的实用方法。Java类库的设计者认为,有一些方法十分有用,应该将他们提供给用户使用,这样类库使用者就不用自己再构建这些方法了。事实上,Collection接口声明了很多有用的方法,如:int size()booleam isEmpty()boolean contains(Object obj)boolean containsAll(Collection<?> C)boolean equals(原创 2021-01-10 11:55:54 · 82 阅读 · 0 评论 -
Collection接口与迭代器-0108
Collection接口在Java类库中,集合类的基本接口是Collection接口。这个接口有两个基本方法:public interface Collection<E> { boolean add(E element); Iterator<E> iterator();}add方法用于向集合中添加元素,添加成功返回true,添加失败则返回false。iterator方法用于返回一个实现了Iterrator接口的对象。可以使用这个迭代器依次访问集合中的对象。迭代器原创 2021-01-09 00:24:35 · 161 阅读 · 0 评论 -
0107
今天下班比较晚,没有时间学习,明天补上。QAQ原创 2021-01-08 00:27:01 · 60 阅读 · 0 评论 -
集合-0106
今天主要学习下集合的内容,后续几天应该也是。不过在此之前,梳理下昨天的代码逻辑。主要是利用数组列表完成字符的拼接。先设置好类与对应的方法,主要的方法是:formatFields(),用于将打印出来的内容进行格式化调整。然后实例化TypeLiteral类,并初始化。简单如上。下面开始说集合...原创 2021-01-06 23:59:43 · 141 阅读 · 0 评论 -
无题-0105
今天主要是看了下昨天的代码,因为一件事情,耽误了学习进度,明天补上。原创 2021-01-06 00:14:55 · 93 阅读 · 0 评论 -
类型字面量—0104
有时候,我们会希望由值来决定程序的行为。例如,在一种持久存储机制中,你可能希望用户用一种方法来保存特定类的对象,通常的实现方法是将Class对象与一个动作关联(这句话是什么意思?)不过,如果方法中有一个泛型类,在类型擦除时会带来问题,比如ArrayList<Interger>和ArrayList<String>都擦除为一ArrayList。如何让他们拥有不同的动作呢?看下面的例子:package genericReflection;import java.lang.refl原创 2021-01-04 23:37:19 · 292 阅读 · 2 评论 -
泛型class类-2021.1.2
今天写一个example来理解泛型Class类。package genericReflection;import java.lang.reflect.GenericArrayType;import java.lang.reflect.Method;import java.lang.reflect.Modifier;import java.lang.reflect.ParameterizedType;import java.lang.reflect.Type;import java.lang.原创 2021-01-02 14:01:25 · 539 阅读 · 0 评论 -
回首-12.31
今天是个特殊的日子,而且发生了一些意外,所以今天就不写技术文了。聊一聊2020的事情吧。也算是一篇日记。2020真的是难忘的一年。疫情侵袭,base调整,岗位轮换,重任承接,腊月奔丧,以及今天的年尾彩蛋“水管爆破”。简直“perfect”!好吧,既然2020,给了我所有的bad lucky,我应该以微笑去面对。新的一年,愿我多磨难,多历练,真诚勇敢,勇于承担。...原创 2021-01-01 00:21:43 · 121 阅读 · 0 评论 -
泛型练习-12.30
今天写一个测试程序将前几天各种方法综合在一起。package com.example.lib;public class PairTest3 { public static void main(String[] args) { Manager ceo = Manager("Gus Greedy",800000,2003,12,15); Manager cfo = Manager("Sid Sneaky",600000,2003,12,15); Pa原创 2020-12-31 00:11:48 · 86 阅读 · 0 评论 -
无题-12.29
今天因为下班太晚,洗洗就睡了,无内容原创 2020-12-30 23:35:43 · 109 阅读 · 0 评论 -
通配符类型-12.28
接昨天的内容无限定通配符可以使用无限定的通配符,例如Pair<?>。Pair<?> 和Pair类的本质不同在于:可以用任意的Object对象调用原始Pair类的setFirst() 方法。作用:对于很多简单操作非常有用。下面的例子展示了 可以用来测试一个对组是否包含一个null引用。public static boolean hasNulls(Pair<?> p) { return p.getFirst() == null | p.getSecond() =原创 2020-12-28 23:03:48 · 89 阅读 · 0 评论 -
通配符类型-12.27
通配符类型严格的泛型类型使用起来并不是那么让人愉快,类型系统的设计人员已经意识到这一点,并且给出了一种巧妙的(但很安全的)“解决方案”——通配符类型。通配符概念在通配符类型中,允许参数类型发生变化。通配符的超类型限定通配符限定与类型变量限定十分类似,但是还有一个附加能力:可以指定一个超类型限定。例如:? super Manager这个通配符限制为Manager的所有超类型。Ex:Pair<? super Manager> 有如下方法:void setFirst (? supe原创 2020-12-27 14:56:40 · 149 阅读 · 0 评论 -
无题-12.26
今天是周六,零零星星有些工作,但是因为玩了会GTA,又和同学开黑,今天没有学习。原创 2020-12-27 13:59:06 · 100 阅读 · 0 评论 -
泛型类型的继承规则-1225
泛型类型的继承规则1.无论 S 和 T 有什么关系,通常,Pair <T> 和 Pair<S> 都没有任何关系。这对于类型安全十分必要。2.总是可以将一个参数化类型转化为原始类型。但会产生类型错误问1:这个应该怎么用,或者说怎么理解?3.泛型类可以扩展或者实现其他的泛型类...原创 2020-12-26 00:02:12 · 89 阅读 · 0 评论 -
nulizhuanzhu的技术笔记——1224
第一篇技术文档从泛型开始工作后的第一篇技术博客,开始记录学习的点滴,务求每天都写一点,哪怕是日记。1.不能实例化类型变量不能在类似 new T(…) 的表达式中使用类型变量问1:什么是类型变量?是double,string这种的吗?如下的 Pair 构造器是非法的:public Pair () {first = new T(); second = new T();} //ERROR解决办法:让调用者提供一个构造器表达式,即:Pair p = Pair.makePair(String::n原创 2020-12-24 23:37:37 · 136 阅读 · 2 评论