添码星空
码到成功
展开
-
Java 虚拟机基本结构
java虚拟机的基本结构如图所示:基本的结构有8个类加载子系统: 主要负责负责加载Class信息,加载的类信息都存放在方法区的类存空间中。 当JVM使用类加载器装载某个类时,它首先要定位对应的class文件,然后读入这个class文件,最后,JVM提取该文件的内容信息,并将这些信息存储到方法区,最后返回一个class实例方法区:方法区主要存储的是方法,静态成员,常量。方法区中给每个类都规定了空间并...原创 2018-06-10 16:31:09 · 331 阅读 · 0 评论 -
浅谈Java中4种线程池
newCachedThreadPool 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程...原创 2018-06-12 08:30:54 · 395 阅读 · 2 评论 -
注解Annotation实现原理与自定义注解例子
什么是注解? 对于很多初次接触的开发者来说应该都有这个疑问?Annontation是Java5开始引入的新特征,中文名称叫注解。它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。为程序的元素(类、方法、成员变量)加上更直观更明了的说明,这些说明信息是与程序的业务逻辑无关,并且供指定的工具或框架使用。Annontati...原创 2018-07-01 17:37:14 · 266 阅读 · 0 评论 -
java 23种设计模式
创建型抽象工厂模式http://www.cnblogs.com/java-my-life/archive/2012/03/28/2418836.html工厂方法http://www.cnblogs.com/java-my-life/archive/2012/03/25/2416227.html建造者模式http://www.cnblogs.com/java-my-life/archive/...原创 2018-06-13 08:34:35 · 404 阅读 · 0 评论 -
简述内部类、静态内部类、匿名内部类的区别
内部类: 成员内部类可访问外部类所有的方法和成员变量。 不能有静态的方法和成员变量。静态内部类: 只能访问外部类的静态成员变量与静态方法。 静态内部类的非静态成员可访问外部类的静态变量,而不可访问外部类的非静态变量。匿名内部类: 没有类名,没有class关键字也没有extends和implements等关键字修饰。 类的定义和实例化同时进行。...原创 2018-06-12 08:18:56 · 5266 阅读 · 0 评论 -
详解泛型与通配符
1回顾泛型类 泛型类:具有一个或多个泛型变量的类被称之为泛型类。class ClassGenericity<T> { //在类里面可以直接使用T的类型 T aa; public void test11(T bb) { //................ } //静态方法 在类上面定义的泛型,不能再静态方法里面使用 ...原创 2019-02-14 15:25:37 · 236 阅读 · 1 评论 -
Java 枚举(enum) 7种常见的用法
JDK1.5引入了新的类型——枚举。在Java中它虽然算个“小”功能,却给我的开发带来了“大”方便。用法一:常量在JDK1.5之前,我们定义常量都是:public static fianl....。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。Java代码publicenumColor{RED,GREE...原创 2020-03-26 14:11:22 · 344 阅读 · 0 评论 -
Java中==与equals的区别
1)对于==,如果作用于基本数据类型的变量,则直接比较其存储的“值”是否相等; 如果作用于引用类型的变量,则比较的是所指向的对象的地址2)对于equals方法,注意:equals方法不能作用于基本数据类型的变量 如果没有对equals方法进行重写,则比较的是引用类型的变量所指向的对象的地址;...原创 2018-06-11 08:29:05 · 165 阅读 · 0 评论 -
java中byte、short、int、long、float、double、char基本数据类型范围
基本类型,在Java中所有数字都是带符号的。类型 长度 范围byte 8bit/1byte -27至27-1short 16bit/2byte -215至215-1int 32bit/4byte -231至231-1long 64bit/8byte -263至263-1float ...原创 2018-06-09 21:28:51 · 1819 阅读 · 0 评论 -
浅谈构造函数、构造代码块与静态代码块
构造函数、构造代码块和静态代码块容易混淆,它们的执行条件和执行顺序也常常容易犯迷。构造函数格式:类名(参数1,参数2,…){构造函数执行语句};关于构造函数,以下几点要注意:1.对象一建立,就会调用与之相应的构造函数,也就是说,不建立对象,构造函数时不会运行的。2.构造函数的作用是用于给对象进行初始化。3.构造函数笼统来说也是函数,它具备函数的一些特性,也不具备一些特性,可以把它看成是特殊的函数。...原创 2018-06-10 18:11:24 · 239 阅读 · 0 评论 -
Java中static的作用总结
1、深度总结 引用一位网友的话,说的非常好,如果别人问你static的作用;如果你说静态修饰 类的属性 和 类的方法 别人认为你是合格的;如果是说 可以构成 静态代码块,那别人认为你还可以; 如果你说可以构成 静态内部类, 那别人认为你不错;如果你说了静态导包,那别人认为你很OK; 那我们就先在这几方面一一对static进行总结;然后说一些模糊的地方,以及一些面试中容易问道的地方;...原创 2020-01-15 10:28:35 · 467 阅读 · 0 评论 -
类的加载和对象实例化过程
类加载过程:1, JVM会先去方法区中找有没有相应类的.class存在。如果有,直接使用;如果没有,则把相关类的.class加载到方法区2,把.class中的所有静态内容加载到方法区下的静态区域内,对所有的静态变量进行默认初始化3,执行静态代码块对象创建过程:1,JVM在堆内存中开辟一块空间,分配一个地址2,把对象的所有非静态成员加载到所开辟的空间下3,对所有非静态成员变量进行默认初始化5,执行...原创 2018-06-10 17:57:38 · 1649 阅读 · 0 评论 -
java反射的应用场景和解析方法
什么是反射?正常场景下,java从源码到运行有3个阶段:source class runtime反射提供的是runtime阶段获取类的class实例、方法、属性、注解,并且能够调用类的方法的途径,这种动态获取类信息和调用类方法的机制被称之为反射为什么要使用反射?正常的实例化一个对象ClassA objA = new ClassA();objA.sayHello();通过反射去实例化原创 2017-12-19 22:17:33 · 1350 阅读 · 0 评论 -
关于接口和抽象类
1.相同点l两者都是抽象类,都不能实例化。linterface实现类及abstrctclass的子类都必须要实现已经声明的抽象方法。2. 不同点linterface需要实现,要用implements,而abstractclass需要继承,要用extends。l一个类可以实现多个interface,但一个类只能继承一个abstractc...原创 2018-06-12 08:16:31 · 374 阅读 · 0 评论 -
线程同步的几种方法
1.同步方法 即由synchronized关键字修饰的方法。 由于java的每个对象都有一个内置锁,当用此关键字修饰方法时,内置锁会保护整个方法。在调用该方法前,需要获得内置锁,否则就处于阻塞状态。 代码如: public synchronized void save(){ …… } 注:synchronized关键字也可以修饰静态方法,此...原创 2018-06-15 15:45:44 · 869 阅读 · 0 评论 -
可变长参数在Java中
在Java1.5之后在方法上传参时便出现了**"…"**,这三个点的学名叫做可变长参数,也就是相当于一个数组,能够传入0个至n个参数public static void main(String[] args) { String[] t1 = {}; String[] t2 = {"java","C++"}; String t3 = "java"...原创 2020-03-28 09:08:06 · 193 阅读 · 0 评论 -
关于ArrayList、HashMap、HashSet的区别
ArrayListArrayList实现了可变大小的数组。 非同步的,允许所有元素,包括null。HashMap HashMap实现了Map接口,Map接口对键值对进行映射。Map中不允许重复的键。 非同步的,允许null,即nullvalue和null key。HashSet HashSet实现了Set接口,它不允许集合中有重复的值。同步的,不允许null,即nu...原创 2018-06-12 08:22:00 · 2244 阅读 · 0 评论 -
Java中4种访问权限修饰符
在Java编程语言中有四种权限访问控制符,这四种访问权限的控制符能够控制类中成员的可见性。 一、public (1)定义:public是公共的,被public所修饰的成员可以在任何类中都能被访问到。 (2)修饰的成分: public能用来修饰类,在一个java源文件中只能有一个类被声明为public,而且一旦有一个类为public,那这个java源文件的文件名就...原创 2018-06-10 22:26:09 · 4403 阅读 · 0 评论 -
谈Java中继承与组合
继承(Inheritance)是一种联结类与类的层次模型。指的是一个类(子类、子接口)继承另外的一个类(父类、父接口)的功能,并可以增加它自己的新功能的能力,继承是类与类或者接口与接口之间最常见的关系;继承是一种is-a关系。组合(Composition)体现的是整体与部分、拥有的关系,即has-a的关系。优缺点对比:组合关系 继承关系 优点:不破坏封装,整体类与局部类之间松耦合,彼此相...原创 2018-06-10 22:37:27 · 189 阅读 · 0 评论 -
浅谈Object的hashCode方法的作用
Java中的hashCode方法就是根据一定的规则将与对象相关的信息(比如对象的存储地址,对象的字段等)映射成一个数值,这个数值称作为散列值。 其主要作用是为了配合基于散列的集合一起正常运行,这样的散列集合包括HashSet、HashMap以及HashTable。当集合要添加新的对象时,先调用这个对象的hashCode方法,得到对应的hashcode值,实际上在HashMap的具...原创 2018-06-11 08:31:40 · 11117 阅读 · 2 评论 -
Java 堆和栈的区别
1、概述在Java中,内存分为两种,一种是栈内存,另一种就是堆内存。2、堆内存1.什么是堆内存?12堆内存是是Java内存中的一种,它的作用是用于存储Java中的对象和数组,当我们new一个对象或者创建一个数组的时候,就会在堆内存中开辟一段空间给它,用于存放。2.堆内存的特点是什么?12第一点:堆其实可以类似的看做是管道,或者说是平时去排队买票的的情况差不多,所以堆内存的特点就是:先进先出,后...原创 2018-06-10 11:19:48 · 207 阅读 · 0 评论 -
位操作运算符——与(&)、非(~)、或(|)、异或(^)
位运算符主要针对二进制,它包括了:“与”、“非”、“或”、“异或”。从表面上看似乎有点像逻辑运算符,但逻辑运算符是针对两个关系运算符来进行逻辑运算,而位运算符主要针对两个二进制数的位进行逻辑运算。下面详细介绍每个位运算符。1.与运算符与运算符用符号“&”表示,其使用规律如下:两个操作数中位都为1,结果才为1,否则结果为0,例如下面的程序段。public class data1...原创 2020-01-15 19:45:41 · 7729 阅读 · 0 评论 -
java.lang.reflect.Field的使用
Field类主要是用来辅助获取和操作类的属性的!1.怎么通过反射获取类的属性 先来看JDK提供的方法有如下几种: a)Class.getDeclaredField(String name); 返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段。 b)Class.getDeclaredFields(); 返回 ...原创 2018-07-01 17:28:57 · 1244 阅读 · 0 评论 -
Java中的enum不能被继承
1、枚举类介绍如果一个类的实例是有限且确定的,那么可以使用枚举类。比如:季节类,只有春夏秋冬四个实例。枚举类使用enum进行创建,其实例必须从”第一行“开始显示写出。enum Season{ SPRING,SUMMER,FALL,WINTER;//默认public static final,这都是Season类的对象。}特点: 1、枚举类的对象默认都是public static final 2、枚举类的构造器都是private,故无法在外部创建其实例,这也决定了枚举类实原创 2021-10-16 20:34:49 · 1573 阅读 · 0 评论 -
堆和栈的区别
堆与栈关于堆和栈的问题,对于熟悉C++的同学来说可能理解的比较清楚,但是由于Java的一切对象都是在堆上,因此有时候可能反而会比较迷惑,比如:为什么要分堆和栈?堆和栈的区别是什么?为什么堆是线程共享的而栈不是?很多懂一点Java的人甚至是懂一点编程的人都知道内存一般分为堆和栈,栈由系统进行关系,而堆由程序员自己管理,...balabala,基本任何一本语言基础书都会提到这些特点,但是你有想过为什么吗?为什么要分堆和栈之所以要区分堆和栈,是由于程序需要两种不同特性的内存形似而确原创 2021-10-16 20:43:25 · 97 阅读 · 0 评论 -
JVM实例和main()方法
别人问了我一个问题假设A和B都继承CA的main方法执行 阻塞B的main方法执行为什么C加载了两次?答案:一个main方法对应一个JVM实例 因此在每个JVM中C只加载了一次-------------------------------------------------------记住:每一个Java应用都唯一对应一个JVM实例,每一个JVM实例唯一对应一个堆。...原创 2021-10-16 20:58:26 · 176 阅读 · 0 评论 -
什么是jvm虚拟机
最近看了一段时间jdk源码,在看源码的过程中对数据的存储不是很清楚,当时就在想数据到底存在哪里去了?以前只是看博客什么的对jvm有一个大概的了解,但是没有深入研究。经过一段时间的研究<<深入理解java虚拟机后>>,才决定写一些关于jvm的文章,不为别的只为了同为技术的程序员们少走一些弯路,因为这本书第一遍读起来晦涩难懂,我也是查阅了大量的资料才渐渐的理解了什么意思。同时也为了留下自己的脚印,以后几十年后能够看到我在这一年没有荒废时间还在努力的研究技术,估计那时候会欣慰的一笑吧。1原创 2021-10-16 21:06:25 · 190 阅读 · 0 评论 -
详解JVM内存空间
java虚拟机基本结构:JVM是一个内存中的虚拟机,那它的存储就是内存了,我们写的所有类、常量、变量、方法都在内存中,因此明白java虚拟机的内存分配非常重要,本部分主要讲解java虚拟机内存分配。本部分会从概念上介绍java虚拟机内存的各个区域,讲解这些区域的作用、服务对象以及其中可能产生的问题。#引入:一个示例下面通过一个简单的示例,来展示java堆、方法区和java栈之间的关系。public class SimpleHeap { private int id;...原创 2021-10-16 21:20:15 · 166 阅读 · 0 评论 -
浅谈java接口和抽象类不能实例化原因
首先看看下面这段代码是不是java接口的实例化,代码如下:class MyThread implements Runnable{ ............//此处省略}//另一个类的main方法中:Runnable r = new MyThread();其实很明显,这是父类声明指向子类的引用。具体实例化的是MyThread这个对象。然后进行了思考,针对如下代码:Thread t = new Thread(new Runnable(){ @Override pu.原创 2021-10-17 08:40:20 · 901 阅读 · 0 评论 -
类加载-java.lang.ClassLoader
ClassLoader是什么?Class代表它的作用对象是类,Loader代表它的功能是加载,那么ClassLoader就是把一个以.class结尾的文件以JVM能识别的存储形式加载到内存中。类加载过程一个类在被使用之前,会经历class文件生成—>加载—>连接—>初始化等阶段。这些阶段组合起来为完整的类加载过程,其中加载阶段主要完成三件事:通过类的全限定名来获取定义次类的二进制字节流将该二进制字节流定义的静态数据结构转换成方法区的运行时数据结构在内存中生成一个代表原创 2022-03-06 20:45:21 · 163 阅读 · 0 评论 -
Java虚拟机(深度)
1. Java 内存区域与内存溢出异常1.1 运行时数据区域 根据《Java 虚拟机规范(Java SE 7 版)》规定,Java 虚拟机所管理的内存如下图所示。1.1.1 程序计数器内存空间小,线程私有。字节码解释器工作是就是通过改变这个计数器的值来选取下一条需要执行指令的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖计数器完成如果线程正在执行一个 Java 方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;如果正在执行的是 Native...原创 2022-03-13 20:56:30 · 151 阅读 · 0 评论