
Java 基础
文章平均质量分 76
azhegps
技术源于不断滴追求!
展开
-
构造函数和析构函数的作用是什么?什么时候需要自己定义构造函数和析构函数?
构造函数的作用:用于新建对象的初始化工作。析构函数的作用:用于在撤销对象前,完成一些清理工作,比如:释放内存等。每当创建对象时,需要添加初始化代码时,则需要定义自己的构造函数;而对象撤销时,需要自己添加清理工作的代码时,则需要定义自己的析构函数。...原创 2017-05-05 14:00:31 · 22392 阅读 · 1 评论 -
【31】java.io.NotSerializableException: java.util.HashMap$KeySet有关问题处理
java.io.NotSerializableException: java.util.HashMap$KeySet问题处理 在代码中使用keyset时出现: java.io.NotSerializableException: java.util.HashMap$KeySet 异常。 代码是: cbgCustomer.setValue(customerItemMap....原创 2017-06-23 11:10:11 · 4338 阅读 · 0 评论 -
【30】UTF-8、BOM、<feff>的问题
有些编辑器,比如M$ Windows的记事本,在创建UTF8编码文件时会在头部添加一个不可见字符。这个字符可以通过vim查看到,而且如果是一个php文件,php4、php5在解析时均会有输出。这个被称作BOM(Byte Order Mark)的不可见字符,是Unicode用来标识内部编码的排列方式的,在UTF-16、UTF-32编码里它是必需的,而在UTF-8里是可选的。因此,才会出现...原创 2017-05-22 17:02:56 · 747 阅读 · 0 评论 -
【29】Java的native方法
一. 什么是Native Method 简单地讲,一个Native Method就是一个java调用非java代码的接口。一个Native Method是这样一个java的方法:该方法的实现由非java语言实现,比如C。这个特征并非java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern "C"告知C++编译器去调用一个C的函数。"A native met...转载 2017-05-22 10:25:55 · 346 阅读 · 0 评论 -
【28】动态代理proxy与CGLib的区别
什么是代理? 静态代理与动态代理 静态代理实例 JDK动态代理实例 CGLib 简介 CGLib 与JDK动态代理的区别 1. 代理模式是Java中常见的一种模式,不多说,直接上代码。 静态代理UML类图Subject:抽象主题角色,抽象主题类可以是抽象类,也可以是接口,是一个最普通的业务类型定义,无特殊要求。RealSubject:具体主题角色,也叫被委托角色、...原创 2017-05-08 23:49:06 · 649 阅读 · 0 评论 -
【27】解决ArrayList线程不安全
ArrayList线程不安全,个人认为解决这个问题通常有两种方法一:使用synchronized关键字,这个大家应该都很熟悉了,不解释了;二:使用Collections.synchronizedList();使用方法如下: 假如你创建的代码如下:List<Map<String,Object>> data=new ArrayList<Map&l...原创 2017-05-05 13:53:45 · 810 阅读 · 0 评论 -
【26】深入理解Java:注解(Annotation)--注解处理器
如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了。使用注解的过程中,很重要的一部分就是创建于使用注解处理器。Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处理器。注解处理器类库(java.lang.reflect.AnnotatedElement): Java使用Annotation接口来代表程序元素前面的注解,该接口是所有Annotation...原创 2017-05-05 13:11:58 · 368 阅读 · 0 评论 -
【25】深入理解Java:注解(Annotation)自定义注解入门
要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义自己的注解之前,我们就必须要了解Java为我们提供的元注解和相关定义注解的语法。元注解: 元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java5.0定义的元注解: 1.@Target, 2.@Rete...原创 2017-05-05 10:39:50 · 254 阅读 · 0 评论 -
【24】关于Class.getResource和ClassLoader.getResource的路径问题
Java中取资源时,经常用到Class.getResource和ClassLoader.getResource,这里来看看他们在取资源文件时候的路径问题。Class.getResource(String path)path不以’/'开头时,默认是从此类所在的包下取资源;path以’/'开头时,则是从ClassPath根下获取;什么意思呢?看下面这段代码的输出结果就明白了:pa...原创 2017-05-04 15:42:05 · 423 阅读 · 0 评论 -
【23】java中File类的getPath(),getAbsolutePath(),getCanonicalPath()区别
java中File类的getPath(),getAbsolutePath(),getCanonicalPath()区别File file = new File(".\\test.txt"); System.out.println(file.getPath()); System.out.println(file.getAbsolutePath()); System.out.println...原创 2017-05-04 15:29:48 · 365 阅读 · 0 评论 -
【22】java之多线程优先级说明
线程组的最大优先级理论上来说应该是Thread.MAX_PRIORITY,但是实际情况往往比较复杂,下面是摘抄、翻译自JAVAMEX -> Javathreading introduction -> Thread priorioties对于线程优先级,我们需要注意:* Thread.setPriority()可能根本不做任何事情,这跟你的操作系统和虚拟机版本有关...转载 2017-03-18 15:47:31 · 305 阅读 · 0 评论 -
【20】java多线程之join与yield
先说说join的用法, 在某些情况下,如果子线程里要进行大量的耗时的运算,主线程可能会在子线程执行完之前结束,但是如果主线程又需要用到子线程的处理结果,也就是主线程需要等待子线程执行完成之后再结束,这个时候就要用到join()。class Thread1 extends Thread { public Thread1() { super(...转载 2017-03-18 15:08:49 · 361 阅读 · 0 评论 -
【32】尽量避免诸如x.read(new FileInputStream(sourceFile)); 的写法
一不小心,顺手写了x.read(new FileInputStream(sourceFile)); 这样的代码,却引得自己花费了半个多小时去调试问题。 原因是这样的:在开发某一个feature的时候,需要对操作的文件进行backup,于是写了诸如下面的代码(以下仅是演示代码,与实际要简易,仅供参考):/* * XXX是一个处理类,soureFile是一个输入的File o...转载 2017-08-30 15:35:47 · 646 阅读 · 0 评论 -
【33】Java 的回调机制
所谓回调:就是A类中调用B类中的某个方法C,然后B类中反过来调用A类中的方法D,D这个方法就叫回调方法,这样子说你是不是有点晕晕的,其实我刚开始也是这样不理解,看了人家说比较经典的回调方式:Class A实现接口CallBack callback——背景1 class A中包含一个class B的引用b ——背景2 class B有一个参数为callback的方法f(Cal...转载 2017-11-09 14:00:30 · 229 阅读 · 0 评论 -
hashCode和identityHashCode的区别
hashCode()方法是Object类下面的一个方法,供继承类重写,根据对象内存地址计算哈希值,String类重写了hashCode方法,并改为根据字符序列来计算哈希值。identityHashCode()方法是System类中的静态方法,根据对象内存地址来计算哈希值。String s1 = new String("Hello");String s2 = new String("Hell...原创 2017-05-05 13:58:29 · 776 阅读 · 0 评论 -
【40】父类子类以及静态块,方法中的加载顺序
public class Test { public static void main(String[] args) { new Son(); new Father(); }}class Father { static { System.out.println("父类静态代码块初始化"); } { ...原创 2019-02-23 12:46:05 · 1289 阅读 · 1 评论 -
【39】父类子类中关于super
public class Test { public static void main(String[] args) { System.out.println(new BigDog("大黑狗", "黑色")); }}class Dog { String name;// public Dog() {// super();// ...原创 2018-12-15 14:08:25 · 513 阅读 · 0 评论 -
【38】n!中存在的问题
public class TestJC { public static void main(String[] args) { try{ int n = 100; factorial(n); }catch(Exception e){ ...原创 2016-12-22 15:26:36 · 402 阅读 · 0 评论 -
【37】隐式转换vs强制转换
在定义变量时,有许多要注意的问题,一不小心就会出现损失精度或者不兼容类型等问题。隐式转换特征:从小到大,可以隐式转换,数据类型将自动提升。byte,short,char -->int -->long -->float -->double。注意:long是8个字节,float是4个字节。long是整数,float是浮点型,整数和浮点数的存储规则不一样,记住一点l...原创 2016-12-13 14:18:47 · 2294 阅读 · 0 评论 -
【36】java中子类覆盖父类方法所必须满足的条件
package tong.yue.day4_264; import java.io.FileNotFoundException; import java.io.IOException; import javax.swing.JButton; import javax.swing.JComponent; /** * 子类重写(覆盖)父类的方法必须满...原创 2016-12-13 14:05:43 · 3722 阅读 · 0 评论 -
【35】数组和List性能比较
public class Test { private static int count = 200000000; public static void main(String[] args){ int[] datas = new int[count];// List<Integer> datasList = new ArrayLi...原创 2016-12-12 17:38:48 · 1862 阅读 · 1 评论 -
【11】几类map的区别和按照key、value排序
一、简单介绍Map HashMap:我们最常用的Map,它根据key的HashCode 值来存储数据,根据key可以直接获取它的Value,同时它具有很快的访问速度。HashMap最多只允许一条记录的key值为Null(多条会覆盖);允许多条记录的Value为 Null。非同步 TreeMap: 能够把它保存的记录根据key排序,默认是按升序排序,也可以指定排序...转载 2016-06-04 23:14:38 · 891 阅读 · 0 评论 -
【34】Java并发编程:并发容器之CopyOnWriteArrayList(转载)
Java并发编程:并发容器之CopyOnWriteArrayList(转载) 原文链接: http://ifeve.com/java-copy-on-write/ Copy-On-Write简称COW,是一种用于程序设计中的优化策略。其基本思路是,从一开始大家都在共享同一个内容,当某个人想要修改这个内容的时候,才会真正把内容Copy出去形成一个新的内容然后再改,这是一种延...转载 2017-12-04 16:33:12 · 292 阅读 · 0 评论 -
【3】Java I/O操作
本文讲述如下流:FileWriter、FileReader、BufferWriter、BufferReader、LineNumReader、FileOutputStream、FileInputStream、BufferInputStream、BufferOutputStream1、明确“源”和“目的”: 字节流 ...原创 2015-12-13 00:01:10 · 599 阅读 · 0 评论 -
【1】java线程之synchronized的用法详解
Java语言的关键字,当它用来修饰一个方法或者一个代码块的时候,能够保证在同一时刻最多只有一个线程执行该段代码。 一、当两个并发线程访问同一个对象object中的这个synchronized(this)同步代码块时,一个时间内只能有一个线程得到执行。另一个线程必须等待当前线程执行完这个代码块以后才能执行该代码块。 二、然而,当一个线程访问object的一个synchroni...原创 2015-05-16 15:55:21 · 487 阅读 · 0 评论 -
【2】Java中Integer直接比较大小
Integer a = -1250;Integer b = -1250;System.out.println(a == b);Integer c = -125;Integer d = -125;System.out.println(c == d);上面两段代码输出结果为:false true原因:Integer在比较value大小时,Integer对象有个缓存,如果v...原创 2015-08-17 18:57:34 · 7237 阅读 · 0 评论 -
【21】java容器之Array转换List过程中的bug
Array都不陌生,List 是一个接口。它代表着有序的队列。ArrayList, LinkedList, Vector, Stack是List的4个实现类。这些类从名字也能猜出基本的用法,不多说。Java里把普通数组转化为List有个专门的静态方法,asList,使用示例如下:public class ArraysToList { public static vo...原创 2017-03-18 15:39:38 · 285 阅读 · 0 评论 -
【19】java多线程之生产者消费者经典问题
consumer和producer里面的线程休眠,一个10ms一个100ms只是为了让producer有更高概率获得对象锁,其实不写也线程休眠也可以。package thread; public class ProduceConsume { public static void main(String[] args) { SyncStack...转载 2017-03-18 12:26:53 · 347 阅读 · 0 评论 -
【18】java锁之wait,notify(wait会释放锁,notify仅仅只是通知,不释放锁)
wait是指在一个已经进入了同步锁的线程内,让自己暂时让出同步锁,以便其他正在等待此锁的线程可以得到同步锁并运行,只有其他线程调用了notify方法(notify并不释放锁,只是告诉调用过wait方法的线程可以去参与获得锁的竞争了,但不是马上得到锁,因为锁还在别人手里,别人还没释放),调用wait方法的一个或多个线程就会解除wait状态,重新参与竞争对象锁,程序如果可以再次得到锁,就...原创 2017-03-18 00:57:00 · 22957 阅读 · 3 评论 -
【9】java几个常用线程类简介
1、Semaphere Semaphore可以维护当前访问自身的线程个数,并提供了同步机制。使用Semaphore可以控制同时访问资源的线程个数,例如,实现一个文件允许的并发访问数。 Semaphore实现的功能就类似厕所有5个坑,假如有十个人要上厕所,那么同时能有多少个人去上厕所呢?同时只能有5个人能够占用,当5个人中的任何一个人让开后,其中在等待的另外5个人中又有一个可以占用...原创 2016-03-13 14:41:50 · 917 阅读 · 0 评论 -
【7】内省(introspector)和javabean
1,内省和javabean 一个符合JavaBean特点的类可以当作普通类一样进行使用,但把它当JavaBean用肯定需要带来一些额外的好处,在开发中,经常要使用到JavaBean。很多环境就要求按JavaBean方式进行操作。JDK中提供了对JavaBean进行操作的一些API,这套API就称为内省。 JavaBean是一个遵循特定写法的Java类,它通常具有如...原创 2016-01-09 15:35:31 · 410 阅读 · 0 评论 -
【8】java线程初识,stop和sleep区别
1、线程每一个线程都有自己运行的内容。这个内容可以称为线程要执行的任务。多线程好处:解决了多部分同时运行的问题。多线程的弊端:线程太多回到效率的降低。其实应用程序的执行都是cpu在做着快速的切换完成的,这个切换是随机的。JVM启动时就启动了多个线程,至少有两个线程可以分析的出来。[1-1]执行main函数的线程,该线程的任务代码都定义在main函数中。[1-2]负责垃圾回收的线程。2、...原创 2016-01-11 22:34:45 · 3053 阅读 · 0 评论 -
【6】Java的反射机制
1,反射的基石-->class 一个类被类加载器加载到内存中,占用一片存储空间,一个类对应一个字节码对象,但是这个字节码对象可以对应多个实例对象。这个空间里面的内容就是类的字节码,不同的类的字节码是不同的,所以它们在内存中的内容是不同的。反射就是把Java类中的各种成分映射成相应的java类。一个类中的组成部分:成员变量,方法,构造方法,包等等信息用一个个的Java类来表示,...原创 2016-01-05 23:47:33 · 330 阅读 · 0 评论 -
【4】JAVA中集合框架基础解析
0、接口Map和Collection在层次结构没有任何亲缘关系,它们是截然不同的。Collection 下有list,queue,set。1、ArrayList 底层是数组结构,特点:查询快,增删慢。数组初始10,按照(旧容量*3)/2+1。线程不同步 LinkedList 底层使用的链表数据结构,特点相反。线程不安全 注意:List list = new A...原创 2015-12-24 23:26:44 · 337 阅读 · 0 评论 -
【5】Java之I/O之 键盘操作转换流
1.读取键盘录入。System.out:对应的是标准输出设备,控制台。System.in:对应的标准输入设备:键盘。通过键盘录入数据。当录入一行数据后,就将该行数据进行打印。如果录入的数据是over,那么停止录入。import java.io.*;class ReadIn{ public static void main(String[] args) throws IOExce...原创 2015-12-28 21:51:12 · 367 阅读 · 0 评论 -
【10】加密算法简介
加密算法通常分为对称性加密算法和非对称性加密算法,对于对称性加密算法,信息接收双方都需事先知道密匙和加解密算法,秘匙相同,之后便是对数据进行加解密了。非对称算法与之不同,发送双方A,B事先均生成一堆密匙,然后A将自己的公有密匙发送给B,B将自己的公有密匙发送给A,如果A要给B发送消息,则先需要用B的公有密匙进行消息加密,然后发送给B端,此时B端再用自己的私有密匙进行消息解密,B向A...转载 2016-06-04 23:12:13 · 652 阅读 · 0 评论 -
【12】ArrayList和LinkedList的几种循环遍历方式及性能对比分析
主要介绍ArrayList和LinkedList这两种list的五种循环遍历方式,各种方式的性能测试对比,根据ArrayList和LinkedList的源码实现分析性能结果,总结结论。通过本文你可以了解(1)List的五种遍历方式及各自性能 (2)foreach及Iterator的实现 (3)加深对ArrayList和LinkedList实现的了解。阅读本文前希望你已经了解ArrayList顺...转载 2016-06-05 12:33:44 · 496 阅读 · 0 评论 -
【17】Java多线程:线程状态
一. 线程状态类型1. 新建状态(New):新创建了一个线程对象。2. 就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法。该状态的线程位于可运行线程池中,变得可运行,等待获取CPU的使用权。3. 运行状态(Running):就绪状态的线程获取了CPU,执行程序代码。4. 阻塞状态(Blocked):阻塞状态是线程因为某种原因放弃CPU使用权,暂时...转载 2017-03-18 00:29:54 · 303 阅读 · 0 评论 -
【16】Propreties使用时路径问题
Propretie概述:一般我们保存一些配置文件,最典型的当属jdbc配置文件. 形如:driverClassName=com.mysql.jdbc.Driverurl=jdbc:mysql://localhost:3306/mydbuser=rootpassword=******Properties放置位置:1、放置到src的目录下 2、放置到src的子目录下...转载 2016-12-20 13:15:52 · 859 阅读 · 0 评论 -
【13】java 序列化ID的作用
序列化ID的作用: 序列化ID决定:是否能够成功反序列化!简单来说,java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的。在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地实体类中的serialVersionUID进行比较,如果相同则认为是一致的,便可以进行反序列化,否则就会报序列化版本不一致...原创 2016-08-09 19:45:29 · 1294 阅读 · 0 评论