Java核心技术
youngogo
go
展开
-
System.arraycopy()使用原理解析,坑点之:深拷贝和浅拷贝
一、深度复制和浅度复制的区别 Java数组的复制操作可以分为深度复制和浅度复制,简单来说深度复制,可以将对象的值和对象的内容复制;浅复制是指对对象引用的复制。二、System.arraycopy()方法实现复制1、System中提供了一个native的静态方法arraycopy()。可以使用这个方法来实现数组之间的复制。对于一维数组来说,这种复制属性值传递,修改副本 不会影响原来的值。 对于二维或者一维数组中存放的是对象时,复制结果是:一维的引用变量 传递给 副本的一维数组...原创 2020-07-30 14:37:16 · 3001 阅读 · 0 评论 -
一文全解决,字符编码问题
请看大佬博客http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html原创 2020-06-11 15:00:20 · 171 阅读 · 0 评论 -
Java手写LinkedList 应用数据结构之双向链表
作为Java程序员,扎实的数据结构算法能力是必须的LinkedList理解的最好方式是,自己手动实现它 ArrayList和LinkedList是顺序存储结构和链式存储结构的表在java语言中的实现. ArrayList提供了一种可增长数组的实现,使用ArrayList,因为内部使用数组实现,所以,它的优点是,对于get和set操作调用花费常数时间.缺点是插入元素和...原创 2018-10-02 20:35:52 · 1261 阅读 · 1 评论 -
Java的外部类,为什么只能使用public和default进行修饰
对于这个问题,一直没有仔细思考对于顶级类(外部类)来说,只有两种修饰符:public和默认(default)。因为外部类的上一单元是包,所以外部类只有两个作用域:同包,任何位置。因此,只需要两种控制权限:包控制权限和公开访问权限,也就对应两种控制修饰符:public和默认(default)。可以满足所有的情况了。如果类使用了private修饰符,说明是个内部类。内部类的上一级是外部类,那么...原创 2018-09-08 18:21:01 · 4745 阅读 · 0 评论 -
Java程序员能否手动释放内存,以及指定释放内存时间
Java和c++之间有一堵由内存分配和垃圾收集技术所围成的“高墙”,墙外面的人想进去,墙里面的人想出来 java的GC回收是完全自动的,没有提供相关api手动回收,所有的内存分配和回收权限都在jvm,不在开发人员手里没有绝对的强制垃圾回收的方法,不过可以这样去做:1. 对于不再引用的对象,及时把它的引用赋为null。 obj = null;2. 如果内存确实很紧张,调用System...原创 2018-08-29 16:14:01 · 32799 阅读 · 3 评论 -
最易懂解释静态方法static为什么不能访问非静态方法和属性
不管是静态方法还是静态成员,都是类级别存在的也就是说随着类的加载而加载,优先于对象的存在而非静态成员和方法是对象级别的存在所以在静态方法中调用非静态的成员或方法(此时还不存在对象),是不可能的,但是反过来是可以的:非静态中调用静态。于是也就有静态方法中不能使用this和super关键字...原创 2018-08-29 09:05:18 · 2792 阅读 · 0 评论 -
.class和getClass()深度理解
能用一句话说清楚的绝不多说,能从原理讲起的,绝不从表面讲解。java有两个获得类名的方法getClass()和class(),这两个方法看似一样,实则不然。这两个方法涉及到了java中的反射。.class 用于类 而 getClass()用于对象。.class和getClass()使用java程序可以得到运行时的类,其实得到就是 Class<T> 一个泛型 的 Class对象 T...原创 2018-08-26 14:24:19 · 1175 阅读 · 0 评论 -
NoClassDefFoundError和ClassNotFoundException的区别
我们容易把java.lang.ClassNotFoundException和java.lang.NoClassDefFoundError这两个错误搞混。虽然他们都与Java classpath有关,但是他们完全不同。NoClassDefFoundError发生在JVM在动态运行时,根据你提供的类名,在classpath中找到对应的类进行加载,但当它找不到这个类时,就发生了java.lang.N...原创 2018-07-21 08:14:15 · 175 阅读 · 0 评论 -
详解访问修饰符protected和default的区别
访问修饰符,即对访问范围的控制。在Java中,有以下几种访问修饰符:1.对类而言:(1)public:在所有的包中均可见(2)default(默认):只在该类所在包中可见注:类不能用private和protected来修饰2.对成员变量和成员方法而言:(1)public:在所有包中均可见(且可调用)(2)protected:包内所有类中均可见(且可调用),包外有继承关系...原创 2018-07-20 18:50:26 · 3655 阅读 · 0 评论 -
详解java构造函数,以及父类子类之间构造函数的关系
主要解析复习类的构造函数:首先明确一点:在一个类中没有任何构造函数时,编译器会自动给该类创建一个不带参数的构造方法,如果自己定义了构造函数则编译器不会自动创建构造函数***接下来我们看下继承之间构造函数直接的关系 1.父类中没有有参构造函数,不管无参构造是不是你自己创建的此时在子类中的构造函数不管是有参还是无参不管是自己创建还是编译器创建,子类都都会调用父类中的一...原创 2018-07-20 16:36:56 · 726 阅读 · 0 评论 -
对比 Hashtable、HashMap、TreeMap 的区别联系以及适用场景
典型回答 1、hashtable是早起java类库提供的一个哈希表实现,本身是同步的,不支持null键和空值,由于同步导致的性能开销,现在已经很少被使用了2、hashmap是应用更加广泛的哈希表实现,应为大体和hashtable一致,不同点是hashmap支持null键和空值,而且不是同步的。他的put和get方法,可以达到常数时间的性能,是绝大多数利用键值对存取场景的首选3、tr...原创 2018-07-29 09:04:35 · 3101 阅读 · 0 评论 -
详解Java平台
首先我们回顾JRE(Java Runtime Environment )java运行环境,以及JDK(Java Development Kit)组成jre是java运行环境,包含JVM,java类库以及一些模块,jdk可以看做是jre的超集,提供了更多工具,比如编译器各种诊断工具 java平台 java平台顾名思义就是,java语言在计算机上能执行的环境以及工具宏观角度 ...原创 2018-07-19 18:58:59 · 304 阅读 · 0 评论 -
最新浅析java源代码转换为机器码的编译执行过程
我们先来看一下编译型语言和解释型语言的之间的区别联系 编译型语言:C/C++ 编译过程是将源代码(高级语言,人类容易读,容易理解),转换为机器码(cpu能理解,能高效的执行)的过程.解释型语言:JavaScript python 等 直接解释源代码,并且直接执行,没有编译过程编译程序是整体编译完了,再一次执行,而解释程序是边解释边执行. 那么jav...原创 2018-07-19 09:47:07 · 7394 阅读 · 0 评论 -
详解String、StringBuffer、StringBuilder区别联系以及适用场景
1 String(1) String的创建机理由于String在Java世界中使用过于频繁,Java为了避免在一个系统中产生大量的String对象,引入了字符串常量池。其运行机制是:创建一个字符串时,首先检查池中是否有值相同的字符串对象,如果有则不需要创建直接从池中刚查找到的对象引用;如果没有则新建字符串对象,返回对象引用,并且将新创建的对象放入池中。但是,通过new方法创建的String对象...原创 2018-07-23 16:23:31 · 330 阅读 · 0 评论