java基础
文章平均质量分 76
gwokgwok137
这个作者很懒,什么都没留下…
展开
-
String常量池
一、第一步 当前所使用的jdk版本是1.8 首先我们需要注意的是有运行期与编译期,而运行期还得区分运行时的类加载过程与实际执行某个代码片段。 当代码为:String a=“abc”时,由于字符串字面量会在编译期就被编译到.class二进制文件中,当虚拟机加载该class文件的时候,这种字符串字面量会被JVM初始化成一个String对象,存储在字符串常量池中,在jdk1.8里字符串常量池是在堆里的,而Constant Table\String table则在Native Memory,Con原创 2021-02-26 19:09:14 · 325 阅读 · 0 评论 -
静态代理与动态代理
代理有静态代理和动态代理静态代理里分继承(extends)和聚合(接口)(1) 继承的话就是通过super操作父类了。(2) 聚合的话,就是在代理类里指定一个接口属性,为接口属性指定一个要被代理的对象,然后在该代理类里调用被代理的对象,对其前后进行增强。动态代理市面上主流的技术有2种:jdk动态代理、cglib动态代理。像ASM、javac都不是主流的,虽然cglib得使用到ASM,但那属于太底层的了,没必要去学。 ①jdk动态代理主要使用 Proxy.newProxyInstanc原创 2021-02-26 00:10:35 · 84 阅读 · 0 评论 -
ThreadLocal的原理
当涉及多线程的时候,ThreadLocal是经常会被使用到的,所以我们来看看ThreadLocal到底是什么 ThreadLocal是一个线程内部的存储类,他能够为每个线程存储数据,而且每个线程存储的数据在线程相互之间是独立的。要取到某一线程的存储数据就必须切换到某一线程才能将其数据取出。这就像是ThreadLocal为线程开辟了各自独立的存储空间来存储线程的局部变量。所以,当一个变量需要被多线程使用到并且修改的时候,就会用到ThreadLocal了,因为如果不使用ThreadLocal的话,多个线原创 2021-02-25 15:37:30 · 79 阅读 · 0 评论 -
JDBC加载mysql驱动模块
JDBC加载驱动模块核心类就是DriverManager,例如当我们还不用自动加载服务时,我们过去平常加载mysql的两种方式都必须用到DriverManager类 ①、方式一 Driver driver = new Driver();//com.mysql.jdbc.Driver DriverManager.registerDriver(driver); ②、方式二 Class.forNam.原创 2021-02-21 23:28:43 · 323 阅读 · 0 评论 -
如何打破双亲委派机制
双亲委派机制 第一次知道何为打破双亲委派机制是通过阅读周志明的《深入理解Java虚拟机》,我们知道双亲委派机制是指当一个类加载器收到一个类加载请求时,该类加载器首先会把请求委派给父类加载器。每个类加载器都是如此,只有在父类加载器在自己的搜索范围内找不到指定类时,子类加载器才会尝试自己去加载。【这里的“父类”只是名义上的父类,而不是真的是继承上父子关系】 这种模型要求,除了顶层的启动类加载器外,其他的类原创 2021-02-21 23:15:37 · 2493 阅读 · 0 评论 -
Final关键字修饰的变量是否真的不能改变吗
我们所知道的Final在类上:该类不能被继承,其中所有的方法都不能被重写,但可以被重载, 所以不能同时用abstract和final修饰类(abstract修饰的类是抽象类,抽象类是用于被子类继承的,刚好final起冲突) 在方法上: 该方法不能被重写,但是子类可以用父类中final修饰的方法 在成员变量上: 该成员变量是不可变的,如果成员变量是基本数据类型,初始化之后成员变量的值不能被改变,如果成员变量是引用类型,那么它只能指向初始化时指向的那个对象,不能再指向别的对象,但原创 2021-02-21 17:16:03 · 6471 阅读 · 0 评论