java基础
iteen
优秀,源于好的习惯和点滴的积累!
展开
-
如何判断Object对象的原类型
我们以一个Map集合为例:Map<String, Object> map = new HashMap<>();map.put("1", 1);map.put("2", 2.0);map.put("3", "3");System.out.println(map.get("1") instanceof Integer);//trueSystem.out.p...原创 2018-05-01 16:14:12 · 7428 阅读 · 0 评论 -
Java动态代理
动态代理作为javaEE中相对比较高级的技术,它可以增强java类中的方法,和其他两种增强的方式相比较动态代理更灵活限制条件相对较少;它结合反射可以写出很多通用性很高的工具类.Spring的面向切面编程(AOP)的底层就有使用到jdk的动态代理.所以动态代理相对比较重要. 动态代理的条件是被代理的类需要实现接口.在动态代理中有两个很重要的类(接口),Proxy(类),Invocati...原创 2018-06-29 15:51:06 · 205 阅读 · 1 评论 -
反射
反射,一直是觉得一个比较高级而且非常核心的技术,很多框架和工具都有用到反射,今天简单的总结一下反射常用的方法.1.反射的概念 java的方式机制是在运行状态中,对任意一个类,都能够知道这个类的属性和方法,对于任意一个对象,都能调用它的任意一个方法,这种动态的获取以及动态的调用对象的方法的功能成为java语言的反射机制. 2.字节码对象 在类加载后,会在堆内存中生成一个Cl...原创 2018-06-26 22:00:19 · 458 阅读 · 0 评论 -
增强类中的方法之继承和装饰者模式
增强一个java类中的某个方法的几种方式有:①继承的方式②装饰者模式方式③动态代理的方式;本文着重介绍前两种,动态代理另外用一篇来讲解.继承 用这种方式来增强类中的某个方法的时候必须要能够获取得到这个类.也就是说你能继承得到这个类.下面我们用代码演示下:public class Animal { public void eat(){ System.out.println("吃东西");...原创 2018-06-27 21:41:03 · 477 阅读 · 0 评论 -
java中Timer定时器的使用和启动
一.概述定时计划任务功能在Java中主要使用的就是Timer对象,它在内部使用多线程的方式进行处理,所以它和多线程技术还是有非常大的关联的。在JDK中Timer类主要负责计划任务的功能,也就是在指定的时间开始执行某一个任务,但封装任务的类却是TimerTask类。二.应用场景我们使用timer的时候,一般有4种情况:1.指定时间执行;2.指定时间执行后间隔指定时间重复执行;3.启...原创 2018-08-18 14:31:03 · 19435 阅读 · 4 评论 -
Java接口回调详解
一.产生接口回调的场景在现实生活中,产生接口回调的场景很简单,比如我主动叫你帮我做一件事,然后你做完这件事之后会通知我,"通知我"这个动作就是接口回调的动作.接口回调重在理解思就好.再举个例子用于下面的代码演示,老师让学生做课堂练习,学生做完练习后并告诉老师.二.什么是接口回调在Java的层面简单的说一下接口回调:现有一个接口A,和它的实现类A1,和另外一个有接口A引用的类B,因为类B...原创 2018-08-29 16:15:33 · 24071 阅读 · 8 评论 -
ArrayList工作原理及底层源码实现
一.概述以数组实现。节约空间,但数组有容量限制。超出限制时会增加50%容量,用System.arraycopy()复制到新的数组。因此最好能给出数组大小的预估值。默认第一次插入元素时创建大小为10的数组。按数组下标访问元素-get(i)、set(i,e) 的性能很高,这是数组的基本优势。如果按下标插入元素、删除元素-add(i,e)、 remove(i)、remove(e),则要用Sy...原创 2018-08-30 16:10:04 · 675 阅读 · 0 评论 -
Java泛型
一.为什么会使用泛型从Java程序设计语音1.0以来,变化最大部分就是泛型.泛型正是我们需要的程序设计手段.使用泛型机制编写的程序代码要比哪些杂乱的使用Object变量,然后再进行强制类型转换的代码具有更好的安全性和可读性.在Java中增加泛型类之前,泛型程序设计就是用继承实现的.ArrayList类只维护一个Object引用的数组.类似于下面的代码:public class Arr...原创 2018-09-19 17:10:30 · 280 阅读 · 0 评论 -
LinkList源码分析
本篇介绍的LinkedList是List接口的一种实现,它的底层是基于双向链表实现的,因此它具有插入删除快而查找修改慢的特点,此外,通过对双向链表的操作还可以实现队列和栈的功能。LinkedList的底层结构如下图所示。F表示头结点引用,L表示尾结点引用,链表的每个结点都有三个元素,分别是前继结点引用(P),结点元素的值(E),后继结点的引用(N)。结点由内部类Node表示,我们看看它的内部结...转载 2018-10-17 15:39:26 · 527 阅读 · 0 评论 -
Java中常见排序算法详解
插入排序基本思想:从数组的第二个元素开始,若比前一个元素小,就向前移动(若大于就不用移动),直到插入到合适的位置,然后再去排第三个元素,依次类推,最后一个插入到合适位置时,数组的排序就完成了。流程如图所示:代码如下:/** * 直接插入排序 * @date 2018-10-18 * @param arr */ public static void sort1(i...原创 2018-11-05 11:33:45 · 4300 阅读 · 3 评论 -
Integer类和int的关系以及自动装箱
什么是自动拆装箱: 假设我们想定义一个整型的数组列表(集合),而尖括号里的类型不允许是基本数据类型,也就是说,不允许写成ArrayList<int>,这里就必须用到Integer类.像这样的情况,需要将int这样的基本数据类型转换为对象.所有的基本类型都有一个与之对应的类.例如:Integer对应的基本数据类型int.通常这些类型称之为包装器.他们的名字和基本数据类型有些小的差别...原创 2018-06-08 13:57:15 · 273 阅读 · 0 评论 -
final finally finalize的区别
final finally finalize的区别final(最终的): 1.final修饰的类,不可以被继承,比如String类; 2.final修饰的方法,不能被重写;综上两点:final不能和abstract共存(因为抽象类自身无法创建对象,我们需要通过子类创建对象,一旦抽象类使用final关键字,那么抽象类就没有子类,抽象方法不能和final共存,因为抽象方法后期需要被子类重写...原创 2018-05-30 16:33:20 · 348 阅读 · 0 评论 -
String类的常见面试题,以及String,StringBuffer和StringBuilder的区别
写几个String类的常见面试题,觉得可以的老铁点赞哈,欢迎各路大神指教!内容有点多需要耐心点看完.先说说String,StringBuffer和StringBuilder的区别吧 String是字符串常量,用final修饰,StringBuffer是字符串变量,它是线程安全的,StringBuilder也是字符串变量,但是他是线程不安全的. String和StringBuffer的区...原创 2018-05-19 11:41:14 · 3795 阅读 · 0 评论 -
传统工程下读取文件以及如何获取文件的磁盘绝对路径
我们在读取文件的时候首先要知道的就是弄清楚文件的路径是什么,找到文件路径了才能读取到文件.现在介绍两种方法在传统工程中获取到文件的路径:第一种:通过JVM(java虚拟机)为准,相对的去找文件的路径.我们在传统工程读文件的时候其实默认是就是以JVM为基准,而传统工程的结构如下图:如果我们想要读取的db.properties这个文件的时候就需要在代码中获取到它相对于JVM的路径(src/db....原创 2018-05-14 20:16:51 · 762 阅读 · 0 评论 -
关于equals()方法和==号的区别
首先说一下相同点: 两个方法都是用来做比较,并且比较的结果都是布尔值.然后在说一下不同点: 对于 == 方法来说,对于基本数据类型的比较是比较二者的值是否相等,对于引用类型比较的是地址值是否相等. equals()方法只能比较引用数据类型,在没有重写的情况下比较的是二者的地址值是否相等,对于String,Inreger等包装类都重写了equals()方法,比较的是内容是否相同.这...原创 2018-05-15 14:06:22 · 188 阅读 · 0 评论 -
java中和时间日期相关的类System,Date,SimpleDateFormat,DateFormat,Calender类的常用方法以及联系(转换)
java中和时间日期相关的类有不少,之前系统的学习过,但是由于不经常用容易忘记,今天决定带着源码,用相对容易理解的表达,梳理一遍. System类 此类中的currentTimeMillis方法和时间有关,此方法返回的是系统的当前时间相对于1970-1-1 00:00:00(协调世界时)的毫秒值,返回是数据类型是long,具体的看下面的代码:Date类 类Date表示特定的瞬间...原创 2018-05-25 20:41:16 · 701 阅读 · 0 评论 -
如何学好java基础
今天在公众号偶然发现这么一篇文章,对于笔者谈的:"一方面很努力学习,一方面又觉得不踏实",我感同身受.觉得文章写得不错,在此献给一些在java中努力修炼的道友,希望能有所收获.这是文章链接:https://mp.weixin.qq.com/s/IU_xCCGSRbEQQLkpqpaB3A文章内容我也全部copy过来:近日里,很多人邀请我回答各种j2ee开发的初级问题,我无一都强调java初学者要先...转载 2018-05-22 09:48:08 · 12123 阅读 · 5 评论 -
continue和break的区别,以及如何跳出多重循环(或者判断)语句
先说一下很简单的continue和break的区别:continue:在循环语句中,它会中断正常的控制流程(跳出当次循环),将控制转移到continue所在的流程的首部,然后继续下一次循环例如:break:可用在循环,判断等语句中,用于退出当前语句(在循环语句中就是退出当前循环,在判断语句中就是判断当前判断语句)例如:然后是如何跳出多重嵌套, 我们在实际开发的时候往往判断条件会很多,会涉及的语句的...原创 2018-05-16 17:07:51 · 52428 阅读 · 3 评论 -
赋值预算符"="的几种使用情况对比
"=",运用在基础数据类型,String类,和其他类情况有所不同,比如下面这段代码,我学了java这么久了,突然发现自己居然拿不准,于是仔细的研究了内存,在此分享给大家. int a = 3; int b = a; a = 4; System.out.println(b); //3 String a1 = "小明"; String a2 = a1; a1 ...原创 2018-05-22 21:44:10 · 303 阅读 · 0 评论 -
java中静态代码块,构造代码块,局部代码块等的执行顺序以及特点
静态代码块:在类中方法外出现,并加上static修饰;用于给类进行初始化,在加载的时候就执行,并且只执行一次。,如果一个类中用main方法,静态代码块要先于main方法执行;静态代码款示例: static { System.out.print("我是构造代码块!"); }构造代码块:在类中方法外出现,多个构造方法方法中相同的代码存放到一起,每次调用构造都执行,并且...原创 2018-05-28 20:34:33 · 654 阅读 · 0 评论 -
System.gc()和Runtime.gc()和finalize()的联系
首先,System.gc()和Runtime.gc()是没有任何区别的,每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。可以通过 getruntime 方法获取当前运行时。 在API中Runtime类的gc方法是这样写的: 名称 gc 代表“垃圾回收器”。虚拟机根据需要在单独的线程中自动执行回收过程,甚至不用显式调用 gc 方法。 ...原创 2018-05-24 15:29:50 · 3503 阅读 · 0 评论 -
Java中throws和throw的区别讲解
当然,你需要明白异常在Java中式以一个对象来看待。并且所有系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常,但是一般情况下Java 强烈地要求应用程序进行完整的异常处理,给用户友好的提示,或者修正后使程序继续执行。直接进入正题哈:1.用户程序自定义的异常和应用程序特定的异常,必须借助于 throws 和 throw 语句来定义抛出异常。1.1 throw是语句抛出一个异常。...转载 2018-12-26 15:46:15 · 148 阅读 · 0 评论