java学习
文章平均质量分 78
man_zuo
这个作者很懒,什么都没留下…
展开
-
java虚拟机笔记 String相关概念及其面试题
String相关String的基本特征String被声明为final,不可被继承。String实现了Serializable接口,表明String支持序列化;实现了Comparable接口,表明String是可以比较大小jdk8及其以前底层用char数组实现;jdk9以后用byte数组加编码标记(因为比如中文需要用两个byte存储)实现,StringBuilder和StringBuffer也做了相应的更新。字符串常量池不会存储相同内容的字符(底层实现是一个固定长度的hashtable,长度可由-原创 2020-11-28 22:26:00 · 494 阅读 · 1 评论 -
java虚拟机笔记 运行时内存区域划分
前言java虚拟机在执行java程序的过程中会把它所管理的内存划分成若干个不同的数据区域。jdk8以后,大体的内存划分如下。程序计数器一块很小的内存空间,线程私有,存储当前线程下一条要运行的字节码指令的行号执行引擎通过行程序计数器中的行号找到对应的字节码指令,然后将字节码翻译成对应的机器语言,交给cpu执行程序运行的分支、分支、循环、跳转、异常处理、线程切换等功能都需要程序计数器实现此内存区域是唯一一个java虚拟机规范中没有规定任何OOM(OutOfMemoryError情况的区域),因为原创 2020-11-27 21:42:31 · 449 阅读 · 0 评论 -
java虚拟机笔记 逃逸分析
逃逸分析背景:在Java虚拟机中,对象都是在java堆中分配内存的,这是一个普遍的常识,但是有一种特殊情况,那就是如果经过逃逸分析后发现,一个对象并没有逃逸出方法的话,那么该对象就可能被优化成栈上分配。逃逸分析并不是直接的优化手段,而是一个代码分析;为其它优化手段如栈上分配、标量替换和同步消除等提供依据为什么要将堆上的对象分配到栈上(逃逸分析技术的目的)减少堆分配的压力,因为堆是共享区域,堆上分配需要进行同步操作主要是为了减少gc次数,提高gc效率。因为gc只会清理堆区和方法区,而不用清理虚拟原创 2020-11-24 21:48:15 · 451 阅读 · 0 评论 -
java虚拟机笔记 类加载器与类的加载顺序
虚拟机的启动启动java虚拟机的启动时通过引导类加载器(bootstrap class loader)创建的一个初始类来完成的,这个类是由虚拟机的具体实现指定的类加载器的分类启动类加载器(引导类加载器,Bootstrap ClassLoader)这个类加载器通过 C/C++语言实现,嵌套在JVM实现中它用来加载Java的核心类库(JAVA_HOME/jre/lib/rt.jar、resources.jar等),用于加载JVM自身运行所需要的内容并不继承java.lang.Class原创 2020-11-16 11:42:51 · 340 阅读 · 0 评论 -
Java线程池 通过ThreadPoolExecutor构造器认识四种线程池
ThreadPoolExecutor构造器int corePoolSize: 核心线程池大小int maxnumPoolSize: 最大线程池大小long keepAliveTime :超时时间(超时了没有人调用就会释放)特点注意: 这个超时时间控制的时非核心线程数的回收时间,核心线程永远不会被回收TimeUnit unit: 超时单位BlockingQueue< Runnable> workQueue: 阻塞队列(当前没有空闲线程时,任务会放入阻塞队列)ThreadFac原创 2020-10-14 02:10:01 · 268 阅读 · 0 评论 -
Java设计模式 单例模式
单例模式定义所谓单例,就是整个程序某个类有且仅有一个实例。该类负责创建自己的对象,同时确保只有一个对象被创建。特点类构造器私有持有自己类型的私有属性对外提供获得实例的静态方法几种类型饿汉式类加载到内存后,就实例化一个单例,jvm保证线程安全优点: 简单易用,缺点:不管用到与否,类装载时就完成实例化,可能会造成资源的浪费/** * 饿汉模式 * @author manzuo * @date 2020/6/4 16:04 */public class Singleton原创 2020-10-11 13:54:09 · 269 阅读 · 0 评论 -
Java学习笔记 反射与注解
前言反射是框架(如Spring等)的灵魂,掌握java反射的知识可以让你更好的理解框架的底层实现。而我们经常使用的一些Spring注解就是通过反射来获取的。反射动态语言VS静态语言动态语言:是一类可以在运行时可以改变其结构的语言(引进新的对象,函数或者删除已有的函数),通俗的点说就是在运行代码的时候可以根据某些条件改变自身结构,如C#,JavaScript,PHP,Python等静态语言:运行时结构不可变的语言就是静态语言,如Java,C,C++. Java虽然不是动态语言,但是可以通过反射机原创 2020-10-10 20:39:52 · 381 阅读 · 0 评论 -
java多线程学习 ReentrantLock类的使用
ReentrantLock类为了保证任何时刻只有一个线程能进入临界区,通常需要给临界区上锁,只有获得锁的线程才能进入临界区。为了达到上锁的目的,我们通常使用synchronized关键字。在Java SE 5.0之后,java引入了一个ReentrantLock类,也可以实现给代码块上锁和释放锁的效果。lock方法 和unlock方法lock() 申请获得锁如果获得锁,该线程可以继续往下执行如果该锁已被其他线程获取,当前线程停止运行并进入阻塞状态,等待其他线程释放锁unlock() 释原创 2020-05-25 07:31:30 · 639 阅读 · 0 评论 -
java多线程学习 volatile关键字的使用
volatile关键字是java虚拟机提供的最轻量级的同步机制,用来修饰变量,可以保证变量线程间的可见性且禁止指令重排序。为了更好的理解volatile关键字,先来说下java内存模型java内存模型在Java虚拟机规范中试图定义一种Java内存模型(Java Memory Model,JMM)来屏蔽各个硬件平台和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的内存访问效果。那么Java内存模型规定了哪些东西呢,它定义了程序中变量的访问规则,往大一点说是定义了程序执行的次序。注原创 2020-05-18 19:08:41 · 337 阅读 · 0 评论 -
java多线程学习 synchronized 关键字的使用
synchronized是java 提供的一个并发控制的关键字,作用于对象上.每个java对象都有一个内部对象锁,通过synchronized可以向指定对象请求获取对象锁,该锁是互斥锁,一个时刻只能有一个线程能获得这把锁,其他请求获得这把锁的线程都进入阻塞状态synchronized提供的锁是可重入的锁可重入锁实现原理:每个锁关联一个请求计数器和一个占有它的线程。当计数为0时,认为锁是未被占有的;线程请求一个未被占有的锁时,JVM将记录锁的占有者,并且将请求计数器置为1 。如果同一个线程再次.原创 2020-05-17 03:23:06 · 291 阅读 · 0 评论 -
Java lambda表达式语法及简单示例
参考教材:《Java 核心技术 卷一》前言在JAVA SE 8 之前,在java中传递一个代码块并不容易,不能直接传递代码块,因为java是一种面向对象的语言,所以想传递代码块需要把所需传递的代码写在类的方法里,然后通过传递类的实例(即对象)才能达到传递代码块的目的。为了解决这一问题,JAVA SE 8 加入lambda表达式这一新特性,可以用一种简洁的语法来定义代码块,并把这个代码块传递给...原创 2020-03-21 04:07:28 · 1190 阅读 · 0 评论 -
java学习笔记 断言assert的使用
前言在学习Junit测试框架的时候,涉及到了断言这个概念,以前看java的时候,没仔细看这个概念,现在记录一下断言的概念断言实际上是一种测试机制,它可以规定某个参数或者属性必须要满足某个条件,否则会抛出一个异常,并且程序会中止。断言的一些特点断言只用于开发测试阶段确定程序的内部错误断言默认是禁用的,需要手动开启。禁用断言的情况下,类加载器会跳过断言代码断言检测失败的时候,会抛出As...原创 2019-07-04 12:10:04 · 9619 阅读 · 1 评论 -
Junit框架学习笔记-- 关于Junit的基本用法
参考教程: junit教程目录概述环境搭建基本用法时间测试 timeout注解的使用参数化测试概述Junit 是一个常用的Java单元测试框架,所谓的单元测试是对某一个单一实体的测试(比如某个具体的类或者类里的方法),Junit提供了注释来识别测试方法,提供了断言来测试预期结果,提供了测试运行来运行测试。环境搭建用Intellij IDEA建立一个maven quickstart项目,方...原创 2019-07-09 20:14:11 · 539 阅读 · 0 评论 -
java 数组扩容的方法
java 拓展数组长度的方法前言数组是我们编程常用到的一种最简单的数据结构,操作简单,功能强大。但是也是一个缺点,就是一旦创建了数组,就不能改变它的大小。如果申请一个超大的内存空间,又容易造成空间浪费,那有什么办法可以克服这个缺点呢?思路一:数组拷贝在java里,允许将一个数组变量拷贝给另一个数值变量。此时,两个变量将引用同一个数组 。如:intint[]a=new int[4];int[]b=...原创 2018-04-29 23:10:41 · 28415 阅读 · 0 评论 -
java基础入门(一)
前言:1. 笔者的java没有经过真正系统的学习过,只是跟着书上自学的。所以有些地方难免会理解错误之类的,如果看到错误的地方,请指出来,或者有什么不理解的地方也可以提出来,大家一起进步。2. 这篇教程是一个学习方向的引导,且只针对基础入门(更加进阶的知识笔者也还在学习)。3. java的基础入门知识网上有很多,很多大神的博客里也有总结,笔者不认为自己能比大神总结的好。所以在这篇教程里,...原创 2018-04-28 21:43:43 · 171244 阅读 · 65 评论 -
java 基础入门(二)
参考教材:《Java核心技术 卷一》前言第一篇教程里,我们已经学习了java的基本程序结构和基础语法,下面我们就来学习java面向对象(OOP)的语法。当然最重要的理解面对对象的编思思想,以便读者将来学习其他面对对象的语言时能触类旁通。面向对象的具体概念及和面向过程的区别网上有很多,在这里就不赘述了(毕竟笔者也总结不好)。另外笔者觉得理解一个由几个深奥名词拼接起来的概念对于初学者来说可...原创 2018-05-15 00:33:19 · 24119 阅读 · 19 评论 -
java 多线程学习(一) 多线程的构造
进程和线程的理解:进程:从狭义的角度来讲,进程就是一个正在运行的程序的实例。线程:指的是进程中单一顺序的执行流,有时候也叫作轻量级进程。举个例子: 当我们用word 2016程序 编辑word的时候,word2016 可以实时检查拼写的错误。 我们先运行word 2016 程序, 打开任务管理器,切换到进程页面,就可以找到word2016的进程,这就是正在...原创 2018-07-31 16:47:02 · 1172 阅读 · 0 评论 -
Spring学习(二) HelloSpring 实例
上篇说到:Spring被开发的核心目的是为了简化java开发,下面我们通过一个简单的例子来说明Spring是怎么简化开发的在src下新建一个Hello的java 包,然后在Hello包下写一个只有一个sayHi方法的Hello接口,和实现Hello接口的HelloSpring类代码如下:package Hello;public interface Hello { pu...原创 2018-07-31 23:27:37 · 562 阅读 · 0 评论 -
java多线程学习(三) 线程优先级
在java语言中,每个线程都有一个优先级,当线程调控器有机会选择新的线程时,线程的优先级越高越有可能先被选择执行。在java里,线程的优先级可以设置1-10,数字越大代表优先级越高。默认情况下,一个线程继承它的父线程的优先级,即如果用A线程启动B线程,那么B线程的优先级就和A线程的优先级一致。也可以用setPriority方法提高或降低任一个线程的优先级。但是,根据《JAVA核心技术》所讲...原创 2018-09-03 17:01:08 · 2261 阅读 · 1 评论 -
java多线程学习(二)线程的基本方法
线程休眠static void sleep(long millis) // 让"当前线程"睡眠指定时间(毫秒),指定时间后继续自动执行这是Thread类中的静态方法。这里提到“当前线程”的概念,谈谈我的理解:关于“当前线程”的理解:即Thread.currentThread()返回的线程,也可以说是正在执行sleep方法的线程。下面来看个例子:public class m...原创 2018-09-03 14:20:26 · 907 阅读 · 0 评论 -
【数据结构】利用栈实现表达式求值
前言java实现,利用int类型存储操作数,完善了char类型范围太小的问题,利用递归,完善了括号嵌套使用的问题。运行结果截图代码实现:import java.util.Arrays;import java.util.Scanner;public class StackTest{ //测试 public static void main(String[] args) ...原创 2018-09-26 00:23:56 · 5155 阅读 · 0 评论 -
SDK location should not contain whitespace, as this can cause problems with the NDK tools.
今天在安装 Android Studio 的时候,在安装到SDK的时候突然报了这个警告,SDK location should not contain whitespace, as this can cause problems with the NDK tools.说 SDK的安装路径不能包含空格,我看了好久,才发现C盘下的Program Files 是自带空格的,所以报了错,所以只需要重...原创 2018-10-13 12:59:28 · 4081 阅读 · 0 评论 -
java 基础入门(三)
前言第一篇博客讲了Java的一些基础语法,第二篇博客讲了Java面向对象的一些特性,比如类和对象, 还有java 三大特性 封装,继承 ,多态 ,然后还讲到了抽象类的概念, 这篇博客将继续学习java的其他的重要特性。接口(interface)首先强调,接口不是一个类,接口主要是用来描述类有什么功能的,但不用给出 每个功能的具体实现。 从功能上来说,接口和抽象类是非常类似的。但是从实现上,接...原创 2019-05-03 16:01:39 · 8608 阅读 · 6 评论 -
java 用递归实现的傻瓜式走迷宫
没有涉及复杂的算法,纯暴力的方式走迷宫import java.util.Scanner;public class Main{ static int length,wideth;//迷宫矩阵的长度和宽度 static int x,y;//起始位置的坐标 static String[][] arr;//迷宫的二维数组 static int n;//当前走的走的步数...原创 2018-04-29 23:14:08 · 2968 阅读 · 2 评论