Java基础
文章平均质量分 60
张雨zy
这个作者很懒,什么都没留下…
展开
-
Java LinkedBlockingQueue阻塞队列
阻塞队列原创 2022-05-12 16:51:55 · 968 阅读 · 0 评论 -
Android开发中的==、equals、hashcode的区别和联系
定义==gradlew clean assembleVestRelease参考资料Java 中的 ==, equals 与 hashCode 的区别与联系原创 2021-04-22 19:24:15 · 608 阅读 · 0 评论 -
【设计模式】代理模式总结(静态代理、动态代理)
代理模式代理模式就是设置一个中间代理来控制访问原目标对象,以达到增强原对象的功能和简化访问方式。静态代理这种代理方式需要代理对象和目标对象实现一样的接口。特点冗余。由于代理对象要实现与目标对象一致的接口,会产生过多的代理类。不易维护。一旦接口增加方法,目标对象与代理对象都要进行修改。静态代理在编译时就已经实现,编译完成后代理类是一个实际的class文件接口public interface IUserDao { public void save();}实现类原创 2021-04-19 18:14:16 · 174 阅读 · 0 评论 -
Java 注解(Annotation)的简单用法
注解处理器(APT,Annotation process tools)注解Java提供了一种源程序中的元素关联任何信息和任何元数据的途径和方法注解分类源码注解注解只在源码中存在,编译成.class文件就不存在了编译时注解注解在源码和.class文件中都存在运行时注解(通过反射来调用)在运行阶段还起作用,甚至会影响运行逻辑的注解自定义注解定义import java.lang.annotation.Documented;import java.lang.annotatio原创 2021-03-31 11:57:32 · 295 阅读 · 0 评论 -
Java中,直接定义一个字符串和newString的区别
String s1 = "a" 时,首先会在字符串常量池中查找有无 “a” 这个对象。 若没找到,就创建一个 "a" 对象,然后,以 s1 为它的引用。若在字符串常量池中找到了 “a” 这个对象,同样也将 s1 作为它的引用。若再执行一次 String s2 = "a" , 那么 s1 和 s2 都是同一个对象的引用,即 逻辑判断 s1 == s2 的结果是 true。String s...原创 2021-03-15 16:13:45 · 795 阅读 · 0 评论 -
Java类加载器(ClassLoader)和类加载过程
类加载器(ClassLoader)是什么?ClassLoader就是用来动态加载class文件到内存中用的(class文件是二进制字节流)只有加载到内存中的class文件才能被其他class文件引用到类加载器类型Bootstrap ClassLoader(引导加载器)Extension ClassLoader(扩展加载器)App ClassLoader (应用加载器)双亲委托模型每一层上方的加载器称为父加载器,他们之间的父子关系不是通过继承实现的,而是使用组合关系来复用父加载器的代原创 2021-02-19 21:01:23 · 285 阅读 · 0 评论 -
Java中的方法分派规则
方法分派调用谁的、哪个方法针对方法重载的情况针对方法重写的情况静态分派(编译期确定,根据调用者的声明类型和方法参数类型)方法重载Kotlin的扩展函数(静态分派)动态分派(运行时确定,依据调用者的实际类型分派)方法重写Demoimport org.junit.Test;public class DispatchTest { @Test public void test(){ SuperClass superClass = new SubC原创 2021-02-12 16:16:11 · 587 阅读 · 0 评论 -
Java 泛型机制(类型擦除),附加签名信息中获取泛型类型
泛型Java 1.5 才开始引入泛型基本类型无法作为泛型实参原创 2021-01-30 19:01:40 · 688 阅读 · 0 评论 -
Java 接口和抽象类的区别
Java 接口和抽象类的区别原创 2021-01-28 13:46:51 · 193 阅读 · 2 评论 -
JVM 内存模型(Java运行时内存分配策略)
栈栈帧,会为每个方法分配自己的空间来存储自己的局部变量等,不同方法间无法访问对方的局部变量。栈内存是线程私有的,每个线程都有自己的一个栈内存区域堆线程共享的new出来的对象方法区(元空间)直接存放在计算机物理内存中,不在jvm虚拟机内存中常量、静态变量、类元信息参考资料JVM内存模型(面试自用)关于JVM内存模型的理解jvm免费视频课程...原创 2021-01-27 11:18:39 · 175 阅读 · 0 评论 -
Android多线程相关学习总结
一、多线程的创建thread/runnablethread方式,通过继承Thread类,重写run方法,然后start启动。runnable方式,实现Runnable接口,重写run方法,然后将其添加到Thread中。两种启动线程方法的区别共同点,都需要通过Thread来创建线程。不同点,由于java中是单继承,所以通过runnable来弥补这一缺陷,使用runnable可以更灵活。另外runnable在使用多个线程的时候只需要一个thread实例。runnable的方式要比直接继承Threa原创 2021-01-19 22:38:25 · 352 阅读 · 0 评论 -
Java 面向对象的三大特征、程序设计(设计模式)的六大原则
面向对象1.对象的概念万物皆对象,客观存在的事物皆为对象2.什么是面向对象面向对象主要是把事物给对象化,包括其属性和行为。面向对象编程更贴近实际生活的思想。3.类4.什么是对象的属性5.什么是对象的方法6.类与对象的关系和区别面向对象三大特性:1、封装隐藏对象的属性和实现细节,仅对外提供公共访问方式,将变化隔离,便于使用,提高复用性和安全性。2、继承提高代码复用性;继承是多态的前提。3、多态父类或接口定义的引用变量可以指向子类或具体实现类的实例对象。提高了程序的拓展性。封装:原创 2020-12-01 17:17:01 · 379 阅读 · 0 评论 -
Android List和ArrayList的区别(多态的优势)
List和ArrayListList myList = new ArrayList();您只能调用List接口中定义的方法和引用成员。如果您将其定义为:ArrayList myList = new ArrayList();除了那些定义从List继承的成员之外,您还可以调用特定于ArrayList的方法并使用特定于ArrayList的成员。然而,当您在第一个示例中调用List接口的方法(在ArrayList中实现)时,将调用ArrayList中的方法(因为List接口不实现任何方法)。这原创 2020-12-01 17:11:35 · 1317 阅读 · 0 评论 -
【设计模式六】原型模式简介、深拷贝浅拷贝问题
定义用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类需要具备以下两个条件:实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法。在java虚拟机中,只有实现了这个接口的类才可以被拷贝,否则在运行时会抛出CloneNotSupportedException异常。重写Object类中原创 2020-07-11 21:06:53 · 453 阅读 · 0 评论 -
【设计模式五】模板方法模式简介
定义定义一个操作中,算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变算法的结构即可重定义该算法中的某些特定步骤。例子1,给定一个整数数组,把数组中的数由小到大排序,然后把排序之后的结果打印出来。经过分析之后,这个任务大体上可分为两部分,排序和打印AbstractSortpackage com.zhangyu.template;public abstract class AbstractSort { //定义一个待实现的抽象方法 public abstract void原创 2020-07-11 11:03:03 · 136 阅读 · 0 评论 -
Java 单链表的删除操作
测试代码package com.zhangyu;public class LinkedListTest { /** * 定义节点的结构 */ static class Node { int data; Node next; public Node(int data) { this.data = data; } @Override public原创 2020-07-02 17:30:26 · 4069 阅读 · 0 评论 -
Java 静态初始化块、普通初始化块
初始化块Java中可以通过初始化块进行数据的赋值。在类的声明中可以包含多个初始化块,当类创建实例的时候就会依次执行这些代码块。如果使用static修饰初始化块,就称为静态初始化块。需要注意的是,静态初试化块只在类加载的时候执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量。例子package com.zhangyu;public class MyTest { String name; //普通初始化块 { name = "zhan原创 2020-07-01 17:27:55 · 1112 阅读 · 1 评论 -
Java 集合Collection家族成员(List、Set、Queue、Vector、Stack)
说明1.所有集合类都位于java.util包下。Java的集合类主要由两个接口派生而出:Collection和Map,Collection和Map是Java集合框架的根接口,这两个接口又包含了一些子接口或实现类。2. 集合接口:6个接口(短虚线表示),表示不同集合类型,是集合框架的基础。3. 抽象类:5个抽象类(长虚线表示),对集合接口的部分实现。可扩展为自定义集合类。4. 实现类:8个实现类(实线表示),对接口的具体实现。5. Collection 接口是一组允许重复的对象。6. Set 接.原创 2020-06-30 18:27:39 · 1230 阅读 · 0 评论 -
Java Synchronized 同步锁的基本用法
开启线程的方式 /** * 两种创建线程的方式 * Thread/Runnable(推荐) * * 调用start方法后,并不是立即执行多线程的代码,只是将这个多线程状态变为可运行状态,而不是执行状态 * * 两种启动线程方法的区别: * 1.共同点: ...原创 2020-06-30 12:53:06 · 976 阅读 · 0 评论 -
Java 反射的基本介绍
原创 2020-06-26 17:34:51 · 198 阅读 · 0 评论 -
Java 中 final、finally、finalize 的区别
参考文献try{}里面包含可能会出错的代码?如果里面出错了,他回交给catch{}处理,catch可能把这个错误给屏蔽掉(就比如说你牙疼不能吃饭,给给力来个止疼的,不影响你做其他的事情了)。。不影响你之后的代码运行。。但是如果你try{}里面有多行代码第一行,第二行,第三行,如果第二行出错了,第三行是不执行的。如果有finally{}这里里面代码是处理后事的。比如说,你try里面有操作工作流的,那么如果出错了fianlly可以用力处理,关闭工作流对象,避免浪费资源。finally{}是必须执行的,不是管是原创 2020-06-24 12:29:37 · 299 阅读 · 0 评论 -
Java集合Map家族成员(HashMap、LinkedHashMap、TreeMap、HashTable、ConcurrentHashMap)
结论:如果没有特殊的其他需求,例如,录入顺序,使用顺序,key顺序情况下。500万以下。一次性put所有数据,或一次性get所有数据,LinkedHashMap性能最好500万以上一次性put所有数据,LinkedHashMap比HashMap慢一点一次性get所有数据,LinkedHashMap依然很快HashMap的构造方法Map map = new HashMap()默认长度是16默认的负载因子是0.75等同于 Map map = new HashMap(16,0.75)Ha.原创 2020-06-23 18:00:31 · 417 阅读 · 0 评论 -
Java 把一个字符串中的单词原地进行反转。比如“abc de fgha”,反转成“cba ed ahgf”,栈的基本用法
方案一(部分情况下不适用)使用split分割空格乎,然后通过StringBuffer进行反转。不适用的情况如,前后空格的,中间两个单词中有多个空格时,不能保证原地反转。 public String reverse(String str) { Log.e(TAG, "输入:" + str); if (TextUtils.isEmpty(str)) { return ""; } //空格分割字符串原创 2020-06-21 12:08:28 · 584 阅读 · 0 评论 -
Java单链表的插入和删除操作
StudentNodepackage com.zhangyu.linklisttest2.linkedlist;import java.util.Objects;/** * 节点类 */public class StudentNode { int id;//学号 String name;//名字 int data;//成绩 StudentNode next;//下一个节点 public StudentNode(int id, String name,原创 2020-06-14 17:24:23 · 2216 阅读 · 0 评论 -
Android StringBuilder和StringBuffer
String在Java中String的值是不可改变的,这就导致每次对String的操作都会生成一个新的String对象,效率低下并且浪费资源。StringBuffer和StringBuilder经常性对字符串进行操作的时候,使用StringBuilder和StringBuffer。主要区别:StringBuilder速度快,但不是线程安全的(不能同步访问)小结:(1)如果要操作少量的数据用 String;(2)多线程操作字符串缓冲区下操作大量数据 StringBuffer;(3)单线程原创 2020-06-05 18:11:33 · 1004 阅读 · 0 评论 -
Android Random获取随机数,随机字符串
private void randomTest() { Random random = new Random(); Log.e(TAG, "randomTest1: " + random.nextLong()); Log.e(TAG, "randomTest2: " + random.nextBoolean()); Log.e...原创 2019-10-19 11:01:43 · 3365 阅读 · 0 评论 -
Java字符串操作replace无效的原因,replace用法
为了去掉That’s中间的符号’public class Main { public static void main(String[] args) { String s = "That's doing nothing."; s.replace("o",""); System.out.println(s); }}//输出结果That's do...原创 2018-11-23 17:45:55 · 8975 阅读 · 0 评论 -
Java冒泡排序(Bubble Sort)和快速排序(Quick Sort)
Java冒泡排序(Bubble Sort)原理:比较两个相邻的元素,将值大的元素交换至右端。原创 2018-11-29 14:08:29 · 657 阅读 · 0 评论 -
Java中判断奇数偶数,实测
看了一些帖子,发现有些错误,于是自己做了些修改,并进行了测试package insertString;public class insertTest { public static void main(String[] args) { System.out.println("isOdd(9):"+isOdd(9)); System.out.println("isOdd(10):...原创 2018-11-28 15:08:03 · 5386 阅读 · 2 评论 -
Rxjava,Map操作符的例子
最简单的例子 Observable //传入两条数据 .create(new ObservableOnSubscribe<String>() { @Override public void subscribe(Observab...原创 2018-12-03 23:32:24 · 967 阅读 · 0 评论 -
Java使用Collections.reverse()反转一个List
public class Demo { public static void main(String[] args) { ArrayList<Integer> lists = new ArrayList<Integer>(); // 初始化10个测试数据 for (int i = 0; i < 10; i++) { lists.add(i); ...原创 2018-12-26 10:50:57 · 55906 阅读 · 0 评论 -
Java两种方法将int型转化为十六进制
系统方法和自定义方法package com.example.administrator.myapplication;import org.junit.Test;import static org.junit.Assert.assertEquals;/** * Example local unit test, which will execute on the development...原创 2019-02-04 19:59:40 · 38862 阅读 · 2 评论 -
Java获取字符串的MD5值
获取字符串的MD5package com.example.administrator.myapplication.StringUtils;import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;public class Encryption { private final ...原创 2019-02-05 14:18:02 · 9762 阅读 · 0 评论 -
Linux下安装java环境
Linux下安装java环境下载JDKCSDN下载https://download.csdn.net/download/yu540135101/11577071oracle官方下载(需要注册账号,下载速度慢)https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html使用XF...原创 2019-08-22 14:26:41 · 148 阅读 · 0 评论 -
Java使用StringBuilder在字符串指定位置插入字符串
// 设置content的时候,如果长度过长的话,可以裁剪掉。 if (tempDesc.length()&amp;gt;10){ StringBuilder sb = new StringBuilder(tempDesc);//构造一个StringBuilder对象 sb.insert(10, &quot;\n&quot;);//在...原创 2018-11-22 15:35:04 · 21080 阅读 · 0 评论