Java基础
wanting1024
尝试把这几年的积累形成闭环
展开
-
Class.getComponentType()用法
可以返回表示数组类型的Class。 isPrimitive()用来判断指定的Class类是否为一个基本类型 String [] arr = new String[10]; String str = ""; System.out.println(arr.getClass()); // 数组的String 类 System.out.println(str.getClass()); // 非数组的String 类 Syste.原创 2020-05-15 18:40:43 · 1590 阅读 · 0 评论 -
设计模式(五)----适配器模式
转载:https://blog.csdn.net/wwwdc1012/article/details/82780560转载 2020-02-28 11:08:38 · 110 阅读 · 0 评论 -
设计模式(四)----装饰模式
定义:在不必改变原类文件和原类使用的继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是用装饰来包裹真实的对象来实现。//抽象对象,公共对象public interface Person { public void eat();}//被装饰对象public class OldPerson implements Person {...原创 2020-02-28 10:46:34 · 149 阅读 · 0 评论 -
设计模式(三)----代理模式
定义:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用分类静态代理静态代理就是在程序运行前就已经存在代理类的字节码文件,代理类和委托类的关系在运行前就确定了。//抽象对象public interface UserService { public void getB...原创 2020-02-26 22:43:40 · 89 阅读 · 0 评论 -
设计模式(二)----工厂模式
定义:工厂模式是 Java 中最常用的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。分类:简单工厂模式(也叫静态工厂模式) 工厂方法模式(也叫多形性工厂) 抽象工厂模式(也叫工具箱)简单工厂模式实质是由一个工厂...原创 2020-02-26 22:04:25 · 248 阅读 · 0 评论 -
Java基础(十七):基础类型注意点
float不能用==来比较 public static void main(String[] args) { //反例,浮点数采用“尾数+阶码”的编码方式,类似于科学计数法的“有效数字+指数”的表示方式。二制无法精确表示大部分的十进制小数 float a = 1.0f; float b = 0.9f; float c...原创 2019-11-26 17:28:19 · 204 阅读 · 0 评论 -
Java基础(十二):try-catch-finally 中,如果 catch 中 return 了,finally 还会执行吗?
catch中有return,finally中没有public class FinallyTest { public static void main(String[] args) { System.out.println(test()); } public static int test() { int a = 5; ...原创 2019-05-05 23:09:14 · 3322 阅读 · 0 评论 -
Java基础(十三):一行代码获取List最大最小值
Date max1 = dateList.stream().max(Date::compareTo).get();Date max2 = dateList.stream().max((o1, o2) -> o1.compareTo(o2)).get();这两种写法意思一样,编译后class文件内容也相同public static void main(String[] ...原创 2019-05-17 10:41:03 · 803 阅读 · 0 评论 -
Java基础(十四):ThreadLocal使用及源码分析
ThreadLocal:线程本地变量副本。当使用ThreadLocal维护变量时,会为每个使用该变量的线程提供独立的变量副本。每一个线程都可以独立地改变自己的副本,而不会影响其他线程对应的副本。public class ThreadLocalDemo { //初始化变量 private ThreadLocal threadLocal = ThreadLocal.wit...原创 2019-09-08 19:24:38 · 309 阅读 · 0 评论 -
Java基础(十五):基于LinkedHashMap实现的LRUMap
public class LRUMap<K, V> { private final int MAX_CACHE_SIZE; private final float DEFAULT_LOAD_FACTORY = 0.75f; private LinkedHashMap<K, V> map; public LRUMap(int capac...原创 2019-09-16 23:50:04 · 194 阅读 · 0 评论 -
Java基础(十六):maven项目打包
前提:自己建了个maven项目,里面写了一些公共的类,想打包给其他项目用1、在pom.xml中加入打包插件maven-jar-plugin<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</g...原创 2019-09-22 16:19:21 · 135 阅读 · 0 评论 -
IDEA设置背景图
File---->Settings---->Plugins搜索Background Image Plus,下载,重启idea选择View---->Set Background Image完成原创 2019-05-05 18:00:28 · 2739 阅读 · 0 评论 -
Java基础(三):default方法和static方法(Java8新特性)
Default:Java的一个关键字,Java8以前用于switch的默认选择项。 Java8之后可修饰在接口方法前,可为接口添加默认方法。即相关类可选择不需要实现该方法,可直接使用。 public interface DefaultTest { //静态方法,需要有方法体 public static void say() {} //default方法可以有...原创 2019-04-16 20:24:25 · 263 阅读 · 0 评论 -
Java基础(四):线程状态
注:以下部分内容摘自《Java编程思想》第四版线程状态:新建(new):当线程被创建时,它只会短暂地处于这种状态。此时它已经分配了必需的系统资源,并执行了初始化。此刻线程已经有资格获得CPU时间了,之后调度器将把这个线程转变为可运行状态或阻塞状态。 就绪(Runnable):在这种状态下,只要调度器把时间片分配给线程,线程就可以运行。也就是说,在任意时刻,线程可以运行也可以不运行。只要调...翻译 2019-04-16 21:21:25 · 103 阅读 · 0 评论 -
Java基础(五):函数式接口
被问到:什么是函数式接口?分为几类?一脸懵逼,没听过这个概念。回来补一下。概念:函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。可包含Object的public方法。使用:函数式接口可以被隐式转换为 lambda 表达式。 可用@FunctionalInterface 来表名是函数式接口,可用来编写时的错误检...原创 2019-04-16 22:59:34 · 161 阅读 · 0 评论 -
Java基础(七):sleep()和wait(),notify()和 notifyAll(),run()和 start()的区别
sleep()和wait()区别:sleep(long millis) 属于Thread类,参数为毫秒 wait() 属于Object类 当调用sleep()方法时,程序会休眠指定的时间,持有的锁不会释放。 当调用wait()方法时,程序会挂起,并释放锁,直到线程执行notify()方法或者notifyAll()方法或者时间到期。 wait()方法只能在同步控制方法或者同步控制块里调用...原创 2019-04-26 17:20:54 · 362 阅读 · 0 评论 -
Java基础(八):Enum的values()方法
在创建枚举类时,编译器会默认给你继承Enum类。然而Enum类并没有values方法。通过反射可以了解到values是由编译器添加的public class Reflection { public static Set<String> analyze(Class<?> enumClazz) { System.out.print...原创 2019-04-26 18:30:19 · 10576 阅读 · 1 评论 -
Java基础(六):理解CountDownLatch与简单使用
CountDownLatch:允许一个或多个线程等待直到在其他线程中执行的一组操作完成的同步辅助。简单理解就是可以控制一个动作在指定其他动作完成之后再执行。 位于java.utils.concurrent包下 计数无法重置。如果需要重置计数的版本,考虑使用CyclicBarrier。 方法介绍:void await() 导致当前线程等到锁存器计数到零,除非线程是...原创 2019-04-18 23:21:33 · 281 阅读 · 0 评论 -
Java基础(十):synchronized对比Lock
区别:synchronized是Java的关键字,而Lock是一个Java接口。 synchronized无法判断是否获取到锁,而Lock可以。 synchronized会自动释放锁(a线程执行完同步代码会释放锁 ;b 线程执行过程中发生异常会释放锁),Lock需在finally中手工释放锁(unlock()方法释放锁),否则容易造成线程死锁; 用synchronized关键字的两个线...原创 2019-05-03 15:16:40 · 150 阅读 · 0 评论 -
Java基础(十一):clone克隆简介----浅拷贝、深拷贝
直接上代码public class User implements Cloneable{ private int age; private String name; public User(int age, String name) { this.age = age; this.name = name; } @Ov...原创 2019-05-03 16:22:30 · 278 阅读 · 0 评论 -
Java基础(九):线程池中 submit()和 execute()方法区别
区别:submit(Callable<T> task)、submit(Runnable task, T result)、submit(Runnable task)归属于ExecutorService接口。 execute(Runnable command)归属于Executor接口。ExecutorService继承了Executor。submit()有返回值。 exe...原创 2019-04-28 22:45:57 · 4649 阅读 · 0 评论 -
Java基础(二):静态类和单例模式的区别
单例模式: 单例模式指的是在应用的整个生命周期内只能存在一个实例。***单例模式是一种被广泛使用的设计模式。他有很多好处,能够避免实例对象的重复创建,减少创建实例的系统开销,节省内存。静态类: 静态类就是一个类里面都是静态方法和静态field,构造器被private修饰,因此不能被实例化。区别: 单例在系统中一个类只有一个实例。即一个类...原创 2019-04-13 15:05:54 · 1486 阅读 · 0 评论