Java基础
法迪
Android系统与续航工程师、应用开发工程师
https://github.com/sufadi
332157261@qq.com
展开
-
实例化对象方式Class.forName(xxx).newInstance()和 new xxx有什么区别
原文http://blog.csdn.net/arui319/article/details/5793080在初始化一个类,生成一个实例的时候;Class.forName(xxx).newInstance() 和 new xxx 有什么区别?用newInstance与用new是区别的,区别在于创建对象的方式不一样,前者是使用类加载机制,那么为什么会有两种创建对象方式?这个就要从可伸缩、可扩展,可重用等软件思想上解释了。 Java中工厂模式经常使用newInstance来创建对象,因此从为什么要使原创 2022-04-13 23:13:07 · 590 阅读 · 0 评论 -
手写一个HashMap
1. HashMap的框架图文章参考:https://www.cnblogs.com/2511zzZ/p/12770864.htmlHashMap是Java中一中非常常用的数据结构。它实现了基于“K-V”形式的键值对的高效存取。JDK1.7之前,HashMap是基于数组+链表实现的,1.8以后,HashMap的底层实现中加入了红黑树用于提升查找效率。HashMap的优缺点遍历速度:慢,Key是无序不重复的且从框架图看完整遍历还需要包含链表缺陷:高度依赖hash散列算法,想要提高HashMap的原创 2022-03-25 23:13:37 · 1134 阅读 · 0 评论 -
手写一个ArrayList
1. 手写一个MyArrayListArrayList 类是一个可以动态修改的数组,与普通数组的区别就是它是支持动态扩容,即没有固定大小的限制,我们可以添加或删除元素。ArrayList 本质是数组,故具有查询快,增删慢的特点add():新增时需要考虑扩容的因素。这个是区别数组的核心方法get(): 非常好地体现出下标查找的优势,故查询快remove():体现出数组的缺点,删除一个元素,后面的元素需整体前移,故删除慢优点:1、根据下标遍历元素效率较高。2、根据下标访问元素效率较高。3原创 2022-03-11 22:15:15 · 3438 阅读 · 0 评论 -
线程池、Handler、HandlerThread 执行耗时任务的Demo
1. 线程池、Handler、HandlerThread 执行耗时任务的DemoExecutors.newFixedThreadPool(8):定长线程池Executors.newSingleThreadScheduledExecutor():单线程的定时任务调度线程池,支持定时以及周期性执行任务Handler默认Loop为Main,故主要为其他线程与主线程通讯,例如某线程执行完耗时任务后,使用Handler汇报给主线程,让主线程需要刷新UI了HandlerThreadLoop需要自行指定原创 2022-03-03 22:35:26 · 2576 阅读 · 0 评论 -
测试线程池的线程重复利用机制demo
学习文章https://mp.weixin.qq.com/s/Qb3pwewrV0cJqXcYvP00kADemo代码自定义线程池线程池中如何做到线程的重复利用?答:线程池不存在取出线程使用完再归还的操作,因为线程调用start方法后,生命周期就不由父线程控制,线程run方法执行完成后就销毁了。线程池中的线程在run方法中开启循环基于生产者消费者模式获取任务。即若消息队列存在任务,则获取执行,若任务为空,则阻塞。其中核心线程在没任务的时候会阻塞不被销毁,等待新任务到来。工作线程(非核心线程原创 2022-03-02 21:49:31 · 399 阅读 · 0 评论 -
[转]Thread的运行状态
学习文章https://www.jianshu.com/p/f10ed0ea0a41Thread 运行状态:新建状态(New):至今尚未启动的线程的状态。线程刚被创建,但尚未启动Thread 运行状态:就绪状态(Runnable):当调用线程对象的start()方法(t.start();),线程即进入就绪状态。处于就绪状态的线程,只是说明此线程已经做好了准备,随时等待CPU调度执行,并不是说执行了t.start()此线程立即就会执行;Thread 运行状态:限期等待(Timed Waiting):原创 2022-02-25 22:43:39 · 582 阅读 · 0 评论 -
【转】学习笔记-Thread的run()与start()的区别
学习内容调用start()后,线程会被 放到等待队列,等待CPU调度, 并不一定要马上开始执行,只是将这个线程置于可动行状态。然后通过JVM,线程Thread会调用run()方法,执行本线程的线程体。先调用start后调用run,这么麻烦,为了不直接调用run?就是为了实现多线程的优点,没这个start不行。start()方法来启动线程,真正实现了多线程运行。这时无需等待run方法体代码执行完毕,可以直接继续执行下面的代码;通过调用Thread类的start()方法来启动一个线程, 这时此线程是处于就转载 2022-02-24 22:47:39 · 208 阅读 · 0 评论 -
冒泡排序算法-DEMO
冒泡排序算法功能:数字从小到大排列算法: 每一趟依次比较相邻的两个数,将小数放前面,大数放后面,直到一趟只剩下最后一个元素时间复杂度:O(n^2)举例[5, 4, 3, 2, 1] -> [1, 2, 3, 4, 5] 的冒泡排序过程冒泡排序前:[5, 4, 3, 2, 1] Index{i, [j, j+1]}={0, [0, 1]}冒泡排序中:[4, 5, 3, 2, 1] Index{i, [j, j+1]}={0, [1, 2]}冒泡排序中:[4, 3, 5, 2,原创 2022-02-18 23:18:24 · 353 阅读 · 0 评论 -
内部类的调用
内部类内部类分为4种:静态内部类,成员内部类、匿名内部类和方法内部类,以下进行demo的演示。package InnerJava/** * 内部类 * 1. 静态内部类: 建造者模式 * 2. 成员内部类: 非常常用 * 3. 方法内部类:特别少用 * 4. 匿名内部类: 如果某个局部类你只需要用一次,那么你就可以使用匿名内部类 */class Test { companion object { @JvmStatic fun main(args:原创 2022-02-04 22:16:58 · 1707 阅读 · 0 评论 -
[转]学习笔记-Java中为什么内部类可以访问外部类的成员
学习的文章深入理解Java中为什么内部类可以访问外部类的成员https://blog.csdn.net/zhangjg_blog/article/details/20000769Java 内部类综述https://blog.csdn.net/justloveyou_/article/details/53245561pm disable com.sankuai.meituan com.sankuai.meituan/com.dianping.base.push.pushservice.Pus转载 2022-01-30 14:16:44 · 388 阅读 · 0 评论 -
20200204_Java的箭头函数
Java 箭头函数(->)箭头函数(->)其实还是表示 lambda ,主要目的是用更少的代码来实现同样的功能,但是看起来很不好维护就是。package com.tct.freeze.kotlinstudydemo;import java.util.ArrayList;import java.util.List;public class JavaRun { pu...原创 2020-02-04 22:00:25 · 7193 阅读 · 0 评论 -
静态语句块是初始化时执行
静态属性理解静态方法是调用的时候执行的,静态语句块和静态变量是类装载的时候执行的,类是在第一次用到时被装载1. 测试demo1.1 运行类package com.example.myapplication;public class LocationManagerService { public static void main(String[] args) { ...原创 2019-11-22 10:00:26 · 264 阅读 · 0 评论 -
Java基础 01 第一个程序 Hello world
一、开发工具-Eclipse下载JDK http://www.oracle.com/technetwork/java/javase/downloads/index.html下载的Eclipse http://www.eclipse.org/downloads/下载 JDK 以支持 Eclipse 所需的环境, 然后Eclipse下编码运行二、第一个程序 Hello wor原创 2018-01-09 20:06:48 · 579 阅读 · 0 评论 -
Java基础 05 For循环-99乘法口诀
For循环-99乘法口诀 public static void main(String[] args) { /** * 99 乘法口诀 */ for (int i = 1; i 9; i++) { for (int j = 1; j <= i; j++) { S原创 2018-01-14 23:36:07 · 663 阅读 · 0 评论 -
Java基础 04 单例模式
1.volatile 修饰符volatile 修饰的成员变量在每次被线程访问时,都强制从共享内存中重新读取该成员变量的值。而且,当成员变量发生变化时,会强制线程将变化值回写到共享内存。这样在任何时刻,两个不同的线程总是看到某个成员变量的同一个值。性能换安全的典范2.synchronized 修饰符synchronized 关键字声明的方法同一时间只能被一个线程访问。3.经典原创 2018-01-13 21:25:33 · 466 阅读 · 0 评论 -
Java基础 03 对象和类
对象和类1.关系按照数学的包含关系,类包含对象。因为类是一个模板,描述对象的模板,她描述一类对象的状态和行为2.对象对象是类的实例,有自己的状态。例如猫是一个对象,有昵称和喵喵的行为package com.su.study.bean;/** * 对象 */public class Cat { // 描述对象的属性 public Stri原创 2018-01-12 23:09:38 · 505 阅读 · 0 评论 -
Java基础 02 枚举类型用法
一、枚举类型枚举类型的好处:定义变量是见名知意 enum Color { RED, GREEN, BLUE }二、示例代码switch 配合使用package com.su.myenum;/** * Java 枚举类型 */public class MyEnum { // 枚举类型的好处:定义变量是见名知意原创 2018-01-11 23:25:19 · 460 阅读 · 0 评论