201412-21 Java中static变量作用和用法详解 static表示“全局”或者“静态”的意思,用来修饰成员变量和成员方法,也可以形成静态static代码块,但是Java语言中没有全局变量的概念。被static修饰的成员变量和成员方法独立于该类的任何对象。也就是说,它不依赖类特定的实例,被类的所有实例共享。只要这个类被加载,Java虚拟机就能根据类名在运行时数据区的方法区内定找到他们。因此,static对象可以在它的任何对象创建之前访问,无需引... 继续阅读 >
201412-21 Java I/O底层是如何工作的? 本博文主要讨论I/O在底层是如何工作的。本文服务的读者,迫切希望了解JavaI/O操作是在机器层面如何进行映射,以及应用运行时硬件都做了什么。假定你熟悉基本的I/O操作,比如通过JavaI/OAPI读写文件。这些内容不在本文的讨论范围。缓存处理和内核vs用户空间缓冲与缓冲的处理方式,是所有I/O操作的基础。术语“输入、输出”只对数据移入和移出缓存有意义。任何时候都要把它记在心中。通常,进程执行操作系统的I/O请... 继续阅读 >
201412-21 Java 9特性 Oracle已经公布,Java9首个增强计划集(众所周知的JEPs),已经确定会在2016年早些时候发布。三个新的API已经公布:ProcessAPI在更新后能够与操作系统中非JAVA相关的进程互动,目前使用的API存在诸多限制,这迫使开发人员经常求助于本地代码。这个API存在的主要风险是操作系统的异构性,尤其是Windows。该API的设计需要适应在不同的操作系统上的小型设备的部署工作,它还应该考虑多个Java虚拟机运行在同一个操作... 继续阅读 >
201412-05 java 异常大集合 关键字:Java算术异常类:ArithmeticExecption空指针异常类:NullPointerException类型强制转换异常:ClassCastException数组负下标异常:NegativeArrayException数组下标越界异常:ArrayIndexOutOfBoundsException违背安全原则异常:SecturityException文件已结束异常:EOFException文件未找到异常:FileNotFoundException字符串转换为数字异常:NumberFormatException操... 继续阅读 >
201412-04 Java并发 >synchronizedsynchronized关键字,它包括两种用法:synchronized方法和synchronized块。 1>synchronized方法:通过在方法声明中加入synchronized关键字来声明synchronized方法。 publicsynchronizedvoidaccessVal(intnewVal); synchronized方法控制对类成员变量的访问:每个类实例对应一把锁,每个synchronized方法都必须获... 继续阅读 >
201412-03 Java线程面试题Top50 不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题。Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎。大多数待遇丰厚的Java开发职位都要求开发者精通多线程技术并且有丰富的Java程序开发、调试、优化经验,所以线程相关的问题在面试中经常会被提到。在典型的Java面试中,面试官会从线程的基本概念问起,如:为什么你需要使用线程,如何创建线程,用什么方式创建线程比较好... 继续阅读 >
201412-03 Java中关于String类型的10个问题 1.如何比较两个字符串?用“=”还是equals简单来说,“==”是用来检测俩引用是不是指向内存中的同一个对象,而equals()方法则检测的是两个对象的值是否相等。只要你项检测俩字符串是不是相等的,你就必须得用equals()方法。如果你知道“字符串保留(stringintern)”的概念那就更好了。2.为什么安全敏感的字符串信息用char[]会比String对象更好?String对象是不可变的就意味... 继续阅读 >
201412-03 Java数组操作的10大方法 下面是精心整理的Java数组操作的10大方法,大部分代码都来自StackOverflow。0、定义一个Java数组String[]aArray=newString[5];String[]bArray={"a","b","c","d","e"};String[]cArray=newString[]{"a","b","c","d","e"};第一种是定义了一个数组,并且指定了数组的长度,我们这里称它为动态定义。第二种和第三种在分配内存空间的同时还初始化了值。1、打印Java数组中的元素int[]intArray={1,... 继续阅读 >
201412-03 JAVA多线程和并发基础面试问答 多线程和并发问题是Java技术面试中面试官比较喜欢问的问题之一。在这里,从面试的角度列出了大部分重要的问题,但是你仍然应该牢固的掌握Java多线程基础知识来对应日后碰到的问题。Java多线程面试问题1.进程和线程之间有什么不同?一个进程是一个独立(selfcontained)的运行环境,它可以被看作一个程序或者一个应用。而线程是在进程中执行的一个任务。Java运行环境是一个包含了不同的类和程序的单一进程。线程... 继续阅读 >
201412-03 7款开源Java反编译工具 今天我们要来分享一些关于Java的反编译工具,反编译听起来是一个非常高上大的技术词汇,通俗的说,反编译是一个对目标可执行程序进行逆向分析,从而得到原始代码的过程。尤其是像.NET、Java这样的运行在虚拟机上的编程语言,更容易进行反编译得到源代码。当然,也有一些商业软件,对其程序进行了混淆加密,这样我们就很难用工具反编译了。1、Java反编译插件—— JadclipseJadClipse是Jad的Eclipse插... 继续阅读 >
201412-03 如何用Java编写一段代码引发内存泄露 文本来自StackOverflow问答网站的一个热门讨论:如何用Java编写一段会发生内存泄露的代码。Q:刚才我参加了面试,面试官问我如何写出会发生内存泄露的Java代码。这个问题我一点思路都没有,好囧。A1:通过以下步骤可以很容易产生内存泄露(程序代码不能访问到某些对象,但是它们仍然保存在内存中):应用程序创建一个长时间运行的线程(或者使用线程池,会更快地发生内存泄露)。线程通过某个类加载器(可以自... 继续阅读 >
201412-03 Java enum 枚举还可以这么用 在大部分编程语言中,枚举类型都会是一种常用而又必不可少的数据类型,Java中当然也不会例外。然而,Java中的Enum枚举类型却有着许多你意想不到的用法,下面让我们一起来看看。1、可以在enum中添加变量和方法先来看一段代码示例:publicenumState{Normal("正常态",1),Update("已更新",2),Deleted("已删除",3),Fired("已屏蔽",4);//成员变量privateStringname;private... 继续阅读 >
201412-03 java中jar命令详解 做项目的时候我们肯定接触过很多jar包,那么jar包是什么呢?笔者了解到jar是javaarchivefile的简写。从名字就可以知道,它的应用与Java息息相关。下面就详细介绍如何自己生成jar包,这样我们管理我们自己的代码(尤其是一些比较重要而且不会或者很少有修改的代码)。安装好JDK之后,jar.exe就已经安装好了。在命令行中键入jar命令之后,就会出现下图。里面详细的介绍了jar命令的用法:下面我们举例介绍jar命令的一些比较... 继续阅读 >
201412-03 介绍Java中的内存泄漏 Java语言的一个关键的优势就是它的内存管理机制。你只管创建对象,Java的垃圾回收器帮你分配以及回收内存。然而,实际的情况并没有那么简单,因为内存泄漏在Java应用程序中还是时有发生的。下面就解释下什么是内存泄漏,它为什么会发生,以及我们如何阻止它的发生。1.什么是内存泄漏?内存泄漏的定义:对象已经没有被应用程序使用,但是垃圾回收器没办法移除它们,因为还在被引用着。要想理解这个定义,我... 继续阅读 >
201412-03 Java程序员最常用的8个Java日志框架 作为一名Java程序员,我们开发了很多Java应用程序,包括桌面应用、WEB应用以及移动应用。然而日志系统是一个成熟Java应用所必不可少的,在开发和调试阶段,日志可以帮助我们更好更快地定位bug;在运行维护阶段,日志系统又可以帮我们记录大部分的异常信息,从而帮助我们更好的完善系统。本文要来分享一些Java程序员最常用的Java日志框架组件。1、Log4j–最受欢迎的Java日志组件Log4j是一款基于Java的开源日志... 继续阅读 >
201412-03 Java 8 Update 20 的新特性 —— 字符串去重 字符串在任何应用中都占用了大量的内存。尤其数包含独立UTF-16字符的char[]数组对JVM内存的消耗贡献最多——因为每个字符占用2位。内存的30%被字符串消耗其实是很常见的,不仅是因为字符串是与我们互动的最好的格式,而且是由于流行的HTTPAPI使用了大量的字符串。使用Java8Update20,我们现在可以接触到一个新特性,叫做字符串去重,该特性需要G1垃圾回收器,该垃圾回收器默认是被关闭的。字符串去重... 继续阅读 >