
java基础
文章平均质量分 84
user2025
简洁优雅是吾之追求
展开
-
JVM常量池
文章目录什么是常量常量池静态常量池运行时常量池javap命令反编译后的文件什么是常量final修饰的变量就是常量,值一旦给定就无法改变final修饰的变量分为三种:静态变量、实例变量和局部变量常量池常量池分为两种:静态常量池和运行时常量池常量池中主要存放两大类常量:字面量和符号引用量(1)字面量则属于Java语言层面常量的概念,包括字符串常量、基本数据类型、final修饰的成员变量值(2)符号引用量则属于编译原理方面的概念,包括了如下三种类型的常量:类和接口的完全限定名、字段名称和描述原创 2021-04-11 14:20:06 · 219 阅读 · 0 评论 -
java中数组、字符串、list的最大长度
数组的最大长度数组的length属性是int类型,占4个字节,最大值为Integer.MAX_VALUE= 231-1【21亿多】int[] a = {1, 2};int length = a.length;字符串String的最大长度String、StringBuilder、StringBuffer底层都是基于字符数组char[ ]的,该数组的最大长度也为Integer.MAX_VALUE,所以一个字符串最大21亿多个字符,即占232-2个字节【(231-1)*2】,即差2个字节达到4GB。原创 2021-04-10 20:27:49 · 4659 阅读 · 0 评论 -
Spring常用注解
Spring常用注解包括了SpringMVC的注解,SpringMVC是Spring的子项目声明bean的注解@Controller 标注控制层组件@Service 标注业务层组件@Respostory 标注数据访问组件@Component 标注@Controller、@Service、@Respostory以外的其他组件注入Bean的注解...原创 2019-04-11 21:37:53 · 4623 阅读 · 1 评论 -
java对象模型
文章目录oop-klass模型oop-klass模型HotSpot虚拟机使用的opp-klass模型来描述一个JAVA类,分别使用oop保存类的实例数据,klass保存类的元数据和虚方法表。JVM内部是使用C/C++实现的,每一个java类最后都会被JVM转换成内部的C++类表示,分别使用C++的oop类保存java类的实例数据,C++的klass类保存java类的元数据和虚方法表。oop模型分为多种类型,每种oop类型都有自己特定的结构,如常量池对应的opp对象就是constantPoolOop,原创 2021-02-08 13:23:30 · 309 阅读 · 2 评论 -
Java多态(动态绑定)的底层原理:虚函数表
文章目录C++的虚函数和纯函数的区别虚函数表虚函数表的构造过程虚函数的调用过程java多态的实现是通过itable(interface method table:接口方法表), vtable(virtual method table:虚方法表)来实现方法的准确跳转。接口方法表和虚方法表的原理和C++的虚函数表类似。C++的虚函数和纯函数的区别纯函数: 在基类中只进行声明,不进行具体实现,而在子类进行具体实现,类似于java接口中的方法。注意: C++允许多重继承,是通过抽象类来实现java中接口作原创 2021-02-07 23:48:38 · 3402 阅读 · 2 评论 -
JVM和字节码的关系
文章目录程序运行的两种方式:静态编译和动态解释Java严格说来是“半解释半编译”型的语言通过编译原理理解java虚拟机编译和解释机制字节码文件和JVM的关系程序运行的两种方式:静态编译和动态解释静态编译的程序在执行前全部被翻译为机器码动态解释执行的则是一句一句边运行边翻译Java严格说来是“半解释半编译”型的语言Java代码首先由javac编译器编译成字节码(ByteCode)。字节码文件中JVM指令(也称字节码指令)是JVM唯一能够识别的指令,JVM执行JVM指令时,通过JVM解释器逐条读原创 2021-01-31 12:32:17 · 2060 阅读 · 5 评论 -
final关键字
文章目录final的作用final不能修饰抽象类静态方法没有必要修饰静态方法匿名内部类访问方法中的局部变量为什么必须被final修饰分析final修饰的变量如何传入匿名内部类为啥需要final修饰局部变量final的作用静态方法可以修饰类、静态成员变量、普通成员变量、普通方法(1)final修饰类的作用:阻止当前类被继承(2)final修饰的方法的作用:阻止子类继承和重写【注意:子类可以重载该方法】(3)final修饰的成员变量初始化后便不可用修改,基本数据类型不能修改值,引用数据类型实际是引用不原创 2021-01-31 01:24:05 · 294 阅读 · 0 评论 -
用户态和内核态的简单理解
文章目录linux基础系统调用和库函数的区别什么是用户态和内核态用户态和内核态的相互转换linux基础linux的kernel内核外是系统调用,系统调用外是shell、库函数系统调用和库函数的区别内核:屏蔽了调用各硬件资源的细节系统调用:内核提供给用户调用的接口,但系统调用的可移植性差移植性差的原因:windows、linux内核的系统调用是不同的,比如:同一个功能提供给用户的函数名、参数都不相同,会出现从一个系统移植到另一个系统无法正常运行。库函数:为了解决系统调用移植新差的问题,同时封原创 2020-12-12 15:12:18 · 6396 阅读 · 0 评论 -
JVM基础:运行时数据区
文章目录JVM后台系统线程(仅作了了解)程序计数器虚拟机栈栈帧栈帧的结构局部变量表变量槽(slot)常见问题栈内存溢出的情况本地方法栈堆方法区元空间内存溢出方法区和堆是线程共享的:堆外内存(元空间、代码缓存)程序计数器是线程私有的:每个线程都有自己的程序计数器、虚拟机栈、本地方法栈Hostsport JVM中,每个线程都与操作系统的本地系统直接映射:(1)当一个java线程准备好执行以后,此时操作系统的本地线程也同时创建,一旦调用本地线程初始化成功,操作系统就会调用java线程的run方法。(原创 2020-10-19 23:16:34 · 571 阅读 · 0 评论 -
原因分析(java):CPU内存占用过高 || 程序长时间运行也没有结果
文章目录基础知识准备查看CPU信息top指令top界面的实用操作找出线程占用cpu的情况JVM之Jstack使用实际运用找出占用内存过高进程的线程步骤基础知识准备查看CPU信息 cat /proc/cpuinfo cat /proc/cpuinfo|grep 'cpu cores' # cpu的物理核数 cat /proc/cpuinfo|grep 'processor' # 查看逻辑核标识,一般从0开始top指令load average: 0.03, 0.06, 0.06 负载均原创 2020-10-11 16:58:20 · 1056 阅读 · 0 评论 -
深拷贝和浅拷贝的区别
文章目录浅拷贝和深拷贝的定义常见的浅拷贝方式常见的深拷贝方式浅拷贝和深拷贝的定义浅拷贝:只是将代表源对象的地址拷贝给了另外一个变量,该变量和原来变量都指向同一个地址,当源对象的发生变化时,拷贝对象和源对象都会发生变化深拷贝:创建了新空间来存储源对象的值,源对象和拷贝对象存放的地址不一样,两个对象任意一个发生变化都不会影响另外一个。常见的浅拷贝方式(1)一个引用类型变量直接赋值给另一个变量(2)BeaUtil.copyProperties()常见的深拷贝方式(1)通过构造器或new的方式原创 2020-10-08 14:15:05 · 259 阅读 · 0 评论 -
JAVA内部类简单使用
文章目录成员内部类局部内部类匿名内部类实际就是内部类简化写法,只要存在一个类或接口就可以使用类中定义接口内部类:一个类的内部定义的类外部类:拥有内部类的类成员内部类又分为静态成员内部内和非静态成员内部类局部内部类可以位于方法内、块内、构造器内成员内部类:分为成员内部类和局部内部类成员内部类(1) 成员内部类可以访问外部类的所有内容,包括静态和非静态的都可以访问(2)静态成员内部类只能访问外部类的静态成员、静态方法,因为静态内部类是不依赖实例对象的,即便实例对象不存在也能运行,因此静态的只能访原创 2020-10-08 13:16:33 · 200 阅读 · 0 评论 -
JDK1.8 接口新特性:default方法和static方法
文章目录为什么接口中药增加默认方法和静态方法默认方法:被public default修饰的默认方法静态方法:被public static修饰的静态方法接口易错问题接口和抽象类的区别在JDK1.8之前,接口中只有两部分内容:(1)常量:固定修饰符public static final(2)抽象方法:固定修饰符public abstract在JDK1.8之后,接口新增非抽象方法为什么接口中药增加默认方法和静态方法如果接口中只能定义抽象方法,当修改接口时,该接口的所有实现类都会受到影响,为了减小这种影原创 2020-10-08 01:22:00 · 1018 阅读 · 0 评论 -
Java中的值传递和地址值传递
Java中的值传递和地址值传递原创 2020-08-09 12:00:03 · 1246 阅读 · 0 评论 -
JAVA基础之多态
当将子类对象赋值给父类类型变量时,通过父类类型变量调用子类覆写的方法,执行是子类覆写的方法原因:Java的引用变量有两个类型,一个是编译时类型,一个是运行时类型,栈中存放的是一些引用和一些变量,而堆内存中存放的是对象。编译时类型由声明该变量时使用的类型决定,运行时类型由实际赋给该变量的对象决定。当运行时,JVM在堆中为对象开辟一块空间,对应new Daughter这句代码,并将开辟的空间地址值赋值给Father类型的变量,调用方法时实际调用的该地址引用指向的堆public class Daugh.原创 2020-08-09 11:05:21 · 121 阅读 · 0 评论 -
Java中不要在父类构造器中调用会被子类覆写的方法
如果父类构造器中调用被子类重写的方法,会导致子类重写的方法在子类成员变量初始化之前和构造器执行之前执行,从而导致子类重写的方法无法访问到子类实例变量的值,因为此时这些变量还没有被初始化。方法中使用成员变量时,究竟使用的是父类还是子类的成员变量,则由方法所在的类决定;即方法在父类中定义和执行,则访问的是父类的成员变量,方法在子类中定义(包括覆盖父类方法)和执行,则访问的是子类的成员变量。子类对象的初始过程:(1)初始化父类中的静态成员变量和静态代码块,按照在程序中出现的顺序初始化;(2)初始化子类中.原创 2020-08-09 10:11:49 · 3572 阅读 · 3 评论 -
对于JAVA中count=count++的理解
count=count++等于0的原因public static void main(String[] args) { int count = 0; for (int i = 0; i < 10; i++) { count = count++; } System.out.println(count); //运行结果:0}JVM的单次循环时执行流程:第1步:执行count=count(count=0),JVM把count的值(其值为0)拷贝到临时变量区第2步:执行c.原创 2020-08-09 09:33:32 · 5127 阅读 · 3 评论 -
Math的round、ceil、floor处理负数的情况
//四舍五入 负数时向上取整,结果为整数System.out.println(Math.round(18.5));//19System.out.println(Math.round(-18.2));//-18System.out.println(Math.round(-18.5));//-18【0.5时负数向上取整】System.out.println(Math.round(-18.6));//-19【0.6时负数向下取整】//向上进1,结果为浮点数System.out.println(Mat原创 2020-08-09 09:31:31 · 3710 阅读 · 0 评论 -
方法重载时,引用数据类型、基础数据类型的精度升级转换(二)
基础数据类型从存储范围小的类型到存储范围大的类型:byte ->short(char)->int->long->float->doubleclass Demo{ public static void main(String[] args) { Demo demo = new Demo(); demo.test(6L); } public void test(int num) { System.out.println("int=" + num)原创 2020-08-08 17:31:18 · 178 阅读 · 0 评论 -
静态代码块、构造代码块、构造函数
public class Parent { static { System.out.println("父类 静态代码块"); } { System.out.println("父类 普通代码块"); } public Parent() { System.out.println("父类构造方法"); }}public class Son extends Parent { static {原创 2020-08-08 15:28:44 · 210 阅读 · 0 评论 -
Java的数据类型
文章目录JAVA数据类型八大基本数据类型三大引用数据类型如何判断Integer类型使用了享员模式JAVA数据类型Java两大数据类型:基本数据类型(8种)、引用数据类型(3种)八大基本数据类型整型:byte, short, int, long字符型:char浮点型:float, double布尔型:boolean三大引用数据类型引用数据类型包括:类(对象)、接口、数组String是引用数据类型数组也是应用数据类型,数组的父类也是Object,每个数组都实现了接口Cloneable a原创 2020-08-02 23:56:28 · 176 阅读 · 0 评论 -
Double和Float类型的max、min、isNaN、isFinite、isInfinite方法
本文以Double为例,Float是相同的普通的浮点计算System.out.println(5 / 2); //2System.out.println(5.0 / 2); //2.5 浮点数和整数进行运算时,会将整数自动提升为浮点型Double对POSITIVE_INFINITY 、NEGATIVE_INFINITY 、NaN 的定义:public static final double POSITIVE_INFINITY = 1.0 / 0.0;public static final d原创 2020-08-02 23:03:56 · 3267 阅读 · 0 评论 -
浮点数精度丢失的原因和解决办法
文章目录二进制浮点数转换为十进制浮点数十进制浮点数转换为二进制浮点数浮点数的存储float类型在计算机中的存储形式中指数为什么要加127,而double类型要加1023?浮点数精度丢失的原因二进制浮点数转换为十进制浮点数十进制浮点数转换为二进制浮点数浮点数的存储float类型在计算机中的存储形式中指数为什么要加127,而double类型要加1023?以float为例,计算机表示单精度浮点数时,是用8位去存储指数部分,即表示0-255,但我们同样需要有负指数,正负指数的位数量为了均等,各自一原创 2020-08-02 21:22:18 · 12146 阅读 · 1 评论 -
基本数据类型char、byte、short、integer、long、double、float范围
char:占2个字节,采用Unicode编码【Unicode编码的前128字节编码与ASCII兼容】,字符的存储范围在\u0000~\uFFFF【0到65535】包装类型:Character最小值:Character.MIN_VALUE=’\u0000’最大值:Character.MAX_VALUE=’\uFFFF’byte:占1个字符,范围为:-128~127,包装类型为:Byte最小值:Byte.MIN_VALUE= -128最大值:Byte.MAX_VALUE=127short :占2.原创 2020-08-02 13:49:13 · 2369 阅读 · 0 评论 -
switch支持的10种数据类型和注意事项
文章目录switch支持的数据类型【切记不支持long、Long类型】switch注意事项switch支持的数据类型【切记不支持long、Long类型】基本数据类型:char,byte, short, int包装数据类型: Character,Byte,Short,Integer枚举类型:Enum字符串类型:String(Jdk 7+ 开始支持)Color color = Color.RED;switch (color) { case RED: System.out.println原创 2020-08-02 12:16:53 · 5455 阅读 · 0 评论 -
JAVA重载方法或构造方法调用时的精确性问题(null作为参数)(一)
Java的重载解析过程是以两阶段运行的:选取所有可获得并且可应用的方法或构造器在第一阶段选取的方法或构造器中选取最类型最匹配的一个(1)如果两个方法参数有继承关系,那子类作参数的那个方法更匹配(2)如果两个方法无继承关系,而又无法根据参数类型选择具体为哪个方法时,则编译时会报错 public class Demo { private void test(Thread t) { System.out.println("Thread:" + t); }原创 2020-08-02 11:11:37 · 414 阅读 · 0 评论