![](https://img-blog.csdnimg.cn/20190712153655915.jpeg?x-oss-process=image/resize,m_fixed,h_224,w_224)
JAVA SE
写写自己对Java SE的理解,仅是我这个菜鸡的个人理解,如果有错,请帮忙指出,谢谢!
流雪扶风
明其原理,知其本质。
展开
-
JAVA-泛型篇
JAVA泛型原创 2022-06-07 23:51:36 · 539 阅读 · 1 评论 -
数组复制速度 System.arraycopy()&clone() &Arrays.copyof() &for()探究
先申明复制速度结果System.arraycopy() clone() Arrays.copyof() for()背后原理探究首先要申明的是这4种方法中的前3种是没有本质区别的,对象都是浅复制(复制地址),而普通类型都是深复制(复制值),简单来说浅复制:复制地址,相当于复制了房子(内存数据)的钥匙,一改全改深复制:复制值,通俗意义上的拷贝,相当于建了一个一模一样的房子(内存...原创 2019-07-24 22:56:56 · 1625 阅读 · 4 评论 -
return本质探究以及try-finaly下的return探究
return本质探究 其实reutrn语句本质上我们可以把它分为两步 1.return语句获取到变量的地址 2.return将获取的地址返回,也就是return本质是传地址这里可以看下面的结果try字符串的hashcode:115131StringBuilder里的try的hashCode:1361960727catch里面return语句返...原创 2019-07-24 15:28:57 · 300 阅读 · 0 评论 -
AnnotationConfigApplicationContext ad has not been refreshed yet 错误
在使用spring框架使用IOC获取bean时有时可能会碰到这个错误AnnotationConfigApplicationContext ad has not been refreshed yet看起来似乎是annotationConfigApplicationContext未刷新的问题,但事实并不是,在添加annotationConfigApplicationContext.refre...原创 2019-07-06 11:14:32 · 32049 阅读 · 2 评论 -
Java入门学习思维导图
基本不涉及具体代码,更多是作为引导,引导方向Xmind地址:https://download.csdn.net/download/qq_34834846/11271498pdf版地址:原创 2019-07-03 15:06:02 · 276 阅读 · 0 评论 -
三大性质总结:原子性,有序性,可见性
转载自:https://www.jianshu.com/p/cf57726e77f21. 三大性质简介在并发编程中分析线程安全的问题时往往需要切入点,那就是两大核心:JMM抽象内存模型以及happens-before规则(在这篇文章中已经经过了),三条性质:原子性,有序性和可见性。关于synchronized和volatile已经讨论过了,就想着将并发编程中这两大神器在 ...转载 2019-07-03 14:21:21 · 342 阅读 · 0 评论 -
java final static
final:修饰类:类不能被继承 修饰方法:方法不能被重写 修饰变量:不能修改变量的指向,且只能赋值一次 全局变量是有默认值的,所以如果用final修饰全局变量,能在定义的同时赋值,或在构造函数中赋值(注意,其他方法不能给final全局变量赋值,会报错) 局部变量不会默认赋值,因此如果用final修饰,可以初始化一次 注意:final变量是不能修改指向(即地址),但不代表不能改值...原创 2019-04-18 11:28:21 · 192 阅读 · 0 评论 -
Java 泛型
语法:Collection<E>泛型存在的最根本意义:写程序的时候很难知道类的准确数量,如果要将其储存起来,用数组很难办到,因为数组是固定长度的,或者说对数组进行扩容的代价较大(进行数组复制),所以对象的储存就需要新的东西,这个就是容器。容器长度无限,且可以储存任何数据类型(基本数据类型不行,但基本数据类型会自动装箱)容器因为要存储长度不一对象,所以将其形参设置为Ojec...原创 2019-04-17 16:26:41 · 88 阅读 · 0 评论 -
Java 自增原理
很多人都知道 i++ 和 ++i 的区别a = i++; a = i; i = i+1; a = ++ i; i = i + 1; a = i; 但碰到 i = i ++;的时候很多人就懵了? i是原来的值,还是 i+1 ?答案是 原来的值。其中的原理其实很简单,Java在执行自增一类的操作的时候是会产生一个中间缓存变量原理解释 :i++ 代码:in...原创 2019-04-17 10:44:48 · 988 阅读 · 0 评论 -
回环变位
《算法 4edit》1.2.6Q:如果字符串s中的字符循环移动任意位置之后能够得到另一字符串t,那么s就被称为t的回环变位。例如,ACTGACG 就是 TGACGAC 的一个回环变位,反之亦然。判定这个条件在基因组序列中的研究是十分重要的。编写一个算法检查两个给定的字符串s和t是否互为回环变位.A:将s2进行自我拼接,如果s1的长度等于s2的,并且拼接后的s2包含s1,则是回环变位...原创 2019-04-16 20:12:57 · 181 阅读 · 0 评论 -
java运行时内存分配详解
一、基本概念 每运行一个java程序会产生一个java进程,每个java进程可能包含一个或者多个线程,每一个Java进程对应唯一一个JVM实例,每一个JVM实例唯一对应一个堆,每一个线程有一个自己私有的栈。进程所创建的所有类的实例(也就是对象)或数组(指的是数组的本身,不是引用)都放在堆中,并由该进程所有的线程共享。Java中分配堆内存是自动初始化的,即为一个对象分配内存的时候,会...转载 2019-04-12 16:44:18 · 494 阅读 · 0 评论 -
浮点型的三个特殊值 Double.NEGATIVE_INFINITY Double.POSITIVE_INFINITY Double.NaN
Double.NEGATIVE_INFINITY 负无穷 Double.POSITIVE_INFINITY 正无穷 Double.NaN 非数注意:浮点数才有无穷的概念,整数是没有的比如:int a = 1/0;//直接报错抛出运算异常:Exception in thread "main" java.lang.ArithmeticException: / by zerof...转载 2019-04-11 21:29:56 · 1842 阅读 · 0 评论 -
Java toBinaryString()函数探究及Math.abs(-2147483648)=-2147483648原理探究
toBinaryString()函数public class Customer { public static void main(String[] args) { int m=-8; System.out.println(Integer.toBinaryString(m)); } }结果:1111111111111111111111111...原创 2019-04-11 20:40:09 · 257 阅读 · 0 评论 -
Java 代理
代理做一个简单的抽象:代理模式包含如下角色:Subject:抽象主题角色。可以是接口,也可以是抽象类。 RealSubject:真实主题角色。业务逻辑的具体执行者。 ProxySubject:代理主题角色。内部含有RealSubject的引用,负责对真实角色的调用,并在真实主题角色处理前后做预处理和善后工作。代理模式优点:职责清晰 真实角色只需关注业务逻辑的实现,非业务...转载 2019-04-11 20:08:21 · 86 阅读 · 0 评论 -
Java中private、protected、public和default的区别
public:具有最大的访问权限,可以访问任何一个在classpath下的类、接口、异常等。它往往用于对外的情况,也就是对象或类对外的一种接口的形式。protected:主要的作用就是用来保护子类的。它的含义在于子类可以用它修饰的成员,其他的不可以,它相当于传递给子类的一种继承的东西default:有时候也称为friendly,它是针对本包访问而设计的,任何处于本包下的类...转载 2019-04-10 08:43:56 · 115 阅读 · 0 评论 -
Java JRT
解释器运行步骤:找到环境变量CLASSPATH,CLASSPATH包含一个或者多个目录,用作查找.class文件的根目录 从根目录开始,解释器获取包名并将每个.替换成\或/(取决于操作系统) 得到的路径会与CLASSPATH的各个不同项相连接 解释器就在这些目录中查找与你所要创建类的名称相关的.class文件...原创 2019-04-09 20:52:40 · 1212 阅读 · 0 评论 -
Java 数组
申明及初始化申明方式及初始化方式数组的申明及初始化 int[] arr = new int[5]; int arr[1] = 3; int[] arr = {1,2,3,4}; /*不允许分开写,下面是错误的 int[] arr; arr={1,2,3,4}*/ int[] arr = new int[]{1,2,3,4}; //注意右边不需要指...原创 2019-04-09 17:02:42 · 138 阅读 · 0 评论 -
Java 面向对象
对象创建过程首次创建对象时或者对象的静态方法或静态属性被首次访问,Java解释器查找类路径,定位ClassName.class文件 载入ClassName.class(创建一个对象),所有静态初始化动作执行(首次使用这些动作或属性时),并且所有静态初始化动态只在此时执行一次 当new ClassName()创建对象时,首先在堆为className对象分配足够的内存空间 相对应的内存空间...原创 2019-04-09 16:32:55 · 117 阅读 · 0 评论 -
java this的用法
this含义:代表当前对象用法:用于返回对象的引用示例代码public class Test { public Test f() { return this;//获取当前对象的引用 } public static void main(String[] args) { Test test1 = new Test(); Test test2 =tes...原创 2019-04-08 15:41:16 · 72 阅读 · 0 评论 -
Java 方法重载 方法重写
方法重载规则参数个数不同 参数个数相同,但参数列表中对应的某个参数的类型不一样 方法的返回类型和参数名称不参与重载 "编译期绑定",,因为未产生对象,只看参数、引用类型绑定方法 public void f(String s,int i) {} public void f(int i,String s) {} //重载是正确的,这个点很难理解,大概是符合第二条规则 public...原创 2019-04-08 09:52:01 · 138 阅读 · 0 评论 -
java 的类型转换方式
隐式转换byte等整型转int,最高位(符号位保留),中间补0byte bt=-13;bt 源码:1000 1101 反码:1111 0010 补码:1111 0011int it=bt;it 源码:1000 0000 0000 1101 反码:1111 1111 1111 0010 补码:1111 1111 1111 0011...原创 2019-04-03 16:10:45 · 528 阅读 · 0 评论 -
【JAVA】关于向上转型与向下转型
向上转型: 子类引用的对象转换为父类类型称为向上转型。通俗地说就是是将子类对象转为父类对象。此处父类对象可以是接口 如果子类重写了父类的方法,就根据这个引用指向调用子类重写的这个方法,不是调用父类的,,这个调用过程就称为“动态绑定”。 ”动态绑定“的意义:如果父类是接口意味则父类是没办法实现方法的,必须要子类去实现,这时如果发生了向上转型,如果不实行动态...转载 2019-04-02 21:58:45 · 191 阅读 · 0 评论 -
java 数据溢出和编译错误的差别
int a=100000000000;编译错误,超出int范围int a=2100000000;int b=a*12020200;数据溢出,a并未溢出,但b在通过a计算后的数据溢出long e=10000000000*2*10L;所有未声明的整数都是int,前面计算之前已经编译错误long f=100000000L;int g=(int) f; g会发生溢出...原创 2019-04-02 14:47:52 · 220 阅读 · 0 评论 -
数组的复制
数组复制有以下几种方法:通过for循环进行数值复制 源数组名.clone() public static native void arraycopy(Object src, int srcPos,Object dest, int destPo, int length);(System类方法) public static int[] copyOf(int[] original, i...原创 2019-03-15 15:50:46 · 304 阅读 · 0 评论 -
java 一些容易忽视的小点-类和对象
构造器 通过new关键字调用 构造器虽然有返回值,但是不能定义返回值类型(返回值的类型肯定是本类),不能在构造器里使用return返回某个值。 构造器是有权限的,也就是可以添加public,也可以添加protect 。。。 使用this关键字调用重载的构造方法,避免相同的初始化代码。但只能在构造方法中用,并且必须位于构造方法的第一句 this不能用于s...原创 2019-03-03 19:17:19 · 129 阅读 · 0 评论 -
java 一些容易忽视的小点-控制语句
随机数.Math.random()该方法用于产生一个0到1区间的double类型的随机数,但是不包括1if-else循环语句如果if语句不写{},则只能作用于后面的第一条语句switch语句switch语句中case标签在JDK1.5之前必须是整数(long类型除外)或者枚举,不能是字符串,在JDK1.7之后允许使用字符串(String)for循环编译器将while(true...原创 2019-03-03 15:00:11 · 157 阅读 · 0 评论 -
java 一些容易忽视的小点-数据类型和运算符篇
注释文档注释: 以“/**”开头以“*/”结尾,注释中包含一些说明性的文字及一些JavaDoc标签(后期写项目时,可以生成项目的API) 行注释: 以“/*”开头以“*/”结尾,在“/*”和“*/”之间的内容为注释,我们也可以使用多行注释作为行内注释。但是在使用时要注意,多行注释不能嵌套使用标识符标识符必须以字母、下划线_、美元符号$开头($符号一般用于系统编译内部类,由系统自...原创 2019-03-02 22:17:05 · 160 阅读 · 0 评论 -
static
static 方法“static方法就是没有this的方法。在static方法内部不能调用非静态方法,反过来是可以的。而且可以在没有创建任何对象的前提下,仅仅通过类本身来调用static方法。这实际上正是static方法的主要用途。”static在对象存在前就存在(不是类存在前) static不能访问非静态方法和变量,反之可以 static方法无法使用this,应为不存在对象stat...原创 2019-03-02 13:16:18 · 129 阅读 · 0 评论 -
add()方法和Put()方法的差别
add()和put()方法都是集合框架中的添加元素的方法。但是put()方法应用于map集合中,add()方法应用于collection集合中。二者的主要区别是:返回值类型不一样。add()放回布尔(boolean)类型。因为像Set集合中不允许添加重复的元素。当HashSet调用add()方法时,如果返回false,表示添加不成功。put()的使用是:添加时出现相同的键,那么后添加的值会...原创 2018-08-22 17:36:35 · 28289 阅读 · 0 评论 -
泛型的理解(1)
eg.List<String> stringArrayList = new ArrayList<String>();其中List类后的泛型相当于参数,会随构造方法进入List类内部,然后对泛型E进行替换,使相关参数的数据类型变为String注意:泛型只在编译时有效,编译后的文件是不含泛型的,究其原因,在于Java中的泛型这一概念提出的目的,导致其只是作用于代码编译...原创 2018-08-21 22:02:35 · 128 阅读 · 0 评论 -
java集合框架图
原创 2018-08-21 20:24:46 · 259 阅读 · 0 评论 -
java string字符拼接符"+"的研究
程序: public class Test { public static void main(String args[]) { String s1 = "abc"; String s2 = "abc"; String s3 = "abc" + "def"; String s4 = "abcdef"; ...原创 2018-08-13 11:16:54 · 1060 阅读 · 0 评论 -
Java中的equals和==的差别 以及Java中等价性和同一性的讨论
==对基本数据类型比较的是值,对引用类型比较的是地址equals()比较的是对象的数据的引用等价性原理:自反性 x.equals(x)为true 对称性 x.equals(y) 为true时,y.equals(x) 也为true 传递性 若x.equals(y) 为true , y.equals(z) 为true, 则x.equals(z) 为true 一致性...原创 2018-08-05 14:45:54 · 640 阅读 · 0 评论 -
抽象类的有参与无参构造函数的研究
即使我们声明一个没有构造函数的抽象类,编译器还会为我们生成一个默认的保护级别的构造函数。子类实例化时(不管是否为带参构造)只会调用所有父类的无参构造函数,而带参构造必须通过显式去调用.调用顺序是先调用抽象类的无参构造函数,如果子类实例化时是使用带餐的构造函数,则再接着调用抽象类的带参构造函数,最后调用子类本身的构造函数。abstract class Person { //定义一个抽象类,...原创 2018-08-04 18:03:45 · 2609 阅读 · 0 评论 -
java中super关键字的用法
class Sum { int n; float f() { float sum=0; for(int i=1;i<=n;i++) sum=sum+i; System.out.println(“()=”+n); return sum; } } class Average ex原创 2017-10-11 20:03:54 · 995 阅读 · 0 评论 -
浅谈Java的数据结构
先上完整图数据结构:计算机中存储、组织数据的方式。分类:主要是三类,所有的容器数据结构都是这3个基本接口的扩展实现。其中(Legacy)标注的代表线程安全,可以用顺口溜:喂(Vector-对标ArrayList),S(Stack,StringBuffer-对标StringBuilder)H(HashTable-对标HashMap,Properties-继承自HashTabl...原创 2019-08-31 17:45:31 · 167 阅读 · 0 评论